环境部署
一、服务端
查看系统信息
[root@script ~]# cat /etc/centos-release
CentOS release 6.8 (Final)
[root@script ~]# uname -r
2.6.32-642.el6.x86_64
[root@script ~]# uname -m
x86_64
查看nfs软件包
[root@script ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-16.el6.x86_64
[root@script ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
# yum下载缓存,后续每次下载软件包将放至cachedir对象目录
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
安装nfs
[root@script ~]# yum install -y nfs-utils rpcbind
设置安装进程
包 rpcbind-0.2.0-16.el6.x86_64 已安装并且是最新版本
解决依赖关系
--> 执行事务检查
---> Package nfs-utils.x86_64 1:1.2.3-78.el6_10.2 will be 安装
--> 处理依赖关系 nfs-utils-lib >= 1.1.0-3,它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 处理依赖关系 keyutils >= 1.4-4,它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 处理依赖关系 python-argparse,它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 处理依赖关系 libevent,它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 处理依赖关系 libnfsidmap.so.0()(64bit),它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 处理依赖关系 libevent-1.4.so.2()(64bit),它被软件包 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 需要
--> 执行事务检查
---> Package keyutils.x86_64 0:1.4-5.el6 will be 安装
---> Package libevent.x86_64 0:1.4.13-4.el6 will be 安装
---> Package nfs-utils-lib.x86_64 0:1.1.5-13.el6 will be 安装
---> Package python-argparse.noarch 0:1.2.1-2.1.el6 will be 安装
--> 完成依赖关系计算
依赖关系解决
============================================================================================================================================================================
软件包 架构 版本 仓库 大小
============================================================================================================================================================================
正在安装:
nfs-utils x86_64 1:1.2.3-78.el6_10.2 updates 337 k
为依赖而安装:
keyutils x86_64 1.4-5.el6 base 39 k
libevent x86_64 1.4.13-4.el6 base 66 k
nfs-utils-lib x86_64 1.1.5-13.el6 base 71 k
python-argparse noarch 1.2.1-2.1.el6 base 48 k
事务概要
============================================================================================================================================================================
Install 5 Package(s)
总下载量:560 k
Installed size: 1.6 M
下载软件包:
(1/5): keyutils-1.4-5.el6.x86_64.rpm | 39 kB 00:00
(2/5): libevent-1.4.13-4.el6.x86_64.rpm | 66 kB 00:00
(3/5): nfs-utils-1.2.3-78.el6_10.2.x86_64.rpm | 337 kB 00:00
(4/5): nfs-utils-lib-1.1.5-13.el6.x86_64.rpm | 71 kB 00:00
(5/5): python-argparse-1.2.1-2.1.el6.noarch.rpm | 48 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 389 kB/s | 560 kB 00:01
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在安装 : python-argparse-1.2.1-2.1.el6.noarch 1/5
正在安装 : libevent-1.4.13-4.el6.x86_64 2/5
正在安装 : keyutils-1.4-5.el6.x86_64 3/5
正在安装 : nfs-utils-lib-1.1.5-13.el6.x86_64 4/5
正在安装 : 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 5/5
Verifying : keyutils-1.4-5.el6.x86_64 1/5
Verifying : libevent-1.4.13-4.el6.x86_64 2/5
Verifying : 1:nfs-utils-1.2.3-78.el6_10.2.x86_64 3/5
Verifying : python-argparse-1.2.1-2.1.el6.noarch 4/5
Verifying : nfs-utils-lib-1.1.5-13.el6.x86_64 5/5
已安装:
nfs-utils.x86_64 1:1.2.3-78.el6_10.2
作为依赖被安装:
keyutils.x86_64 0:1.4-5.el6 libevent.x86_64 0:1.4.13-4.el6 nfs-utils-lib.x86_64 0:1.1.5-13.el6 python-argparse.noarch 0:1.2.1-2.1.el6
完毕!
[root@script packages]# rpm -qa rpcbind nfs-utils
nfs-utils-1.2.3-78.el6_10.2.x86_64
rpcbind-0.2.0-16.el6.x86_64
启动nfs
[root@script packages]# service rpcbind start
[root@script packages]# service nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@script packages]# netstat -tlanp | grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1247/rpcbind
tcp 0 0 :::111 :::* LISTEN 1247/rpcbind
[root@script packages]# rpcinfo -p localhost
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
[root@script packages]# service nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@script packages]# rpcinfo -p localhost
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
100005 1 udp 32970 mountd
100005 1 tcp 46332 mountd
100005 2 udp 42737 mountd
100005 2 tcp 43631 mountd
100005 3 udp 55166 mountd
100005 3 tcp 35124 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 37329 nlockmgr
100021 3 udp 37329 nlockmgr
100021 4 udp 37329 nlockmgr
100021 1 tcp 45609 nlockmgr
100021 3 tcp 45609 nlockmgr
100021 4 tcp 45609 nlockmgr
[root@script ~]# chkconfig rpcbind on
[root@script ~]# chkconfig nfs on
[root@script ~]# ls /etc/rc.d/rc3.d/|grep -E "nfs|rpc"
K61nfs-rdma
K69rpcsvcgssd
S13rpcbind
S14nfslock
S19rpcgssd
S30nfs
共享目录配置
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chmod -R 777 /data/
[root@nfs01 ~]# ll -d /data/
drwxrwxrwx 2 root root 24576 6月 22 00:26 /data/
# 这里暂时共享/data目录
[root@nfs01 ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync)
[root@nfs01 ~]# exportfs -a
查看nfs进程
[root@script ~]# ps -ef |egrep "rpc|nfs"
rpc 1247 1 0 05:48 ? 00:00:00 rpcbind
root 2039 2 0 06:48 ? 00:00:00 [rpciod/0]
root 2040 2 0 06:48 ? 00:00:00 [rpciod/1]
root 2041 2 0 06:48 ? 00:00:00 [rpciod/2]
root 2042 2 0 06:48 ? 00:00:00 [rpciod/3]
root 2229 1 0 06:52 ? 00:00:00 rpc.mountd #<==权限管理验证等
root 2236 2 0 06:52 ? 00:00:00 [nfsd4]
root 2237 2 0 06:52 ? 00:00:00 [nfsd4_callbacks]
root 2238 2 0 06:52 ? 00:00:00 [nfsd]
root 2239 2 0 06:52 ? 00:00:00 [nfsd] #<==NFS主进程
root 2240 2 0 06:52 ? 00:00:00 [nfsd]
root 2241 2 0 06:52 ? 00:00:00 [nfsd]
root 2242 2 0 06:52 ? 00:00:00 [nfsd]
root 2243 2 0 06:52 ? 00:00:00 [nfsd]
root 2244 2 0 06:52 ? 00:00:00 [nfsd]
root 2245 2 0 06:52 ? 00:00:00 [nfsd]
root 2276 1 0 06:52 ? 00:00:00 rpc.idmapd
root 2304 1535 5 07:11 pts/0 00:00:00 egrep rpc|nfs
nfs服务启动进程说明
nfsd(rpc.nfsd) rpc.nfsd的主要功能是管理NFS客户端是否能够登入NFS服务端主机,其中还包含登入者的ID判别等
mountd(rpc.mountd) rpc.mountd的主要功能则是管理NFS文件系统。当NFS客户端顺利通过rpc.nfsd登入NFS服务端主机时,在使用NFS服务器提供数据之前,它会去读NFS的配置文件/etc/exports来比对NFS客户端的权限,通过这一关之后,还会经过NFS服务端本地文件系统使用权限(就是owner、group、other权限)的认证程序。如果都通过了,NFS客户端就可以取得使用NFS服务器端文件的权限。注意,这个/etc/exports文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别强调,NFS本身设置的是网络共享权限,整个共享目录的权限还和目录自身的系统权限有关。
rpc.lockd(非必要) 可以来锁定文件,用于多客户端同时写入。
rpc.statd(非必要) 检查文件的一致性,与rpc.lockd有关。c、d两个服务需要客户端服务器端同时开启才可以;rpc.statd:监听来自其它主机重启的通知,并且管理本地系统重启时主机列表。
rpc.idmapd 名字映射后台进程。
二、客户端
安装nfs工具
[root@k8s-master1 ~]# yum install -y nfs-utils rpcbind
已加载插件:fastestmirror
base | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/6): epel/x86_64/group_gz | 96 kB 00:00:00
(2/6): epel/x86_64/updateinfo | 1.0 MB 00:00:00
(3/6): extras/7/x86_64/primary_db | 242 kB 00:00:00
(4/6): epel/x86_64/primary_db | 6.9 MB 00:00:03
(5/6): updates/7/x86_64/primary_db | 8.8 MB 00:00:05
(6/6): docker-ce-stable/7/x86_64/primary_db | 62 kB 00:00:08
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 1:nfs-utils-1.3.0-0.68.el7.x86_64 已安装并且是最新版本
软件包 rpcbind-0.2.0-49.el7.x86_64 已安装并且是最新版本
无须任何处理
验证服务端共享目录
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
nfs服务知识梳理
当多个nfs客户端访问服务端的读写文件时,需要具备一下几个权限:
- nfs服务器/etc/exports设置需要开放可写入的权限,即服务端的共享权限
- NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务端本地目录的安全权限。
- 每台机器都对应存在和NFS默认配置UID的相同UID65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)
只有满足上述三个条件,多个NFS客户端才能具有查看、修改、删除其他任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要。
nfs挂载参数详解
可通过man nfs查看若干参数
如果追求传输效果,可以使用如下参数
[root@backup ~]# mount -t nfs -o fg,hard,intr 172.16.1.31:/data /mnt
[root@backup ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 29G 1.2G 27G 5% /
tmpfs tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 ext4 380M 36M 324M 10% /boot
172.16.1.31:/data nfs 29G 1.2G 27G 5% /mnt
[root@backup ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=940540k,nr_inodes=235135,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
172.16.1.31:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.41,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
如果考虑简单、易用则使用如下参数
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 29G 1.2G 27G 5% /
tmpfs tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 ext4 380M 36M 324M 10% /boot
172.16.1.31:/data nfs 29G 1.2G 27G 5% /mnt
服务端
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
客户端
[root@backup ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=940540k,nr_inodes=235135,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda2 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
172.16.1.31:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.41,minorversion=0,local_lock=none,addr=172.16.1.31 0 0