笔记内容:
- 14.1 NFS介绍
- 14.2 NFS服务端安装配置
- 14.3 NFS配置选项
笔记日期:2017-11-01
14.1 NFS介绍
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS可以把A、B、C机器之间的文件数据进行共享,例如用户上传了一个文件到A机器上,用户同样的可以在B或C机器上访问到上传的文件,不一定需要在A机器上才能访问,这就是NFS实现的功能。而且用户如果在A机器上对该文件更新或修改了,那么其他的机器都会进行同步。
从上图可以看到服务端需要有一个NFS服务和一个RPC服务,而客户端则只需要一个RPC服务,真正实现数据传输的是RPC服务,NFS服务是不监听任何端口的,RPC服务则默认监听111端口,所以NFS服务是需要借助RPC协议来进行通信的。
14.2 NFS服务端安装配置
NFS大致介绍完了,现在就是尝试安装NFS,首先要准备两台机器,一个当服务端一个当客户端,我这里使用的是两台虚拟机来做实验:
- 服务端需要安装nfs-utils和rpcbind包,安装命令:
yum install -y nfs-utils rpcbind
2. 客户端需要安装nfs-utils包,安装命令:
yum install -y nfs-utils
- 在服务端的/etc/exports文件中加入如下内容:
/home/nfstestdir
192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
ip可以根据实际情况自定义,我这里只是给出一个模板
4. 创建nfstestdir目录:
mkdir /home/nfstestdir
- 把目录设置为777权限:
chmod 777 /home/nfstestdir
- 查看两台机器有没有监听111端口:
一般来讲安装完包之后就会自动启动服务并监听端口的,如果没有启动的话,就手动启动一下,命令如下:
systemctl start rpcbind
启动之后查看一下进程是否如下:
- 启动nfs服务:
systemctl start nfs
启动之后查看一下进程有没有问题:
在启动nfs时会自动帮你启动rpc相关的一些服务:
以上这些都是与nfs的关联服务,如果没有以上这些服务是无法正常使用nfs的。
- 以下两个命令可以让rpcbind和nfs服务开机启动:
systemctl enable rpcbind
systemctl enable nfs
14.3 NFS配置选项
刚刚在/etc/exports文件中加入了如下内容:
192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
现在介绍一下这段内容的含义,这是一段nfs的配置选项,前面那段ip就不需要多解释了,后面那一段才是具体的配置选项。
我们来看看可以进行哪些配置:
rw (read/write) 读写
ro (read/only) 只读
sync 同步模式,内存数据实时写入磁盘,但是相对的会降低磁盘的效率
async 非同步模式,不需要将内存数据实时写入数据,虽然不会降低磁盘的效率,但是万一断电就会丢失一些数据。
no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大。
root_squash 与上面选项相对,客户端上的root用户使用NFS共享目录时会受到约束,被限定成某个普通用户
all_squash 客户端上所有用户都会在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
接下来就是客户端挂载,因为之前已经安装过nfs-util包了,所以不需要再安装了。
- 先将两台机器都关掉防火墙:
systemctl stop firewalld
selinux也要关掉:
getenforce
2. 查看一下可以共享服务端的哪个目录:
showmount -e 192.168.133.130 //该ip为NFS服务端ip
- 挂载共享目录:
mount -t nfs 192.168.133.130:/home/nfstestdir /mnt
- 使用df -h可以看到挂载好的共享目录:
- cd进/mnt目录下,创建一个文件,然后看看服务端有没有更新:
可以看到用户的属主和属组是mysql,至于为什么会这样,下面会提到。
服务端:
因为在nfs的配置文件中配置了:nonuid=1000,anongid=1000
所以在服务端中共享目录下文件的属主就为uid为1000的用户,同样的属组就为gid为1000的用户组。
在服务端中使用id 01这个命令,就可以看到01这个用户的uid和gid:
客户端也是一样的:
所以这是因为在nfs配置文件中已经定义了文件的属主和属组的id,所以在此共享目录下创建的文件,在服务端和客户端上的属主和属组就会对应上这个id。
从以上实验可以知道挂载完目录之后,客户端就可以像访问本地目录一样去访问这个服务器上的目录,客户端在此目录下做出的改动也会同步到服务器上,以上的实验只是简单的使用两台虚拟机模拟服务端和客户端,在实际应用中服务端和客户端都不止一台。但是从这个简单的实验,可以了解到NFS实现了什么样的功能,服务端和客户端又是怎么样进行数据传输的。