目录
(一)NFS:
1. 什么是NFS
2. NFS守护进程
3. RPC服务
4. 原理
5. 部署
5.1 安装NFS服务
5.2 配置防火墙
5.3 创建服务端共享目录
5.4 修改服务端配置文件
(1). /etc/exports
(2). nfs.conf
5.5 启动nfs并加入自启
5.6 客户端创建挂载目录并挂载
5.7 设置开机自动挂载
5.8 测试
5.9 补充:
(二)Autofs:
1. 挂载点和配置
2. 事件驱动
3. 后台守护进程
4. 超时机制
5. 挂载方式
6. 错误处理
7. 配置autofs
7.1 安装autofs
7.2 服务端配置
7.3 客户端配置
7.4 补充:
(一)NFS:
1. 什么是NFS
NFS 是Network File System的缩写,即网络文件系统。英文Network File System(NFS),是基于TCP/IP协议的应用,可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS在文件传送或信息传送过程中依赖于RPC服务。RPC:远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。
NFS服务器可以看作是一个FILE SERVER。它可以让你的机器(客户端)通过网络将远端的NFS SERVER共享目录MOUNT到自己的系统中。
2. NFS守护进程
nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;
mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端登录到NFS服务器后,必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
portmap:主要功能是进行端口映射工作。
3. RPC服务
RPC(Remote Procedure Call)即远程过程调用,记录NFS服务器使用的端口号,在NFS客户端发送请求时,将对应的端口号信息传递给客户端,确保客户端与服务端能连接上。
注意:在启动NFS服务之前,必须先启动PRC服务,在Centos7中叫做 rpcbind 服务,否则 NFS Server 无法向RPC注册信息,另外,如果RPC服务重启,原来注册的NFS服务端的信息也就失效了,也必须重启NFS服务。特别要注意的是,修改NFS配置⽂件后不需要重启NFS,只需要执⾏ exportfs -rv 命令即可或是 systemctl reload nfs。
4. 原理
- 服务端启动RPC服务,并开启111端口。
- 然后服务器端启动NFS服务,并向RPC注册端口信息。
- 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
- 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
- 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
[root@node2 elysia]# rpcinfo -p 192.168.240.151
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
5. 部署
操作系统版本: centos 7
服务端:192.168.240.151/24(node1)
客户端:192.168.240.152/24 (node2)
5.1 安装NFS服务
从原理可以看出,服务端和客户端都是需要下载nfs-utils和rpcbind的。
yum -y install nfs-utils rpcbind
5.2 配置防火墙
服务端和客户端同时配置即可。
#iptables -F #使防火墙的策略恢复到默认状态,没有任何过滤规则
#iptables-save #输出当前的 iptables 配置和规则
#防火墙放行nfs,mountd,rpc-bind服务
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
#重载防火墙
firewall-cmd --reload
5.3 创建服务端共享目录
在nfs服务端上建立用于nfs文件共享的目录,并设置足够的权限确保其他人也有写入权限,我们创建一个测试文件readme.txt。
mkdir -p /mnt/shared
chmod 777 /mnt/shared
echo "hello world" > hello.txt
5.4 修改服务端配置文件
NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应权限。
配置 NFS(网络文件系统)服务时,主要涉及两个配置文件:/etc/exports
和 nfs.conf
。以下是这些文件中常用的参数:
(1). /etc/exports
这个文件用于定义哪些目录可以被共享,以及它们的访问权限。常用参数包括:
- 共享目录:指定要共享的目录路径。
- 客户端:指定可以访问该目录的客户端,可以是 IP 地址、主机名或网络段,可以使用通配符来指定网络段。
- 访问权限:
rw
:读写权限。ro
:只读权限。no_root_squash:
允许客户端以 root 用户访问共享。默认会将 root 权限映射为普通用户。root_squash:
当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户all_squash:
将所有客户端请求映射为匿名用户。- 异步/同步:
async
:允许 NFS 在将数据写入磁盘之前返回响应,提高性能。sync
:确保数据在响应前写入磁盘,增加安全性,但性能较低。示例:
/srv/nfs 192.168.1.0/24(rw,sync,no_root_squash) /srv/nfs/docs *.example.com(ro)
(2). nfs.conf
这个文件通常位于
/etc/nfs.conf
,用于配置 NFS 服务的全局参数。常用的参数包括:
[nfs]:NFS 相关设置。
vers
:指定 NFS 版本。mountd_port
:指定 mountd 的端口号。rpcbind_port
:指定 rpcbind 的端口号。[rpcd]:RPC 相关设置。
我们在/etc/exports文件中加入以下行即可,nfs.conf文件有要求自行更改。
/mnt/shared 192.168.240.*(rw,sync,no_root_squash)
#/mnt/shared:服务端共享的目录
#192.168.240.*:允许访问的NFS客户端,这里是一个网段内的主机,也可以是某一个指定的主机
#(rw,sync,no_root_squash):共享权限参数
5.5 启动nfs并加入自启
服务端配置即可。
systemctl start rpcbind # 启动rpc
systemctl start nfs-server #启动nfs
systemctl enable rpcbind #设置开机自启
systemctl enable nfs-server #设置开机自启
5.6 客户端创建挂载目录并挂载
挂载之前,我们可以使用showmount查看一下NFS服务端的可共享目录:
[root@node2 ~]# showmount -e 192.168.240.151 Export list for 192.168.240.151: /mnt/shared 192.168.240.*
在NFS客户端创建一个挂载目录,使用mount命令并结合-t参数,指定要挂载的文件系统类型,并在命令后面写上服务器IP地址,服务器上的共享目录以及要挂载到客户端的目录。
mkdir -p /mnt/nfs
mount -t nfs 192.168.240.151:/mnt/shared /mnt/nfs
#-t nfs:挂载的文件系统类型为nfs
#192.168.240.151:/mnt/shared:NFS服务端IP地址以及共享目录
#/mnt/nfs:共享目录挂载到的客户端本地目录
使用df -h查看挂载情况:
[root@node2 ~]# df -h | tail -n 1
192.168.240.151:/mnt/shared 18G 5.1G 13G 29% /mnt/nfs
5.7 设置开机自动挂载
上面我们虽然挂载好了,但是每次开机都需要重新挂载,非常麻烦,我们只需要在/etc/fstab文件中加入以下配置即可,之后每次开机系统就会帮我们自动挂载了。
echo "192.168.240.151:/mnt/shared /mnt/nfs nfs defaults 0 0" >> /etc/fstab
5.8 测试
客户端进入挂载目录,查看是否存在hello.txt文件
cd /mnt/nfs
cat hello.txt
[root@node2 ~]# cd /mnt/nfs [root@node2 nfs]# ls hello.txt [root@node2 nfs]# cat hello.txt hello world
出现hello.txt测试文件,配置完成。
5.9 补充:
卸载目录:
umount
是一个用于卸载文件系统的命令。在 Linux 和 Unix 系统中,使用 umount
可以安全地断开挂载的设备或目录。以下是 umount
的基本用法:
基本语法:
umount [选项] <挂载点或设备>
示例:
卸载挂载点:
umount /mnt/mydrive
这将卸载
/mnt/mydrive
目录下的文件系统。卸载特定设备:
umount /dev/sdb1
这将卸载
/dev/sdb1
设备。
常用选项:
-l
:懒惰卸载,立即卸载但在文件系统不再被使用时才真正完成。-f
:强制卸载,即使设备忙也尝试卸载。-
--timeout:超时时间。
注意事项:
- 在卸载之前,确保没有进程正在使用该文件系统。
- 如果有数据未写入,则可能会导致数据丢失。
修改超时卸载时间:
在 NFS(网络文件系统)中,修改默认的超时卸载时间可以通过调整挂载选项来实现。NFS 的挂载通常是在 /etc/fstab
文件中配置,也可以在命令行中使用 mount
命令进行挂载。以下是如何修改默认超时卸载时间的方法:
(1). mount
命令:
在挂载 NFS 文件系统时,可以使用 timeo
和 retrans
选项来控制超时行为。
timeo
:设置 NFS 客户端的请求超时时间(以 1/10 秒为单位)。retrans
:设置请求失败后重试的次数。
例如,假设你想设置超时时间为 30 秒(即 300 个 1/10 秒),并指定重试次数为 5,可以使用如下命令:
mount -o timeo=300,retrans=5 nfs_server:/path/to/share /mnt/mountpoint
(2). 修改 /etc/fstab
如果希望在系统启动时自动挂载 NFS,并应用相同的超时设置,可以将挂载选项添加到 /etc/fstab
文件中。示例如下:
nfs_server:/path/to/share /mnt/mountpoint nfs defaults,timeo=300,retrans=5 0 0
注意事项
timeo
的单位是 1/10 秒,因此在设置时需要将秒数乘以 10。- 调整这些参数时,请根据网络条件和应用需求进行合理配置,以避免过于频繁的重试或过长的等待时间。
(二)Autofs:
与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。
autofs的缺点:autofs特点是只有⽤户请求时才执⾏挂载,所以当⾼并发访问时,开始请求的瞬间需要执⾏挂载,性能较差,因此在⾼并发业务场景下,宁愿保持挂载也不使⽤autofs⾃动挂载。
autofs工作原理主要基于以下几个关键概念和步骤:
1. 挂载点和配置
autofs
通过配置文件来定义挂载点以及每个挂载点所对应的具体文件系统。最常用的配置文件是 /etc/auto.master
和相应的子配置文件(如 /etc/auto.mnt
)。在这些文件中,你可以指定需要自动挂载的目录及其挂载选项。
2. 事件驱动
autofs
的核心原理是事件驱动。当用户尝试访问一个未挂载的目录时,autofs
会检测到这个访问请求并触发挂载操作。这种机制使得只有在需要时才会挂载文件系统,从而节省了系统资源。
3. 后台守护进程
autofs
由一个后台守护进程运行,通常为 automountd
。该守护进程负责监视挂载请求,并根据配置文件中的设定自动执行挂载和卸载操作。
4. 超时机制
一旦文件系统被挂载,autofs
会启动一个超时计时器。如果在预设的时间内没有任何对该挂载点的访问,autofs
将自动卸载该文件系统。这一特性可以减少不必要的资源占用,同时提高系统性能。
5. 挂载方式
在挂载时,autofs
会调用相应的挂载命令(如 mount
),并使用配置文件中指定的选项进行挂载。例如,对于 NFS,可以指定远程服务器和共享路径。
6. 错误处理
当发生错误(如网络问题)导致挂载失败时,autofs
能够处理这些错误,并根据配置中的选项决定如何响应,例如是否重试或返回错误信息。
autofs
的设计理念是将挂载操作与用户的实际需求紧密结合,通过事件驱动和超时机制实现高效的资源管理。其主要优点包括:
- 节省资源:仅在需要时挂载文件系统。
- 简化用户操作:用户无需手动挂载或卸载文件系统。
- 自动管理:能够自动卸载不再使用的文件系统。
这种机制特别适合于需要频繁访问网络文件系统(如 NFS)的环境,提高了访问效率和用户体验。
7. 配置autofs
autofs
是一种用于自动挂载文件系统的工具,通常用于在 Linux 系统上动态挂载 NFS 或其他类型的文件系统。它使用主配置文件和子配置文件来定义挂载规则和行为。
主配置文件格式
主配置文件通常位于
/etc/auto.master
,其格式如下:
/path/to/mountpoint /etc/auto.subfile --timeout=60
解释:
/path/to/mountpoint
:指定要挂载的目录(挂载点)。
/etc/auto.subfile
:指向包含子配置的文件。
--timeout=60
:可选参数,设置超时时间,表示在闲置 60 秒后卸载挂载点。
子配置文件格式
子配置文件的格式通常是在指定的文件中定义,假设为
/etc/auto.subfile
,其格式如下:
key -options nfs_server:/path/to/share
解释:
key
:挂载点的关键字,通常是该挂载点的名称,它将成为/path/to/mountpoint/key
的实际挂载点。
-options
:挂载选项,如rw
(读写)、ro
(只读)等。
nfs_server:/path/to/share
:指定要挂载的 NFS 服务器及共享路径。
示例
主配置文件 (/etc/auto.master
)
/mnt/nfs /etc/auto.nfs --timeout=60
子配置文件 (/etc/auto.nfs
)
data1 -fstype=nfs,rw nfs_server:/export/data1 data2 -fstype=nfs,ro nfs_server:/export/data2
在这个示例中,当访问 /mnt/nfs/data1
时,autofs
会自动挂载 nfs_server:/export/data1
,并且允许读写;访问 /mnt/nfs/data2
时,则会自动挂载 nfs_server:/export/data2
,但为只读模式。
总结
-
主配置文件:定义了挂载点和关联的子配置文件,以及一些全局选项。
-
子配置文件:定义具体的挂载规则,包括挂载的关键字、选项和目标资源。
7.1 安装autofs
客户端安装即可
yum -y install autofs
注意,刚才做NFS实验时,服务端和客户端都下载rpcbind和nfs-utils ,如果没下再次下载即可
yum -y install nfs-utils rpcbind
本次autofs实验是基于上面NFS的,所以我们的autofs结合NFS一同实现自动挂载,服务端基本不变,我们主要修改客户端配置。先配置服务端,这里就不多讲了,和前面类似。
记得做好防火墙和selinux的相关配置,并且确保相关服务都开启了。
7.2 服务端配置
mkdir -p /usr/elysia
chmod 777 /usr/elysia
echo "/usr/elysia 192.168.240.*(rw,sync,no_root_squash)" >> /etc/exports
exportfs -rv
[root@node1 elysia]# exportfs -rv exporting 192.168.240.*:/mnt/shared exporting 192.168.240.*:/usr/elysia
7.3 客户端配置
(1). 使用showmount命令查看服务端的可共享目录。
showmount -e 192.168.240.151
[root@node2 ~]# showmount -e 192.168.240.151 Export list for 192.168.240.151: /mnt/shared 192.168.240.* /usr/seele 192.168.240.* /usr/elysia 192.168.240.* #目标目录
包含了我们服务端创建的/usr/elysia目录。
(2). 修改主配置文件
vim /etc/auto.master
加入以下行
/data /etc/auto.misc #/data是我们想要挂载的目录的父目录
(3). 修改子配置文件
vim /etc/auto.misc
加入以下行
elysia -rw 192.168.240.151:/usr/elysia
注意,子配置文件的命名不一定要以".misc"为后缀。成功挂载并且cd后会自动生成/data/elysia目录
(4). 重启autofs服务
systemctl restart autofs
(5). 测试
客户端切换到/data目录,查看是否存在/data/elysia
[root@node2 ~]# df -h | grep elysia [root@node2 ~]# #不存在
cd到/data/elysia。
[root@node2 ~]# df -h | grep elysia [root@node2 ~]# cd /data/elysia [root@node2 elysia]# df -h | grep elysia 192.168.240.151:/usr/elysia 18G 5.1G 13G 29% /data/elysia #出现挂载目录,auto配置完成
7.4 补充:
参数 | 实现功能 |
fg/bg | fg表示挂载行为在前台执行,bg表示挂载行为在后台执行。前台执行,则mount会持续尝试挂载,直到成功或超时为止。后台执行,mount会在后台持续多次进行mount,不会影响到前台的程序运行。 |
soft/hard | hard表示当两者之间的任何一台主机脱机,则RPC会持续地呼叫,直到对方恢复连接为止。如果是soft的话,那RPC会在超时后重复呼叫,非持续呼叫 |
intr | 当使用hard方式挂载时,若加上intr这个参数,则当RPC持续呼叫时,该次的呼叫是可以被中断的 |
rsize/wsize | 读出(rsize)与写入(wsize)的区块大小,设置值可以影响客户端与服务器端传输数据的缓冲记忆容量 |