NFS配置及远程挂载html
NFS简介
NFS是Network File System的简写,即网络文件系统。NFS最先是由 Sun Microsystems 公司开发,并于1984年推出。NFS 是一种可分散式的网络文件系统,能够经过网络(一个局域网)使不一样的机器、不一样的操做系统,可以共享目录和文件,使客户端能经过网络访问并分享文件到位于服务端的磁盘中。NFS的客户端(通常为应用服务器,例如web)能够经过挂载(mount)的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中(就是某一个关在点下),从客户端本地看,NFS服务器端共享目录就好像是客户端本身的磁盘分区或者目录同样,而实际上倒是远端的NFS服务器的目录。
NFS网络文件系统很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和linux的samba服务相似,只不过通常状况下,Windows网络共享服务或samba服务用户办公局域网共享,而互联网中小型网站集群架构后端经常使用NFS进行数据共享,如果大型网站,那么有可能还会用到更复杂的分布式文件系统Moosefs(mfs)、GlusterFS。NFS在文件传送或信息传送过程当中依赖于RPC协议。RPC负责负责信息的传输。linux
1、环境和需求
环境:CentOS 7.5 ,安装过程当中software selection选择Minimal install;
软件版本:nfs-utils-1.3.0-0.54.el7.x86_64web
共三台主机,每台主机各挂接有一个4TB数据盘,挂载点在/data1;
主机名:HOST1,IP:192.168.1.11
主机名:HOST2,IP:192.168.1.12
主机名:HOST3,IP:192.168.1.13后端
需求:解决多台服务器之间数据盘的内容相互共享安全
2、服务器校准时间
服务器
一、登录到服务器后,用命令查看当前时区:
date -R
命令执行结果以下:
Fri, 02 Mar 2019 14:19:41 +0800网络
若是显示是+0800,就是北京时间;架构
二、更改时区的办法。若是不是北京时间,则用如下方法修改成北京时区:(若是不是root用户,则加上sudo)
先把时区文件备份,命令执行以下:
mv /etc/localtime /etc/localtime.oldapp
将正确的时区文件连接过来:
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimessh
再用命令查看当前时区:
date -R
3 、若是ntp服务并未安装,则先安装后再执行上述命令:
yum install -y ntp
四、开启ntp同步命令:
systemctl enable ntpd
systemctl start ntpd
五、容许同步硬件时间:
在/etc/sysconfig/ntpd最后一行加
SYNC_HWCLOCK=yes
3、服务器的NFS服务端配置
一、检查nfs软件是否安装
sudo rpm -qa | grep nfs-utils
sudo rpm -qa | grep rpcbind
安装nfs组件,已安装的跳过;服务端和客户端须要的环境同样
sudo yum -y install nfs-utils
sudo yum -y install rpcbind
二、根据须要修改NFS的配置文件 /etc/exports (默认是空文件),此处要注意三台服务器开放的ip限制有区别,除了exports文件外,其余配置彻底同样;
sudo vi /etc/exports
#主机HOST1增长如下一行内容
/data1 192.168.1.12(rw,sync) 192.168.1.13(rw,sync)
sudo vi /etc/exports
#主机HOST2增长如下一行内容
/data1 192.168.1.11(rw,sync) 192.168.1.13(rw,sync)
#主机HOST3增长如下一行内容
/data1 192.168.1.11(rw,sync) 192.168.1.12(rw,sync)
三、配置端口
默认设置中 nfs 端口是2049,portmapper 的端口是111,mountd 端口是20048,status 和 nlockmgr 是随机端口。如需进行防火墙开放端口的设置,修改以下,不然跳过:
修改 /etc/sysconfig/nfs 文件
sudo vi /etc/sysconfig/nfs
#增长端口配置以下一行,对应 rpc.statd 服务,显示status
STATD_PORT=2050
因 nfslock 服务会自动开启 rpc.statd,无需作设置;在rpcinfo -p 映射中,rpc.statd 对应 status ,后续再次修改端口后重启服务使配置生效的
sudo systemctl restart nfs-lock
修改 /etc/modprobe.d/lockd.conf 文件。Network Lock Manager (NLM),对应是 nlockmgr
sudo vi /etc/modprobe.d/lockd.conf
#增长端口配置以下两行
options lockd nlm_tcpport=2051
options lockd nlm_udpport=2051
四、开启NFS服务,设置服务开机自启动,按顺序先 rpcbind 后 nfs
sudo systemctl start rpcbind.service
sudo systemctl start nfs.service
sudo systemctl enable rpcbind.service
sudo systemctl enable nfs.service
或
sudo systemctl start rpcbind nfs-server
sudo systemctl enable rpcbind nfs-server
查看共享是否成功
showmount -e localhost
或用exportfs -arv命令,从新使配置文件生效,并显示生效内容
sudo exportfs -arv
查看服务对应端口的命令
rpcinfo -p
五、防火墙设置
查看防火墙是否在运行
sudo firewall-cmd --state
显示 running 则加上放行规则,不然跳过
sudo firewall-cmd --permanent --add-port=111/tcp
sudo firewall-cmd --permanent --add-port=111/udp
sudo firewall-cmd --permanent --add-port=2049-2051/tcp
sudo firewall-cmd --permanent --add-port=2049-2051/udp
sudo firewall-cmd --permanent --add-port=20048/tcp
sudo firewall-cmd --permanent --add-port=20048/udp
sudo firewall-cmd --reload
待验证
sudo firewall-cmd --add-service=nfs --permanent sudo firewall-cmd --reload
4、服务器的NFS客户端配置
一、建立挂载目录(三台客户端各有不一样)
#HOST1的挂载目录
sudo ln -s /data1 /data1_11
sudo mkdir /data1_12
sudo mkdir /data1_13
#HOST2的挂载目录
sudo ln -s /data1 /data1_12
sudo mkdir /data1_11
sudo mkdir /data1_13
#HOST3的挂载目录
sudo ln -s /data1 /data1_13
sudo mkdir /data1_11
sudo mkdir /data1_12
二、客户端远程目录的挂载,将挂载配置写入fstab文件(三台客户端各有不一样)
sudo vi /etc/fstab
#HOST1的fstab文件加上
192.168.1.12:/data1 /data1_12 nfs defaults 0 0
192.168.1.13:/data1 /data1_13 nfs defaults 0 0
#HOST2的fstab文件加上
192.168.1.11:/data1 /data1_11 nfs defaults 0 0
192.168.1.13:/data1 /data1_13 nfs defaults 0 0
#HOST3的fstab文件加上
192.168.1.11:/data1 /data1_11 nfs defaults 0 0
192.168.1.12:/data1 /data1_12 nfs defaults 0 0
三、在客户端分别执行,让修改fstab后的挂载生效,
sudo mount -a
至此,NFS配置已经完成,如打开共享目录写入报错 Permission denied ,请根据需求和安全原则修正对应源目录写入的权限(详见下面补充说明)
5、其余补充说明(安装过程或完成后检测用到的命令、知识点)
一、NFS服务须要安装的软件包
nfs-utils:nfs服务的主程序,包括rpc.nfsd、rpc.mountd两个daemons和相关的文档说明及执行命令文件等
rpcbind:rpc主程序,安装 nfs-utils 时会自动按依赖安装上,无需另外安装
在安装完 nfs-utils 后会自动建立 nfsnobody 用户
[root@localhost ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
二、查NFS服务是否在运行
sudo systemctl status rpcbind
sudo systemctl status nfs
三、查看NFS版本
服务器端使用:nfsstat -s
客户端使用:nfsstat -c
四、查看主机开放的端口
ss命令的使用见:http://www.javashuo.com/article/p-wfebcpvv-bz.html
[wangzhiping@localhost /]$ ss -lutp4
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:mountd *:*
udp UNCONN 0 0 127.0.0.1:703 *:*
udp UNCONN 0 0 *:856 *:*
udp UNCONN 0 0 *:nfs *:*
udp UNCONN 0 0 *:av-emb-config *:*
udp UNCONN 0 0 *:epnsdp *:*
udp UNCONN 0 0 *:sunrpc *:*
tcp LISTEN 0 64 *:nfs *:*
tcp LISTEN 0 128 *:av-emb-config *:*
tcp LISTEN 0 64 *:epnsdp *:*
tcp LISTEN 0 128 *:sunrpc *:*
tcp LISTEN 0 128 *:mountd *:*
tcp LISTEN 0 128 *:ssh *:*
tcp LISTEN 0 100 127.0.0.1:smtp *:*
[wangzhiping@localhost /]$ ss -lutp4n
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:20048 *:*
udp UNCONN 0 0 127.0.0.1:703 *:*
udp UNCONN 0 0 *:856 *:*
udp UNCONN 0 0 *:2049 *:*
udp UNCONN 0 0 *:2050 *:*
udp UNCONN 0 0 *:2051 *:*
udp UNCONN 0 0 *:111 *:*
tcp LISTEN 0 64 *:2049 *:*
tcp LISTEN 0 128 *:2050 *:*
tcp LISTEN 0 64 *:2051 *:*
tcp LISTEN 0 128 *:111 *:*
tcp LISTEN 0 128 *:20048 *:*
tcp LISTEN 0 128 *:22 *:*
tcp LISTEN 0 100 127.0.0.1:25 *:*
五、查看 rpc 的端口映射
[nfs_user@localhost /]$ 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
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
100024 1 udp 2050 status
100024 1 tcp 2050 status
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 2051 nlockmgr
100021 3 udp 2051 nlockmgr
100021 4 udp 2051 nlockmgr
100021 1 tcp 2051 nlockmgr
100021 3 tcp 2051 nlockmgr
100021 4 tcp 2051 nlockmgr
六、NFS的经常使用目录
文件目录 | 用途 |
---|---|
/etc/exports | NFS服务的主要配置文件,系统并无默认值,是空文件,如这个文件不存在,须要本身建立 |
/usr/sbin/exportfs | NFS服务的管理命令 |
/usr/sbin/showmount | 客户端的查看命令 |
/var/lib/nfs/etab | 记录NFS分享出来的目录的完整权限设定值,即服务器配置的参数(包含默认的参数) |
/var/lib/nfs/xtab | 记录曾经登陆过的客户端信息 |
NFS的配置文件:
/etc/exports:NFS配置文件
/var/lib/nfs/*tab:NFS服务器日志放置路径;etab记录共享出来的目录完整权限设置值;xtab记录曾经链接到此NFS主机的相关客户端数据
NFS的两个命令:
/usr/sbin/exportfs:维护NFS共享资源;从新共享/etc/exports变动目录或将NFS server共享目录卸载或从新共享
/usr/sbin/showmount:在客户端查看NFS服务器共享出来的目录资源
七、NFS的主要配置文件 /etc/exports 的内容格式
<输出目录> [客户端1 选项(访问权限,用户映射,其余)] [客户端2 选项(访问权限,用户映射,其余)] a. 输出目录: 输出目录是指NFS系统中须要共享给客户机使用的目录; b. 客户端: 客户端是指网络中能够访问这个NFS输出目录的计算机 客户端经常使用的指定方式 指定ip地址的主机:192.168.0.200 指定子网中的全部主机:192.168.0.0/24 192.168.0.0/255.255.255.0 指定域名的主机:david.bsmart.cn 指定域中的全部主机:*.bsmart.cn 全部主机:* c. 选项: 选项用来设置输出目录的访问权限、用户映射等。 NFS主要有3类选项: 访问权限选项 设置输出目录只读:ro 设置输出目录读写:rw 用户映射选项 all_squash:将远程访问的全部普通用户及所属组都映射为匿名用户或用户组(nfsnobody); no_all_squash:与all_squash取反(默认设置); root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置); no_root_squash:与rootsquash取反; anonuid=xxx:将远程访问的全部用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx); anongid=xxx:将远程访问的全部用户组都映射为匿名用户组帐户,并指定该匿名用户组帐户为本地用户组帐户(GID=xxx); 其它选项 secure:限制客户端只能从小于1024的tcp/ip端口链接nfs服务器(默认设置); insecure:容许客户端从大于1024的tcp/ip端口链接服务器; sync:将数据同步写入内存缓冲区与磁盘中,效率低,但能够保证数据的一致性; async:将数据先保存在内存缓冲区中,必要时才写入磁盘; wdelay:检查是否有相关的写操做,若是有则将这些写操做一块儿执行,这样能够提升效率(默认设置); no_wdelay:如有写操做则当即执行,应与sync配合使用; subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置); no_subtree:即便输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样能够提升效率;
例如
/ user01(rw) user02(rw,no_root_squash)
表示共享服务器上的根目录(/)只有user01和user02两台主机能够访问,且有读写权限;user01主机用root用户身份访问时,将客户机的root用户映射成服务器上的匿名用户(root_squash,该参数为缺省参数),至关于在服务器使用nobody用户访问目录;user02主机用root用户身份访问该共享目录时,不映射root用户(no_root_squash),即至关于在服务器上用root身份访问该目录。在配置文件中,使用了no_root_squash ,因此root用户不受约束,在 user02 机器上到挂载点下,到共享目录下,就能够像在本地磁盘使用root用户同样,是不受限制的(一般状况下,不限制root用户的比较多,要注意安全问题)
/root/share/ 192.168.1.2(rw,insecure,sync,all_squash)
表示共享服务器上的/root/share/目录只有192.168.1.2主机能够访问,且有读写权限;此主机用任何身份访问时,将客户机的用户都映射成服务器上的匿名用户(all_squash),至关于在服务器上用nobody用户访问该目录(若客户机要在该共享目录上保存文件(即写操做),则服务器上的nobody用户对该目录必须有写的权限)
/home/ylw/ *.test.com (rw,insecure,sync,all_squash)
表示共享/home/ylw/目录,*.test.com域中全部的主机均可以访问该目录,且有读写权限
/home/share/ .test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4)
表示共享目录/home/share/,*.test.com域中的全部主机均可以访问,但只有只读的权限,全部用户都映射成服务器上的uid为zh三、gid为wa4的用户
八、exportfs命令详解
例1、在NFS服务端上修改 /etc/exports ,增长某个共享目录后
/share 192.168.10.0/24(rw,sync,root_squash)
用 exportfs 不用重启nfs服务,使改动马上生效
sudo exportfs -arv
其余例子
exportfs -au #卸载全部共享目录
exportfs -rv #从新共享全部目录并输出详细信息
九、showmount 命令用于查询NFS服务器
Usage: showmount [-adehv] [--all] [--directories] [--exports] [--no-headers] [--help] [--version] [host] -a或--all 以 host:dir 这样的格式来显示客户主机名和挂载点目录。 -d或--directories 仅显示被客户挂载的目录名。 -e或--exports 显示NFS服务器的输出清单。 -h或--help 显示帮助信息。 -v或--version 显示版本信。 --no-headers 禁止输出描述头部信息。 显示NFS客户端信息 # showmount 显示指定NFS服务器链接NFS客户端的信息 # showmount 192.168.1.1 #此ip为nfs服务器的 显示输出目录列表 # showmount -e 显示指定NFS服务器输出目录列表(也称为共享目录列表) # showmount -e 192.168.1.1 显示被挂载的共享目录 # showmount -d 显示客户端信息和共享目录 # showmount -a 显示指定NFS服务器的客户端信息和共享目录 # showmount -a 192.168.1.1
十、关于权限的分析
1. 客户端链接时候,对普通用户的检查 a. 若是明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户; b. 若是NFS server上面有同名用户,那么此时客户端登陆帐户的身份转换为NFS server上面的同名用户; c. 若是没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody; 2. 客户端链接的时候,对root的检查 a. 若是设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root; b. 若是设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户; c. 若是没有明确指定,此时root用户被压缩为nfsnobody; d. 若是同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,若是设置了anonuid、anongid将被压缩到所指定的用户与组;
多个NFS客户端访问服务器的读写文件时必需要有的权限
a、NFS服务器/etc/exports设置须要开放可写入的权限,即服务端的共享权限
b、NFS服务器实际要共享的NFS目录权限具备可写入w的权限,即服务端本地目录的安全权限
c、每台服务器都对应存在和NFS默认配置UID的相同UID的帐户nfsnodoby(确保全部全部客户端的访问权限统一,不然每台机器都须要同时创建相同UID用户,并覆盖NFS的默认用户配置)
只有知足上述三个条件,多个NFS客户端才能具备查看、修改、删除其余任意NFS客户端上传文件的权限,这在大规模的集群环境中最为集群共享存储时尤其重要
十一、客户端手动挂载
挂载命令 | 挂载的格式类型 | NFS服务器提供的共享目录 | NFS客户端的挂载点 |
---|---|---|---|
mount | -t nfs | 172.16.1.31:/data | /mnt (该目录必须存在) |
建立挂载点
sudo mkdir /data1_11
挂载NFS,默认状况下只有 root 能够去挂载,普通用户能够执行sudo
sudo mount -t nfs 192.168.1.11:/data1 /data1_11
挂载成功后,可用以下命令查看
sudo df -Th
如需卸载nfs,命令以下
sudo umount /data1_11
或
sudo umount 192.168.1.11:/data1
十二、配置挂载 autofs(待测试确认)
# yum -y install autofs # vi /etc/auto.master #添加一行 /- /etc/auto.mount # vi /etc/auto.mount #添加一行 /data1 -fstype=nfs,rw nfs.st.local:/data1_11 #启动服务 # systemctl start autofs # systemctl enable autofs
参考:
Red Hat Enterprise Linux fully supports NFS version 4.2 (NFSv4.2) since the Red Hat Enterprise Linux 7.4 release.Following are the features of NFSv4.2 in Red Hat Enterprise Linux 7.5
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-nfs
https://blog.csdn.net/gx_1_11_real/article/details/82622391http://blog.51cto.com/lzhnb/2086392https://www.cnblogs.com/st-jun/p/7742560.htmlhttps://blog.csdn.net/wh211212/article/details/52954961