NFS服务介绍
(1)NFS简介
NFS网络文件系统提供了一种在类UNIX系统上共享文件的方法。目前NFS有3个版本:NFSv2、NFSv3、NFSv4。CentOS7默认使用NFSv4提供服务,优点是提供了有状态的连接,更容易追踪连接状态,增强安全性。NFS监听在TCP 2049端口上。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。在客户端看来,使用NFS的远端文件就像是在使用本地文件一样,只要具有相应的权限就可以使用各种文件操作命令(如cp、cd、mv和rm等),对共享的文件进行相应的操作。Linux操作系统既可以作为NFS服务器也可以作为NFS客户,这就意味着它可以把文件系统共享给其他系统,也可以挂载从其他系统上共享的文件系统。
为什么需要安装NFS服务?当服务器访问流量过大时,需要多台服务器进行分流,而这多台服务器可以使用NFS服务进行共享。NFS除了可以实现基本的文件系统共享之外,还可以结合远程网络启动,实现无盘工作站(PXE启动系统,所有数据均在服务器的磁盘阵列上)或瘦客户工作站(本地自动系统)。NFS应用场景多为高可用文件共享,多台服务器共享同样的数据,但是它的可扩展性比较差,本身高可用方案不完善。取而代之,数据量比较大的可以采用MFS、TFS、HDFS等分布式文件系统。
(2)NFS组成
两台计算机需要通过网络建立连接时,双方主机就一定需要提供一些基本信息,如IP地址、服务端口号等。当有100台客户端需要访问某台服务器时,服务器就需要记住这些客户端的IP地址以及相应的端口号等信息,而这些信息是需要程序来管理的。在Linux中,这样的信息可以由某个特定服务自己来管理,也可以委托给RPC来帮助自己管理。RPC是远程过程调用协议,RPC协议为远程通信程序管理通信双方所需的基本信息,这祥,NFS服务就可以专注于如何共享数据。至于通信的连接以及连接的基本信息,则全权委托给RPC管理。因此,NFS组件由与NFS相关的内核模块、NFS用户空间工具和RPC相关服务组成。主要由如下2个RPM包提供。
① nfs-utils:包含NFS服务器端守护进程和NFS客户端相关工具。
② rpcbind:提供RPC的端口映射的守护进程及其相关文档、执行文件等。
基础配置
修改两个节点的主机名,第一台机器为nfs-server;第二台机器为nfs-client
# nfs-server节点
[root@nfs-server ~]# hostnamectl set-hostname nfs-server
[root@nfs-server ~]# hostnamectl
[root@nfs-server ~]# bash
# nfs-client节点
[root@nfs-client~]# hostnamectl set-hostname nfs-client
[root@nfs-client~]# hostnamectl
[root@nfs-client~]# bash
安装 NFS 服务
# nfs-server节点
[root@nfs-server ~]# yum -y install nfs-utils rpcbind
# nfs-client节点
[root@nfs-client ~]# yum -y install nfs-utils rpcbind
NFS 服务使用
在nfs-server节点创建一个用于共享的目录
[root@nfs-server ~]# mkdir /mnt/test
[root@nfs-server~]# vi /etc/exports
/mnt/test 192.168.15.0/24(rw,no_root_squash,no_all_squash,anonuid=501,anongid=501)
# 生效配置
[root@nfs-server ~]# exportfs -r
# nfs-server端启动NFS服务
[root@nfs-server ]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
# Nfs-server端查看可挂载的目录
[root@nfs-server~]# showmount -e 192.168.50.30
# 转到 nfs-client 端,在客户端挂载前,先要将服务器的 SELinux 服务和防火墙服务关闭,
[root@nfs-client ~]# setenforce 0
[root@nfs-client ~]# systemctl stop firewalld
# 在 nfs-client 节点,进行 NFS 共享目录的挂载,
[root@nfs-client~]# mount -t nfs 192.168.50.30:/mnt/test /mnt/
无提示信息则表明成功,查看挂载情况
[root@nfs-client ~]# df-h
参数说明:
/mnt/test:为共享目录(若没有这个目录,请新建一个)
192.168.15.0/24:可以为一个网段,一个IP,也可以是域名。域名支持通配符,例如,*.qq.com
rw:read-write,可读写
sync:文件同时写入硬盘和内存
no_root_squash:NFS客户端连接服务端时,如果使用的是root,那么对服务端共享的目录来说,也拥有root权限。显然开启这项是不安全的
root_squash:NFS客户端连接服务端时,如果使用的是root,那么对服务端共享的目录来说,拥有匿名用户权限,通常它将使用nobody或nfsnobody身份
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端共享的目录来说,都拥有匿名用户权限
anonuid:匿名用户的UID(User Identification,用户身份证明)值,可以在此处自行设定
anongid:匿名用户的GID(Group Identification,共享资源系统使用者的群体身份)值
验证NFS共享存储
# 在nfs-clinet 节点的/mnt目录下创建一个abc.txt的文件并计算MD5值
[root@nfs-client ~]# cd /mnt/
[root@nfs-client mnt]# ll
[root@nfs-client mnt]# touch abc.txt
[root@nfs-client mnt]# md5sum abc.txt
# 回到nfs-server节点进行验证
[root@nfs-server ~]# cd /mnt/test/
[root@nfs-server test]# ll