预备知识
1.准备两台机器
nfs01 172.16.1.31(服务端) 需要安装 rpcbind(c6 c7)
web01 172.16.1.7(客户端)需要安装 nfs-utils
2.NFS应用场景
存放用户上传的附件(zip)图片(头像 文章中的图片)
nfs环境部署
1.安装软件(服务端和客户端)
[root@web01 ~]# yum -y install rpcbind nfs-utils
[root@nfs01 ~]# yum -y install rpcbind nfs-utils
2.检查是否安装成功(服务端和客户端)
[root@web01 ~]# rpm -qa rpcbind nfs-utils
rpcbind-0.2.0-47.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
[root@nfs01 ~]# rpm -qa rpcbind nfs-utils
rpcbind-0.2.0-47.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
3.nfs01(服务端)启动rpc服务
root@nfs01 ~]# systemctl start rpcbind
4.nfs01(服务端)查看注册信息
[root@nfs01 ~]# rpcinfo -p
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
并没有nfs 信息 原因是nfs还没有启动
5.启动nfs 并再次查看注册信息
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# rpcinfo -p
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 38164 status
100024 1 tcp 34281 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 39263 nlockmgr
100021 3 udp 39263 nlockmgr
100021 4 udp 39263 nlockmgr
100021 1 tcp 33987 nlockmgr
100021 3 tcp 33987 nlockmgr
100021 4 tcp 33987 nlockmgr
(服务端nfs01)配置文件中配置nfs
[root@nfs01 ~]# vim /etc/exports
#share /upload
/upload 172.16.1.0/24(rw)
"/etc/exports" 2L, 42C written
/upload含义是你要共享的目录为/upload
172.16.1.0/24 含义:你要共享给172.16.1.0/24网段
(含义):对这个目录有读写权限
(服务端nfs01)创建共享目录
[root@nfs01 ~]# mkdir -p /upload
[root@nfs01 ~]# chown nfsnobody.nfsnobody /upload
[root@nfs01 ~]# ll -d /upload
drwxr-xr-x 2 nfsnobody nfsnobody 6 May 22 15:55 /upload
(服务端nfs01)重启nfs服务
[root@nfs01 ~]# systemctl reload nfs
(服务端nfs01)检查挂载信息
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/upload 172.16.1.0/24
含义就和上面的一样。
/upload ===共享目录
172.16.1.0/24 ===网段
(服务端nfs01)检查磁盘挂载信息
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.8G 17G 10% /
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/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
(服务端nfs01)挂载到本地/mnt下测试
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/upload /mnt/
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.8G 17G 10% /
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/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/upload 18G 1.8G 17G 10% /mnt
(服务端nfs01)挂载后进行测试
[root@nfs01 ~]# touch /mnt/oldboy.txt
[root@nfs01 ~]# ll /mnt
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:37 oldboy.txt
[root@nfs01 ~]# ll /upload
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:37 oldboy.txt
到这里表示本地测试成功了,这就表示nfs服务配置都是正确的,接下来就去web01上进行挂载测试
(web01客户端)启动nfs服务
[root@web01 ~]# systemctl start nfs
(web01客户端)挂载/upload目录
[root@web01 ~]# mkdir /video
[root@web01 ~]# mount -t nfs 172.16.1.31:/upload /video
(web01客户端)检查挂载信息
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.7G 17G 10% /
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/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/upload 18G 1.8G 17G 10% /video
可以看到已经挂载上了,接下来进行测试
(web01客户端)在共享目录创建文件并检查
[root@web01 ~]# touch /video/oldboy{0..3}.txt
[root@web01 ~]# ll /video
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy0.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy2.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy3.txt
(nfs01服务端)进行检查
[root@nfs01 ~]# ll /upload
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy0.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy2.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 22 20:44 oldboy3.txt
远程目录已经成功挂载
nfs不使用默认的用户压缩(映射)
(nfs01服务端)编写配置文件
[root@nfs01 ~]# vim /etc/exports
#share /upload
/nfs 172.16.1.0/24(rw,all_squash,anonuid=888,anongid=888)
/nfs==共享目录
172.16.1.0/24==共享的网段
rw==客户端对共享目录的有读写权限
all_squash==对所有用户进行压缩
anonuid=888==映射用户的uid
anongid=888==映射用户的gid
这个表示你访问共享目录是以一个什么身份去访问
如果不指定默认会使用nfsnobody虚拟用户。
(nfs01服务和端web01客户端)创建用户
[root@web01 ~]# groupadd -g 888 www
[root@web01 ~]# useradd -u 888 -g www -s /sbin/nologin -M www
[root@web01 ~]# id www
uid=888(www) gid=888(www) groups=888(www)
示例只演示了web01上的创建用户nfs01上使用同样的命令
(nfs01服务端)创建共享目录
[root@nfs01 ~]# mkdir /nfs
[root@nfs01 ~]# chown www.www /nfs
[root@nfs01 ~]# ll -d /nfs
drwxr-xr-x 2 www www 6 May 22 21:14 /nfs
(web01客户端)创建共享目录
[root@web01 ~]# mkdir /nfs
(web01客户端)进行挂载后检查
[root@web01 ~]# mount -t nfs 172.16.1.31:/nfs /nfs
You have new mail in /var/spool/mail/root
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.7G 17G 10% /
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/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/upload 18G 1.8G 17G 10% /video
172.16.1.31:/nfs 18G 1.8G 17G 10% /nfs
[root@web01 ~]# touch /nfs/oldboy.txt
[root@web01 ~]# ll /nfs/oldboy.txt
-rw-r--r-- 1 www www 0 May 22 21:17 /nfs/oldboy.txt
(nfs01服务端)检查
[root@nfs01 ~]# ll /nfs
total 0
-rw-r--r-- 1 www www 0 May 22 21:17 oldboy.txt
对排除有帮助的两个配置文件
服务端nfs配置参数
[root@nfs01 ~]# cat /var/lib/nfs/etab
/nfs 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=888,anongid=888,sec=sys,rw,secure,root_squash,all_squash)
/upload 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
客户端挂载信息
[root@nfs01 ~]# tail -n1 /proc/mounts
172.16.1.31:/upload /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,
1.实现开机自动挂载
方法1 通过/etc/fstab开机自动挂载
[root@web01 ~]# echo "172.16.1.31:/nfs /nfs nfs defaults 0 0" >>/etc/fstab
注意:当将远程挂载设备写入/etc/fstab 文件后 ,一定要执行mount -a
[root@web01 ~]# mount -a
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.7G 17G 10% /
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/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.31:/nfs 18G 1.8G 17G 10% /mnt
如何编写错误会有以下提示
[root@web01 ~]# mount ‐a mount.nfs: access denied by server while mounting 172.16.1.31:/nfs
强制卸载
[root@web01 ~]# umount ‐lf /nfs
方法2 写入开机自启命令文件/etc/rc.local
第一次使用加上执行权限;chmod +x /etc/rc.d/rc.local
开机自动故障的前提是服务端的nfs和rpcbind必须加入开机自启动。
1.扩展:无需重启 NFS 服务平滑加载配置文件
[root@nfs01 r]# cat /etc/exports /data/r 172.16.1.0/24(ro) /data/p 172.16.1.0/24(ro) /data/w 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666) [root@nfs01 r]# exportfs ‐rv exporting 172.16.1.0/24:/data/w exporting 172.16.1.0/24:/data/p exporting 172.16.1.0/24:/data/r
2.扩展:nfs 客户端挂载参数
[root@backup‐41 ~]# mount.nfs4 ‐o noatime,nodiratime,noexec,nodev,nosuid 172.16.1.31:/data/r /data/r/
这些都是提高磁盘读写性能以及一些安全优化的参数。必须掌握。
4.扩展:客户端检查挂载参数是否生效
[root@backup‐41 ~]# mount
#等价于
[root@backup‐41 ~]# cat /proc/mounts
企业生产场景NFS共享存储优化小结
硬件:sas/ssd磁盘,买多块,硬件raid,制作raid5 (安全,读ok)或raid10。网卡吞吐量要 大,至少千兆(多块bond)。
服务端 配置:
/datal0.0.0.0/24(rw:sync,all_squash:anonuid=65534,anongid=65534)
客服端挂载优化配置命令
mount -t nfs -0 nosuid, noexec, nodev, noatime, nodiratirae, rsize=131072, wsize=131072 10. 0. 0. 7:/data/ /mnt <--令兼顾安全性能
对NFS服务的所有服务器内核进行优化吋,执行如下命令:
cat »/etc/sysctl. conf«E0F
net.core. wmem_default = 8388608
net. core. rmem_default = 8388608
net. core. rmem_max = 16777216
net. core. wmem_max = 16777216
EOF