1 什么是NFS
简单来说nfs是网络文件系统他可以实现通过网络让不同主机之间共享文件
2 NFS的优缺点
优点
1.实现所有服务器文件数据一致
2.节省磁盘资源
3.节省带宽资源
缺点
1.容易发生单点故障。nfs server端挂掉,所有的机器都不能访问
2.高并发场景下nfs的效率和性能有限
3.nfs的数据传输都是明文的,对数据的完整性不做校验
4.多台机器挂载nfs,连接管理时比较麻烦
3 NFS的原理工作流程
1.启动rpc服务
2.启动nfs服务-------向rpc注册启动的端口
3.客户向rpc请求nfs服务
4.返回端口到客户端
5.拿着地址和端口请求传输数据
首先当NFS启动后,就会随机的使用一些端口(1024-65535),然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了
那可能就有小伙伴问了,为什么要向rpcbind注册端口信息???
我们前边说过当NFS启动后,就会随机的使用一些端口(1024-65535),由于nfs启动端口不确定性,所以我们没有办法去确定这个服务的端口号是多少,rpc服务就是用来管理在这些端口号的,rpc对外统一端口号111,客户端先向rpc服务请求nfs的端口号,然后在拿着这个端口号去访问nfs
4 NFS服务端部署过程
4.1 检查软件是否安装
默认是没有安装的
yum -y install rpcbind nfs-utils
检查
[root@nfs01 ~]# rpm -qa|egrep "rpcbind|nfs-utils"
rpcbind-0.2.0-48.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64
4.2 编写服务端的配置文件
[root@nfs01 ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jun 7 2013 /etc/exports
[root@nfs01 ~]# vim /etc/exports
/date 172.16.1.0/24(rw,sync)
共享的目录 允许访问的网段(权限)
实例:/data 172.16.1.0/24(rw,sync)
权限 | 描述 |
---|---|
rw | 表示可读写权限 |
ro | read-only,只读; |
sync | 文件同时写入硬盘和内存; |
async | 文件暂存于内存,而不是直接写入磁盘 ; |
no_root_squash | NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。 |
root_squash | NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份; |
all_squash | 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限; |
anonuid | 匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定; |
anongid | 匿名用户的GID值。 |
如果修改uid和gid,客户端服务端两边的uid必须一致
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
4.3 企业案例
案例1
rw,sync
读写,并且数据同步写入到服务器的磁盘里
案例2
rw,sync,all_squash,anounid=2000,anongid=2000
读写,数据同步写入到磁盘,所有用户过来都匿名用户的权限,指定客户端的用户uid和gid
案例3
ro
只读,开发人员先查看生产服务器的日志的需求
4.4 创建共享目录并授权
[root@nfs01 ~]# mkdir /date
[root@nfs01 ~]# chown nfsnobody:nfsnobody /date
4.5 启动服务
1.先启动rpcbind服务,在启动nfs服务
[root@nfs01 ~]# systemctl start rpcbind
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# ps -ef | egrep "nfs|rpcbind"
rpc 7824 1 0 15:13 ? 00:00:00 /sbin/rpcbin -w
root 7873 2 0 15:13 ? 00:00:00 [nfsd4_callbacks]
root 7879 2 0 15:13 ? 00:00:00 [nfsd]
root 7880 2 0 15:13 ? 00:00:00 [nfsd]
root 7881 2 0 15:13 ? 00:00:00 [nfsd]
root 7882 2 0 15:13 ? 00:00:00 [nfsd]
root 7883 2 0 15:13 ? 00:00:00 [nfsd]
root 7884 2 0 15:13 ? 00:00:00 [nfsd]
root 7885 2 0 15:13 ? 00:00:00 [nfsd]
root 7886 2 0 15:13 ? 00:00:00 [nfsd]
4.6 检查服务启动
[root@nfs01 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 4285 status
100024 1 tcp 25908 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 26225 nlockmgr
100021 3 udp 26225 nlockmgr
100021 4 udp 26225 nlockmgr
100021 1 tcp 8408 nlockmgr
100021 3 tcp 8408 nlockmgr
100021 4 tcp 8408 nlockmgr
[root@nfs01 ~]# showmount -e
Export list for nfs01:
/date 172.16.1.0/24
5 客户端配置
5.1 软件安装
yum -y install rpcbind nfs-utils
5.2 检查共享目录并挂载
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/date 172.16.1.0/24
挂载
[root@web01 ~]# mount.nfs 172.16.1.31:/date /mnt/
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 19G 2.7G 16G 15% /
/dev/sda1 197M 109M 89M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/date 19G 2.6G 16G 15% /mnt
5.3 挂载的参数
参数 | 含义 |
---|---|
fg与bg | 当客户机进行挂载的可以选择前台(fg)还是后台(bg),如果在前台执行mount会持续进行挂载,如果在后台执行,则mount会在后台持续进行多次挂载不会影响前台其他操作,网络不稳定建议bg |
soft和hard | soft软挂载,持续几次就timeout后显示终止,Hard硬挂载,一直持续,直到卸载,此时无法mount和kill,通常与intr使用 |
intr | 当使用hard挂载的资源timeout后,如果指定intr参数,可以再timeout后终断掉 |
rsize与wsize | 一次读出(rsize)和写入(wsize)的区块大小,这个设置可以影响客户端与服务器端传输的缓冲区数量 |
proto 指定的协议udp或者tcp
实例:mount -t nfs -o fg,hard,intr ip:/path
suid和nosuid:当挂载文件系统上有任何suid的程序时,只要使用nosuid就能取消suid的功能,任何根suid有关的都不能用
rw和ro:可读可写(rw),只读(ro)
dev和nodev:设置是否保留装置的特功能,一般不需要
exrc和noexec:是否让文件具有可执行的权限
user和nouser:是否允许用户进行文件的挂载与卸载功能,最好不要
auto与noauto:这个是指mount -a时会不会被挂载
5.4 服务启动进程详解
rpc 7824 1 0 15:13 ? 00:00:00 /sbin/rpcbind -w
rpcuser 7841 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.statd <---检查数据一致性
root 7843 2 0 15:13 ? 00:00:00 [rpciod]
root 7850 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.idmapd <---用户压缩/映射
root 7868 1 0 15:13 ? 00:00:00 /usr/sbin/rpc.mountd <---权限管理验证
root 7873 2 0 15:13 ? 00:00:00 [nfsd4_callbacks]
root 7879 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主进程
root 7880 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主进程
root 7881 2 0 15:13 ? 00:00:00 [nfsd]
root 7882 2 0 15:13 ? 00:00:00 [nfsd]
root 7883 2 0 15:13 ? 00:00:00 [nfsd]
root 7884 2 0 15:13 ? 00:00:00 [nfsd]
root 7885 2 0 15:13 ? 00:00:00 [nfsd]
root 7886 2 0 15:13 ? 00:00:00 [nfsd] <---NFS主进程