NFS介绍

NFSNetwork File System的缩写,即网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从NFS客户端本地看,NFS服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的NFS服务端的目录。

NFS服务端搭建
1. 检查并安装NFS
# 查看
rpm -aq nfs-utils rpcbind
# 安装
yum install  nfs-utils rpcbind -y
2. 启动RPC及NFS服务并检查
# centos6启动方法
/etc/init.d/rpcbind  start
/etc/init.d/nfs   start
# centos7启动方法
systemctl start rpcbind.service
systemctl start nfs.service

# 查看rpc是否启动成功
netstat   -lntup|grep rpc
# 查看rpc监控信息
rpcinfo -p localhost

必须先启动rpcbind服务,后启动nfs服务,因为rpcbind服务启动之后,监控nfs服务

3. 设置开机自启动并检查
# centos6  
chkconfig rpcbind on
chkconfig nfs on

# centos6检查方式
chkconfig  --list nfs
chkconfig --list rpcbind

# centos7  
systemctl enable  rpcbind
systemctl enable nfs

# centos7检查方式
systemctl list-unit-files|grep enabled
4 配置/etc/exports
cat  >>/etc/exports<<EOF
/data 172.16.1.0/24(rw,sync)  
EOF
#rw可读可行,sync实时写的的磁盘,async异步写入磁盘

nfs配置文件的格式

      1   NFS共享的目录 NFS客户端地址(参1,参2,……) NFS客户端地址2(参1,参2,……)
      2   NFS共享的目录 NFS客户端地址(参1,参2,……)


上述各列参数的含义:
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。

/etc/exports配置文件格式书写详细表

常用格式说明

实例

案例1

/data 172.16.1.0/24(rw,sync) 允许客户端读写,并且数据同步写到服务器的磁盘里

案例2

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888) 允许客户端读写,并且数据同步写到服务器的磁盘里,并且指定客户端的uid和gid,早期生产环境中的一种配置,适合多客户端共享一个NFS单目录,如果所有服务器的nfsnodoby账户的UID相同,则本案例就没什么意义了

案例3

/data 172.16.1.0/24(ro) 只读共享,用途:例如在生产环境中开发人员有查看服务器日志的需求,但是又不希望给开发服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器日志目录(NFS共享目录)的权限。

NFS 客户端地址:
为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段的地址,还可以用”*”来匹配所有的客户端服务器,这里所谓的客户端一般为前端的业务服务器,例如web服务。

客户端地址

具体地址

说明

单一客户端访问NFS

172.16.1.41

一般情况下,生产环境中此配置不多

整个网段访问NFS

172.16.1.0/24

指定网段为生产环境中最常见的配置,配置简单、维护方便

整个网段可访问NFS

172.0.0.*

指定网段的另外写法(不推荐使用)

某个域名客户端访问

nfs.aisay.com

生产环境中不推荐不使用

整个域名客户端访问

*.aisay.com

生产环境中不推荐不使用

NFS配置参数权限

参数名称

参数用途

rw

read-write,表示可读写权限

sync

请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。数据安全不会丢,缺点,性能下降。

async

请求或写入数据是,先返回请求,再将数据写入到内存缓存和硬盘中,即异步写入数据。此参数可以提升NFS性能,但是会降低数据的安全。因此,一般情况下建议不用,如果NFS处于瓶颈状态,并且运行数据丢失的话可以打开此参数提升NFS性能。写入时数据会先写到内存缓冲区,等硬盘有空档再写入磁盘,这样可以提升写入效率,风险若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池或加UPS不间断电源)。(电商秒杀是异步)

all_squash

不管访问NFS Server共享目录的用户身份如何,它的权限都被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用。

anonuid

参数以anon*开头即值anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。

anongid

同anonuid,区别是把uid(用户id)换成gid(组id)。

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,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
5. 创建共享目录
mkdir /data
chowm -R nfsnobody.nfsnobody /data
6.加载NFS服务并检查
# centos6  
/etc/init.d/nfs reload  

# reload 即平滑启动服务(服务器已经连接的服务,继续服务,直到服务完成;没重新启动前,没连接的服务,不进行服务,直到服务重新开启再进行服务)

# centos7  
systemctl reload nfs.service

# 查看
showmount -e localhost 
# 结果:
#   Export list for localhost:
#   /data 172.16.1.0/24
NFS客户端
1. 检查并安装NFS
# 查看
rpm -aq nfs-utils rpcbind
# 安装
yum install  nfs-utils rpcbind -y
2. 启动rpc服务
# centos6  
/etc/init.d/rpcbind

# centos7  
systemctl start rpcbind.service
3. 设置开机自启动
# centos6  
chkconfig rpcbind on

# centos7  
systemctl enable  rpcbind
4 . 检查服务端的NFS
showmount -e 172.16.1.31
# 出现下面结果,则成功:
# Export list for 172.16.1.31:
# /data 172.16.1.0/24
5. 挂载
# 挂载
mount -t nfs 172.16.1.31:/data /mnt   # -t 挂载的类型
# 查看
 df -h
# 出现结果:
# 172.16.1.31:/data         17G  1.6G   16G  10% /mnt
6. 把挂载点写的开机自启动
echo "mount -t nfs 172.16.1.31:/data /mnt" >> /etc/rc.local