NFS是Network File System的缩写,即网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从NFS客户端本地看,NFS服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的NFS服务端的目录。
# 查看
rpm -aq nfs-utils rpcbind
# 安装
yum install nfs-utils rpcbind -y
# 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服务
# 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
cat >>/etc/exports<
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)
mkdir /data
chowm -R nfsnobody.nfsnobody /data
# 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
# 查看
rpm -aq nfs-utils rpcbind
# 安装
yum install nfs-utils rpcbind -y
# centos6
/etc/init.d/rpcbind
# centos7
systemctl start rpcbind.service
# centos6
chkconfig rpcbind on
# centos7
systemctl enable rpcbind
showmount -e 172.16.1.31
# 出现下面结果,则成功:
# Export list for 172.16.1.31:
# /data 172.16.1.0/24
# 挂载
mount -t nfs 172.16.1.31:/data /mnt # -t 挂载的类型
# 查看
df -h
# 出现结果:
# 172.16.1.31:/data 17G 1.6G 16G 10% /mnt
echo "mount -t nfs 172.16.1.31:/data /mnt" >> /etc/rc.local