我们创建的磁盘是否都必须挂载到本机上?并不是。在 Linux 和其他操作系统中,有一种叫做 NFS(网络文件系统)的工具,它允许跨网络共享文件系统资源。通过使用 NFS,我们可以将多个客户端服务器的数据目录挂载到一个专门的数据服务器上,从而降低客户端服务器的负载,并提高它们的工作效率,同时集中管理数据可以带来其他好处,如数据备份和集中维护。
目录
1.NFS简介
1.1NFS优缺点
1.2NFS特点
1.3NFS应用场景
2.NFS实战
2.1nfs服务器的配置
2.1.1安装nfs服务的软件包
编辑
2.1.2创建共享目录
2.1.3更改共享目录的权限,让其他主机也可进行读写
2.1.4编辑nfs配置文件
2.1.4.1解释对应的部分:
2.1.4.2可替换的内容
2.1.4.3举例
2.1.5应用配置文件的更改
2.1.5.1其他exports命令
2.1.6重启服务并设置开启自启
2.1.7配置防火墙(如果需要)
2.2nfs客户机的配置
2.2.1安装nfs服务的软件包
2.2.2创建挂载点目录
2.2.3设置nfs文件共享
2.2.4永久挂载(选做)
2.2.5验证挂载点
1.NFS简介
NFS(Network File System)是一种分布式文件系统协议,它允许计算机系统通过网络访问彼此的文件系统。NFS 是由 Sun Microsystems 在 1980 年代开发的,并且随着时间的推移,它已经成为了 Unix 和 Linux 系统间共享文件的标准方法之一。
1.1NFS优缺点
优点:
- 节约存储空间:常用数据可以集中存储在一台机器上,通过网络共享给多台计算机访问,避免数据重复存储 。
- 节约硬件资源:可以共享如软驱、CDROM和ZIP等存储设备,减少网络上的可移动设备数量 。
- 用户主目录设定:对于需要经常登录多台计算机的用户(如管理员),可以通过NFS设置主目录,实现数据一致性 。
- 跨平台支持:NFS可以在多种操作系统中使用,包括Linux、Unix、Windows和macOS等 。
- 高性能:对于中型或小型文件,NFS提供了极佳的性能,特别是在顺序读取情况下 。
- 配置简单:NFS的部署和配置相对简单,易于使用。
缺点:
- 单点故障:如果NFS服务器宕机,所有客户端都无法访问共享文件 。
- 性能限制:在高并发情况下,NFS的效率和性能可能受限,需要优化才能提高性能 。
- 安全性问题:NFS在传输过程中没有加密机制,数据以明文形式传输,安全性较弱,通常建议在局域网内使用 。
- 数据完整性:NFS服务器传输数据时没有验证机制,对数据完整性要求较高的业务不建议使用 。
- 维护复杂性:多台客户端挂载到NFS服务器时,连接管理和维护可能变得复杂 。
- 网络依赖性:NFS的性能受到网络质量和稳定性的影响,如果网络连接不稳定,可能会影响文件访问速度和可靠性 。
总的来说,NFS非常适合于需要高性能文件共享的场景,如数据中心、云计算和分布式存储系统等。但是,对于需要高安全性或者担心单点故障的环境,可能需要考虑其他文件共享协议或者增加额外的安全和冗余措施。
1.2NFS特点
-
跨平台:NFS 可以在多种操作系统中使用,包括各种 Unix 系统(如 Linux、BSD、Solaris 等)和非 Unix 系统(如 Windows、macOS 等,通常需要额外的软件支持)。
-
客户端-服务器模式:在 NFS 架构中,一个或多个系统作为服务器,提供文件系统的访问。其他系统则作为客户端,通过网络访问这些文件系统。
-
透明访问:对于客户端系统而言,访问 NFS 挂载的远程文件就像访问本地文件一样透明。用户和应用程序无需关心文件实际存储在远程服务器上。
-
数据缓存:NFS 客户端会缓存从服务器获取的数据,这样可以减少网络流量并提高访问速度。但这也意味着在某些情况下,客户端可能访问到过时的数据。
-
数据一致性:NFS 协议提供了数据一致性的保证,确保在多个客户端同时访问同一文件时,数据的完整性不会被破坏。
-
易于设置和使用:通过简单的配置,就可以在客户端挂载远程文件系统。这使得 NFS 成为共享文件的便捷方式。
-
版本:NFS 有几个版本,其中 NFSv3 和 NFSv4 是最常用的。NFSv4 提供了对 NFSv3 的多项改进,包括更好的性能、安全性和对 Windows 系统的支持。
-
安全性:早期版本的 NFS(如 NFSv2)在安全性方面较弱,但后续版本通过 Kerberos 认证等机制增强了安全性。
1.3NFS应用场景
- 共享公共数据集,如配置文件、日志文件等。
- 在多台服务器之间提供对同一数据集的访问,以便于数据备份、灾难恢复等。
- 在虚拟化环境中,作为虚拟机的共享存储解决方案。
2.NFS实战
现有一台ip为192.168.154.140的服务器,将它变成nfs服务器,并且让服务器下 的/path/to/shared_directory目录挂载到客户机的/local/mount/point目录下从而实现跨机挂载。
/path/to/shared_directory
2.1nfs服务器的配置
2.1.1安装nfs服务的软件包
分系统进行安装,不同系统的安装命令不同。
sudo apt install nfs-common # Debian/Ubuntu
sudo yum install nfs-utils # CentOS/RHEL
sudo dnf install nfs-utils # Fedora
2.1.2创建共享目录
sudo mkdir -p /path/to/shared_directory
注意:上述的目录的名称和路径不一定必须是/path/to/shared_directory,我们可以根据需要进行自定义。
2.1.3更改共享目录的权限,让其他主机也可进行读写
sudo chmod -R 755 /path/to/shared_directory
2.1.4编辑nfs配置文件
sudo vi /etc/exports
/path/to/shared_directory *(rw,sync,no_root_squash,no_subtree_check)
nfs的共享目录的位置位于nfs服务器的/etc/exports文件内,注意这是一个文件而不是一个目录,该文件需要书写的格式如下。
我做了一个“母例”,通过该例子大家在自己操作的时候就结合自身情况进行删减,做填字游戏即可。
/path/to/shared_directory client_ip_or_netmask(rw,sync,no_root_squash,no_subtree_check)
2.1.4.1解释对应的部分:
-
共享目录:
/path/to/shared_directory
:这是 NFS 服务器上你想要共享的目录的路径。 -
客户端指定:
client_ip_or_netmask
:这是允许访问共享目录的客户端的 IP 地址或网络掩码。可以使用单个 IP 地址(如192.168.1.100
)、网络段(如192.168.1.0/24
)或通配符(如*
表示所有客户端)。 -
选项:
rw
:表示客户端可以以读写模式访问共享目录。sync
:表示所有文件系统操作都将同步执行,确保数据立即写入磁盘。no_root_squash
:表示远程的 root 用户将具有与本地 root 用户相同的权限。默认情况下,root 用户会被 "squash"(降低权限),通常是变成匿名用户nfsnobody
。no_subtree_check
:表示 NFS 服务器不会检查共享目录的父目录权限,这可以提高性能,但可能降低安全性。
2.1.4.2可替换的内容
-
共享目录:
- 可以替换为服务器上的任何有效目录路径。
-
客户端指定:
- 可以替换为其他单个 IP 地址、网络段或使用通配符
*
。通配符*表示我们本网内的所有主机都可以对共享目录内的资源进行读写。
- 可以替换为其他单个 IP 地址、网络段或使用通配符
-
选项:
ro
:替换rw
可以改为只读模式。async
:替换sync
可以改为异步模式,先写入缓存再写入磁盘。root_squash
:替换no_root_squash
可以启用 root 用户权限降低。subtree_check
:替换no_subtree_check
可以启用父目录权限检查。all_squash
:替换no_root_squash
可以将所有用户都映射为匿名用户。anonuid=UID
和anongid=GID
:可以指定匿名用户的 UID 和 GID。secure
:限制客户端只能从小于1024 的 TCP 端口连接 NFS 服务器。insecure
:允许客户端从大于 1024 的 TCP 端口连接 NFS 服务器。
2.1.4.3举例
# 共享目录 /data/share1 给整个 192.168.1.0/24 网络,只读模式
/data/share1 192.168.1.0/24(ro,sync,secure)
# 共享目录 /data/share2 给特定客户端 192.168.1.100,读写模式,并禁用 root 用户映射
/data/share2 192.168.1.100(rw,sync,no_root_squash)
# 共享目录 /data/share3 给所有客户端,读写模式,异步写入
/data/share3 *(rw,async,no_subtree_check)
2.1.5应用配置文件的更改
sudo exportfs -a
这里的exports -a并不像vi文本编辑器一个":wq"就可以保存后退出了,而是需要nfs服务知道它的配置文件需要应用里面的内容了,这样nfs就会根据文件里面的内容重新对服务进行检查-->更新。
2.1.5.1其他exports命令
-
showmount:用于查询 NFS 服务器的共享目录信息。
showmount -e <server>
:显示服务器上的 NFS 共享目录。showmount -a <server>
:显示 NFS 服务器的客户端信息和共享目录。
上图我仅作一个展示,我配置了两个共享目录,一个就是实验中的/path...另一个是/webapps,而webapps的共享目录仅192.168.154.0网段的主机可以读写。
-
mount:用于挂载和卸载文件系统。
mount -t nfs <server>:<shared_directory> <local_mount_point>
:将远程 NFS 共享目录挂载到本地挂载点。umount <mount_point>
:卸载已经挂载的文件系统。
-
nfsstat:显示 NFS 的统计信息。
3.rpcinfo:显示 RPC 服务的状态,NFS 服务依赖于 RPC。
4.rpcbind:RPC 服务的守护进程,NFS 服务依赖于 RPC。
5.nfs-utils:NFS 服务的主程序包,包括 rpc.nfsd
、rpc.mountd
等。
6.idmapd:用户和组 ID 映射服务。
7.exportfs:管理 NFS 服务器的当前导出表。
8.unshare:与 share
命令相反,用于取消共享。
9.smbclient:访问 Windows 或 Samba 服务器上的共享。
10.autofs:自动挂载文件系统,可以配置自动挂载 NFS 共享。
11.fstab:系统启动时挂载文件系统配置文件,可以配置 NFS 共享的自动挂载。
上述这些内容大家根据实验自己输入一下看一看结果即可,这里就不做展示了。
2.1.6重启服务并设置开启自启
nfs这个机制有点像Windows的更新了,我们更新电脑系统的时候一般有“更新并关机”和“更新并重启”这两个选项,我们如果仅更新配置文件不对服务进行重启的话nfs还是会保留之前的配置,这样我们的配置是不生效的,所以我们还要进行重启的步骤。这样一是保证我们的配置可以更新二是保证我们nfs服务器开机可用。
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
2.1.7配置防火墙(如果需要)
允许nfs端口通过防火墙,这里我建议是配置上,万一以后文件共享失败可能防火墙也有一部分的原因。
yum -y install ufw
UFW(Uncomplicated Firewall)是一个用户友好的前端界面,用于管理 Linux 系统上的 iptables 防火墙规则。它旨在使配置防火墙变得简单,特别是对于不熟悉复杂 iptables 命令的用户。UFW 提供了一个更易于理解和使用的命令行界面来控制进出你的系统的网络流量。
接下来我们开始添加防火墙规则并重载防火墙
sudo ufw allow 2049/tcp
sudo ufw allow 2049/udp
sudo ufw allow 111/tcp
sudo ufw allow 111/udp
sudo ufw reload
2.2nfs客户机的配置
2.2.1安装nfs服务的软件包
分系统进行安装,每个系统的安装命令是不一样的
sudo apt install nfs-common # Debian/Ubuntu
sudo yum install nfs-utils # CentOS/RHEL
sudo dnf install nfs-utils # Fedora
2.2.2创建挂载点目录
sudo mkdir -p /local/mount/point
我们要把NFS服务器的数据挂载到客户机的共享目录/path/to/shared_directory挂载到客户机的挂载点/local/mount/point下,安装完nfs服务后马上根据路径创建目录。
2.2.3设置nfs文件共享
sudo mount -t nfs 192.168.154.140:/path/to/shared_directory /local/mount/point
一句话解释就是使用nfs的挂载方法将ip地址为192.168.154.140的/path/to/shared_directory目录挂载到客户机的/local/mount/point挂载点上。里面除了mount -t nfs其余的所有内容都可以根据自己实验的情况进行修改。
2.2.4永久挂载(选做)
想要实现开机就挂载可以这样做
sudo vi /etc/fstab
进入该文件编写如下内容:
192.168.154.140:/path/to/shared_directory /local/mount/point nfs defaults 0 0
下面是对上述代码的解释:
-
SERVER_IP:/path/to/shared_directory:
SERVER_IP
:NFS 服务器的 IP 地址。/path/to/shared_directory
:NFS 服务器上要挂载的共享目录的路径。- 这部分指定了远程 NFS 服务器的共享目录的位置。
-
/local/mount/point:
- 这是本地系统上的一个目录路径,用作挂载点。当 NFS 共享挂载后,你可以通过这个本地路径访问远程服务器上的文件。
-
nfs:
- 指定了文件系统类型为 NFS。
-
defaults:
- 这是一个选项集,表示使用默认的挂载选项。这些选项包括:
rw
:允许读写访问。suid
:允许执行 set-user-identifier 或 set-group-identifier。dev
:允许访问设备文件。exec
:允许执行文件。auto
:允许自动挂载。nouser
:限制只有 root 用户可以挂载。async
:所有 I/O 操作都应该是异步的。
- 如果需要,可以在这里指定其他挂载选项,例如
ro
(只读)或soft
(如果服务器不可用,客户端在重试一定次数后放弃)。
- 这是一个选项集,表示使用默认的挂载选项。这些选项包括:
-
0:
- 这个数字代表 dump 程序是否需要备份该分区。通常设置为 0,表示不需要备份。
-
0:
- 这个数字代表 fsck 程序在系统启动时检查该分区的顺序。数字越小,优先级越高。NFS 分区通常设置为 0,因为它们通常不需要在启动时检查。
使用下面的命令让挂载生效
sudo mount -a
2.2.5验证挂载点
df -hT来验证我们的挂载点是否正确。