NFS的概念
NFS(网络文件系统)提供了一种在类UNIX系统上共享文件的方法。CentOS7默认使用NFSv4提供服务,其优点是提供了有状态的连接,更容易追踪连接状态,增强安全性。NFS监听在TCP 2049端口上,客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。在客户端看来,使用NFS的远端文件就像在使用本地文件一样,只要具有相应的权限就可以使用各种文件操作命令,对共享的文件进行相应的操作。Linux操作系统既可以作为NFS服务器,也可以作为NFS客户,这意味着他可以把文件系统共享给其他系统,也可以挂载从其他系统上共享的文件系统。
为什么需要安装NFS服务?当服务访问流量过大时,需要多台服务器进行分流,而这么多台服务器可以使用NFS服务进行共享。NFS除了可以实现基本的文件,还可以结合远程网络启动,实现无盘工作站。NFS应用场景多为高可用文件共享,多台服务器共享同样的数据,但是他的可扩展性比较差,本身高可用方案不完善。取而代之,数据量比较大的可以采用MFS、TFS、HDFS等分布式文件系统。
NFS的组成
两台计算机需要通过网络建立连接时,双方主机就一定需要提供一些基本信息,如IP地址、服务器端口号。当有100台客户端需要访问某台服务器时,服务器就需要记住这些客户端的IP地址以及相应的端口号等信息,而这些信息是需要程序来管理的。在Linux中,这样的信息可以由某个特定的服务自己来管理,也可以委托给RPC来帮助自己管理。RPC是远程过程调用的协议,协议为远程通信程序管理通信双方所需的基本信息,这样NFS服务就可以专注于如何共享数据。至于通信的链接以及连接的基本信息,则全权委托给RPC管理。因此NFS组件由与NFS相关的内核模块、NFS用户空间工具和RPC相关的服务组成,主要由如下2个RPM包提供:
- nfs-utils。包含NFS服务器端守护进程和NFS客户端相关工具。
- rpcbind。提供RPC的端口映射的守护进程及其相关文档、执行文件等。
实战案例-NFS服务的使用
1.案例目标
了解NFS服务的安装。
了解NFS的配置与使用。
2.案例分析
节点规划
IP | 主机名 | 节点 |
192.168.63.34 | nfs-server | NFS服务节点 |
192.168.63.35 | nfs-client | NFS客户端节点 |
3.案例实施
(1)基础配置
修改两个节点的主机名,第一台机器为nfs-server;第二台机器为nfs-client。
[root@localhost ~]# hostnamectl set-hostname nfs-server
[root@localhost ~]# bash[root@localhost ~]# hostnamectl set-hostname nfs-client
[root@localhost ~]# bash
(2)安装NFS服务
配置好本地yum源后,为两个节点安装NFS服务。
[root@nfs-server ~]# yum install -y nfs-utils rpcbind
[root@nfs-client ~]# yum install -y nfs-utils rpcbind
注意:安装NFS服务必须要以来RPC,所以运行NFS就必须安装RPC。
(3)NFS服务使用
在nfs-server节点创建一个用于共享的目录,命令如下:
[root@nfs-server ~]# mkdir /mnt/test
编辑NFS服务的配置文件/etc/exports,在配置文件中加入一行代码,命令如下:
[root@nfs-server ~]# vi /etc/exports
/mnt/test 192.168.63.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
生效配置命令如下:
[root@nfs-server ~]# exportfs -r
配置文件说明如下:
/mnt/test:为共享目录。
192.168.63.0/24:可以为一个网段,也可以是一个IP,还可以是域名。
rw:read-write,可读写。
ro:read-only,只读。
sync:文件同时写入硬盘和内存。
async:文件暂存于内存,而不是直接写入内存。
wdelay:延迟写操作。
no_root_squash:NFS客户端连接时,如果使用的是root,那么对服务器共享的目录来说,也拥有root权限。显然,开启这项是不安全的。
root_squash:NFS客户端连接服务端时,如果使用的是root,那么对服务端共享的mululaishu8o,拥有匿名用户的权限,通常他将使用nobody或nfsnobody身份。
all_squash:不论NFS客户端连接服务端时使用的什么用户,对服务共享的目录来说,都拥有匿名用户权限。
anonuid:匿名用户的UID值,可以在此处自行设定。
anongid:匿名用户的GID值。
nfs-server端启动NFS服务,命令如下:
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
nfs-server端查看可挂载目录,命令如下:
[root@nfs-server ~]# showmount -e 192.168.63.34
Export list for 192.168.63.34:
/mnt/test 192.168.63.0/24
可以查看到共享的目录。
转到nfs-client端,在客户端挂载前,先要将服务器的SElinux服务和防火前服务关闭。
[root@nfs-client ~]# setenforce 0
[root@nfs-client ~]# systemctl stop firewalld
nfs-client端启动NFS服务,命令如下:
[root@nfs-client ~]# systemctl start rpcbind
[root@nfs-client ~]# systemctl start nfs
在nfs-client节点进行NFS共享目录的挂载,命令如下:
[root@nfs-client ~]# mount -t nfs 192.168.63.34:/mnt/test /mnt/
无提示信息则表示成功,查看挂载情况,命令如下:
[root@nfs-client ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 16G 1.1G 15G 7% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 20M 467M 5% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 397M 121M 277M 31% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /opt/centos
192.168.63.34:/mnt/test 16G 1.1G 15G 7% /mnt
可以看到nfs-server节点的/mnt/test目录已挂在到nfs-client节点的/mnt目录下。
(4)验证
在nfs-client节点的/mnt目录下创建一个abc.txt文件并计算MD5的值,命令如下:
[root@nfs-client ~]# cd /mnt/
[root@nfs-client mnt]# ll
总用量 0
[root@nfs-client mnt]# touch abc.txt
[root@nfs-client mnt]# md5sum abc.txt
d41d8cd98f00b204e9800998ecf8427e abc.txt
回到nfs-server节点进行验证,命令如下:
[root@nfs-server ~]# cd /mnt/test
[root@nfs-server test]# ll
总用量 0
-rw-r--r--. 1 root root 0 11月 25 13:53 abc.txt
[root@nfs-server test]# md5sum abc.txt
d41d8cd98f00b204e9800998ecf8427e abc.txt
可以发现,在client节点创建的文件和server节点的文件是一样的。