NFS服务搭建与配置
NFS介绍
NFS通讯原理:
NFS客户端:启动RPC服务,由RPC服务通过RPC协议去和远程RPC服务进行通信(RPC服务在centos5之前叫做portmap,centos6之后叫做rpcbind)
NFS服务端:启动NFS服务和RPC服务,NFS服务本身并不监听任何端口,通讯过程基于RPC服务完成,RPC服务默认监听111端口,NFS服务在RPC服务里注册,并告知RPC通讯端口,由RPC服务通过RPC协议完成和远程客户端的通信。
NFS服务端安装配置
安装
yum install -y nfs-utils rpcbind 安装nfs包,不加rpcbind包,也会自动安装
配置
vim /etc/exports 编辑配置文件并加入如下内容:
指定共享目录并指定来源ip段,配置参数
/home/nfs_share 192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
或者:
指定共享目录并指定来源ip,配置参数
/home/nfs_share 192.168.133.128(rw,sync,all_squash,anonuid=1000,anongid=1000)
保存配置文件
创建共享目录并授权
mkdir /home/nfs_share
chmod 777 /home/nfs_share
启动服务并加入系统服务开机启动
启动 RPC服务
systemctl start rpcbind
启动NFS服务
systemctl start nfs
开机启动RPC
systemctl enable rpcbind
开机启动NFS
systemctl enable nfs
例:
[[email protected] ~]# yum install nfs-utils rpcbind
[[email protected] ~]# vim /etc/exports
/home/nfs_share 192.168.133.128(rw,sync,all_squash,anonuid=1000,anongid=1000)
[[email protected] ~]# mkdir /home/nfs_share
[[email protected] ~]# chmod 777 /home/nfs_share
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# systemctl enable rpcbind
[[email protected] ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[[email protected] ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:58863 0.0.0.0:* LISTEN 809/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 479/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 875/nginx: master p
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 912/rpc.mountd
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 875/nginx: master p
tcp 0 0 0.0.0.0:46878 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::43981 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN 479/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 912/rpc.mountd
tcp6 0 0 :::40851 :::* LISTEN 809/rpc.statd
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN 1374/mysqld
[[email protected] ~]# ps aux |grep nfs
root 983 0.0 0.0 0 0 ? S< 12:48 0:00 [nfsd4_callbacks]
root 1022 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1027 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1032 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1034 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1038 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1042 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1044 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1049 0.0 0.0 0 0 ? S 12:48 0:00 [nfsd]
root 1772 0.0 0.0 112660 968 pts/0 R+ 14:45 0:00 grep --color=auto nfs
[[email protected] ~]# ps aux |grep rpc
root 354 0.0 0.0 0 0 ? S< 12:48 0:00 [rpciod]
root 445 0.0 0.0 43816 540 ? Ss 12:48 0:00 /usr/sbin/rpc.idmapd
rpc 479 0.0 0.0 64956 1400 ? Ss 12:48 0:00 /sbin/rpcbind -w
rpcuser 809 0.0 0.0 42376 1748 ? Ss 12:48 0:00 /usr/sbin/rpc.statd
root 912 0.0 0.0 42564 944 ? Ss 12:48 0:00 /usr/sbin/rpc.mountd
root 1774 0.0 0.0 112660 968 pts/0 R+ 14:45 0:00 grep --color=auto rpc
[[email protected] ~]#
NFS配置选项
在配置NFS服务时,配置文件/etc/exports里常用的选项
rw 读写 ro 只读
sync 同步模式,内存数据实时写入磁盘, 优点:保证数据安全,缺点:降低磁盘性能
async 异步模式,没隔一段时间将数据写入磁盘,优点:发挥磁盘性能,缺点:断电或故障时,会丢失数据
no_root_squash 客户端挂载NFS共享目录后,不限制客户端上的root权限
root_squash 客户端挂载NFS共享目录后,限制客户端上的root权限,会被限定成普通用户
all_squash 客户端上所有用户在使用NFS共享目录时都会被限定为普通用户
anonuid/anongid 和上面的限制选项搭配使用,定义被限定用户的uid和gid
客户端挂载
安装:
yum install -y nfs-utils
查看有没有,要挂载目录的权限
showmount -e 192.168.133.130 NFS服务端ip
如果报错,请检查服务端rpcbind是否监听111端口,如果rpc服务正常,请关闭服务端和客户端的防火墙和selinux,或者在防火墙做访问规则。
挂载NFS服务端的共享目录到/mnt/下
mount -t nfs 192.168.133.130:/home/nfs_share /mnt
在客户端查看挂载是否成功
df -h
在客户端创建测试文件,放到挂载的共享目录里
touch /mnt/test.txt
在客户端查看该文件的属性,注意属主属组,并注意查看uid和gid都是1000
ls -l /mnt/test.txt
在服务端查看改文件的属性,注意属主属组,并注意查看uid和gid都是1000
ls -l /home/nfs_share/test.txt
该文件在服务端和客户端的uid和gid都是1000,但属主属组可能不同
exportfs命令
在安装 nfs-utils 包的时候,也同时安装了exportfs命令,NFS服务一旦启用后不能随便改动,如果要修改或者停止NFS服务,那么必须先在客户端机器上卸载挂载的目录,然后在服务端改动或停止NFS服务。如果未在客户端先卸载已经挂载的目录,而直接在服务端改动或停止NFS服务,那么假如客户端正好有进程在访问挂载的目录,则会导致客户端的进程被挂起,在进程列表里显示成D状态(不可中断的进程),甚至会导致其它服务崩溃。
然而,如果NFS服务端共享的目录被很多客户端都挂载了,总不可能去每个客户端都去卸载一遍,这时候就用到了exportfs命令。
exportfs命令,用在NFS服务端不重启NFS服务的情况下,重新加载NFS服务的配置文件/etc/exports
用法:
exportfs -option 例如:exportfs -arv 或 exportfs -u /home/nfs_share
常用选项:
-a 全部挂载或者全部卸载
-r 重新挂载
-u 卸载某一个目录
-v 显示共享目录
Centos6中 NFS 4版本客户端的问题
NFS 4版本中,在客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody,即使服务端配置了no_root_squash,也依然如此,centos6系统中更为频繁。
两种解决办法:
1、客户端挂载时加上 -o nfsvers=3 指定nfs使用版本3
2、同时在服务端和客户端编辑/etc/idmapd.conf文件
修改“#Domain = local.domain.edu” 为 “Domain = xxx.com” (可自定义)
重启rpcidmapd服务(centos6)或 重启rpcbind服务(centos7)