nfs服务器

文件传输工具

ftp:vsftpd工具
Samba:Linux和Windows之间进行文件共享
NFS:专用于linux和Linux之间的专门的文件共享服务(NFS服务),network filesystem网络文件系统。NFS服务可以把远程linux机器上面的文件目录数据,通过挂载的形式,映射在用户本地机器(Linux用户在自己本地有一个文件夹,通过NFS服务,把本地的这个文件夹远程挂载到网络中一台机器的文件夹)

NFS特点

NFS很像windows的网络共享,samba服务
samba服务主要用于办公室的局域网共享服务
NFS发展有30年,代表了一个稳定的网络文件共享系统,中小型企业最佳的文件共享选择

企业为何需要共享存储

共享存储的形成

分为软件、硬件共享存储的形式
(1)软件共享存储 ---NFS服务搭建
(2)硬件共享服务
中小型企业一般不会购买硬件存储设备,因为成本太高,大公司业务发展特快,需要购买硬件设备分散网站的压力。如果网站的压力持续增长,硬件存储设备就得继续扩展,成本过高,因此主流的企业都会选择开源的软件替代硬件设备,比如NFS集群服务的搭建

  • 未配置共享存储
    当用户A上传一张图片到服务器A时,用户B需要查看该图片但是访问到服务器B,无法找到该图片
    img
  • 配置共享存储
    当用户A上传一张图片到服务器A是,服务器A又传到NFS服务器,NFS服务器将图片同步到服务器B和服务器C,当用户需要查看该图片时,不管是访问到ABC哪台服务器,都能找到该图片
    img

NFS工作原理

img
如图是企业中NFS服务器和客户端的挂载结构

  1. 在NFS服务端设置一个共享的目录/video,其他有权限访问NFS服务器的客户端都可以把该目录/video挂载到本地客户端的某个挂载点(挂载点就是一个目录,可以自由定义路径)
  2. 客户端正确挂载完毕后,进入NFS客户端的挂载点,也就能够看到NFS服务端的/video共享目录下的数据,在客户端查看时,NFS服务端/video的目录数据就相当于本地一个目录而已,根本察觉不到任何区别。

NFS和RPC的概念

img
NFS通过port传输数据,NFS服务在传输数据的时候,端口是随机选择的(可以自己重启NFS服务,查看端口是否在变化),因此NFS需要通过RPC服务,进行一个端口注册,实现告知用户NFS的工作端口是哪一个
什么是RPC
RPC是远程过程调用
Linux上使用NFS服务,必须启动2个服务

  • NFS服务
    NFS服务通过RPC注册自己的端口功能
  • RPC服务
    RPC服务功能就是记录每个NFS功能对应的一个端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输的目的

RPC好比是一个中介,处于客户端和服务器之间

问题:RPC服务如何知道NFS服务端的端口信息呢?
答案:NFS服务器启动的时候,会随机采用若干个窗口,并且主动在RPC服务中进行注册。如此一来,RPC服务就正确知道所有NFS服务端的端口功能了,RPC服务默认使用liunx的111端口和NFS客户端进行一个交流,并且通过111端口将正确的NFS服务端的端口信息,告知给NFS客户端。因此NFS客户端就能够正确找到NFS服务端的端口信息了。

NFS配置文件详解

NFS服务的配置,必须先运行好RPCBIND服务才行,如果RPCBIND服务重启了,原本注册的NFS服务端的信息也就失效了,你还得再重启NFS服务器,重新注册信息才行。如果你仅仅修改了NFS的配置文件,不需要重启NFS服务端,因为重启之后,端口的信息就更新了,还得重新注册,只需要执行如下的命令,重新读取NFS配置文件即可。

exports -rv
systemctl reload nfs

安装配置NFS

安装以下两个服务

sudo yum install nfs-utils rpcbind -y
  • nfs-utils:NFS服务的主程序,包括了rpc.nfsd rpc.mountd这两个守护进程和相关的配置文件信息
  • rpcbing:centos7的一个PRC服务进程
    环境配置
    NFS是C/S模式,client,server,准备一个NFS服务器,准备一个NFS客户端。
  1. 在NFS-server端创建一个用于共享的文件夹,且设置相应的读写权限
mkdir nfschange
chmod -Rf 777 nfschange
  1. 修改NFS服务的配置文件 /etc/exports
    nfs配置文件需要遵守如下的规矩:

NFS服务端共享目录 NFS客户端地址(参数1,参数2....) NFS客户端地址2(参数1,参数2...)
例如:
(1)把nfs服务端的根目录共享出去,且允许两个主机名为client1,client2的机器进行读写权限

/   client1(rw) client2(rw) 

(2)允许任意的客户端,都能够挂在到此NFS服务端的/public目录下

/piblic *(rw)

(3)只允许指定的IP地址的服务器,能够挂在此NFS服务端的/home/change文件夹,且是只读的

/home/change 123.266.16.61(ro)

nfs语法参数解释

  1. nfs共享目录:是nfs服务器需要共享出去的实际目录,文件夹,必须写绝对路径,且注意目录的读写本地权限,如果你允许客户端读写操作,other有一个读写的权限(user,group,other 三个身份)
  2. NFS客户端地址:也就是NFS服务器授权可以访问共享目录的地址,可以写主机名、写通配符、IP地址
  3. 权限参数:对NFS授权的客户端,进行权限控制的参数

nfs客户端地址形式

  1. 单一客户端:192.168.178.113 #用的少
  2. 允许整个网段访问:192.168.178.0/24 #指定局域网网段,用的较多
  3. 授权整个域名客户端 nfs.xdn.com #用的很少
  4. 授权子域名客户端:*.xdn.com #用的很少

nfs客户端的权限参数

ro 只读
rw 读写
root_squash 当nfs客户端以root账号访问NFS服务端共享目录数据的时候,把该root映射为NFS服务端的一个匿名用户,该用户的UID、GID会变成nfsnobody的信息
no_root_squash 几乎和上面一样,root账户会被映射为root账户,非常不安全,禁用
all_squash 所有nfs客户端的用户都映射为匿名供用户,很安全、生产环境常用
sync 数据同步写入到内存和磁盘,优点是保证内存数据安全,但是效率太低
async 数据先写入到内存,再持久化到磁盘,效率非常高,但是可能会有数据丢失的隐患

启动NFS服务端的文件目录共享

NFS服务都是基于RPC的111通信端口,必须确保先启动了RPC服务,如果RPCBIND服务停止了,111端口也不会挂掉,因为centos7还提供了一个rpcbind.socket服务运行着

  1. 保证rpcbind服务正确运行
[ops@nfs-server ~]$ systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2024-09-07 16:01:10 CST; 3min 14s ago
  Process: 521 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 525 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─525 /sbin/rpcbind -w

nfs服务端部署

  1. 确保rpcbind服务正确启动
  2. 创建nfs服务端共享的目录,且进行权限修改
mkdir -p nfschange
chmod -Rf 777 nfschange
sudo chown -R nfsnobody.nfsnobody nfschange/
  1. 在nfs共享目录中,创建测试的文件
[ops@nfs-server ~]$ touch nfschange/test.txt
[ops@nfs-server ~]$ touch nfschange/test2.txt
[ops@nfs-server ~]$ ls nfschange/
test2.txt  test.txt
  1. 修改nfs服务端的配置文件,进行客户端授权
sudo vim /etc/exports
/home/ops/nfschange *(insecure,rw,sync)
# 参数解释:insecure允许客户端从大于1024的端口发请求
  1. 重新加载nfs,读取配置文件
sudo systemctl restart nfs
  1. 检查本地的nfs服务端挂载情况
[ops@nfs-server ~]$ showmount -e 127.0.0.1
Export list for 127.0.0.1:
/home/ops/nfschange *
  1. 再次检查nfs服务端的共享参数
[ops@nfs-server ~]$ cat /var/lib/nfs/etab 
/home/ops/nfschange	*(rw,sync,wdelay,hide,nocrossmnt,insecure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,root_squash,no_all_squash)
  1. 此时可以把nfs服务器本地当做一个客户端,模拟挂载访问试试
[ops@nfs-server ~]$ sudo mount -t nfs 127.0.0.1:/home/ops/nfschange /mnt
[ops@nfs-server ~]$ mount -l | grep  mnt
127.0.0.1:/home/ops/nfschange on /mnt type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=127.0.0.1,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=127.0.0.1)
[ops@nfs-server ~]$ ls /mnt/
test2.txt  test.txt
  1. 如果不用nfs目录共享了,可以直接取消挂载,只需要取消本地目录的挂载即可
umount /mnt

自动挂载NFS文件系统

配置开机挂载服务,每次开机都能用nfs
把挂载命令写入到开机自动挂载文件中/etc/fstab(客户端)

sudo vim /etc/fstab
172.139.20.210:/home/ops/nfschange /mnt nfs defaults 0 0

autofs自动挂载服务
如果开机就强制挂载很多内容,但是又不经常使用会给服务器造成很大的压力,因此一些具有动态特性的文件系统,可以选择进行动态挂载。
比如:光盘,软盘,U盘,移动硬盘,NFS,SMB等文件系统
autofs特点

autofs和mount命令的不同点在于:
autofs是一个守护进程,它会在后台检测用户是否要访问某一个还未挂载的文件系统,autofs会自动检测该文件系统是否存在,如果存在则进行挂载,如果用户过了一段时间没有使用该问价系统,autofs自动将其卸载,节省人力维护的成本,以及节省服务器资源。
缺点:
autofs缺点是当用户请求时候才挂载文件系统,如果是高并发的业务场景,大量的用户并发访问文件系统,autofs突然进行大量挂载,会给服务器造成很大的压力,因此在一些高并发场景下,宁愿保持持续挂载也不用autofs。

安装autofs工具

sudo yum install -y autofs

修改autofs配置文件

  1. 打开autofs配置文件,找到第7行(/misc /etc/auto.misc),添加如下代码
/- /etc/auto.home #添加这里的配置参数
  1. 修改自定义的自动挂载配置文件并启动autofs
[ops@nfs-client ~]$ sudo vim /etc/auto.home
/mnt -rw,soft.intr 172.139.20.201:/home/ops/nfschange
[ops@nfs-client ~]$ sudo systemctl start autofs
[ops@nfs-client ~]$ systemctl status autofs
● autofs.service - Automounts filesystems on demand
   Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2024-09-07 17:45:19 CST; 26s ago
 Main PID: 2861 (automount)
   CGroup: /system.slice/autofs.service
           └─2861 /usr/sbin/automount --systemd-service --dont-check-daemon
  1. 检查本地文件系统情况
    img
    只要autofs检测到用户,对挂载点,进行读写,比如ls、cd的操作,autofs就会自动进行挂载,当一段时间不操作之后,autofs会自动卸载该设备
posted @ 2024-09-06 11:02  小肚腩吖  阅读(5)  评论(0编辑  收藏  举报