介绍
网络文件系统 (NFS) 是一种分布式文件系统协议,它允许客户端节点上的用户通过网络访问驻留在服务器节点上的文件,就像访问本地存储一样。 今天在这篇博客中,我将分享如何在 CentOS7 上设置 NFSv4 服务器和客户端并在其上运行 PG。
NFS 服务器
首先,通过以下方式安装 NFS 服务器组件
$ yum install nfs-utils
复制
这将在服务器机器上安装 nfs 进程,我们可以在其中继续启用和启动 NFS 服务器
$ systemctl enable nfs $ systemctl start nfs
复制
创建一个将由 NFS 客户端挂载的目录
mkdir /home/myserveruser/sharedir
复制
in/etc/exports 中,添加一条新记录,如下所示
/home/myserveruser/sharedir X.X.X.X(rw,sync,no_subtree_check,no_root_squash)
复制
此行允许 IP 地址为 X.X.X.X 的客户端将目录挂载到 /home/myserveruser/sharedir 并可以按照 rw 选项的指定进行读写。 对于所有可能的选项,请参阅此处的博客以了解所使用的每个选项的定义。 此目录将用于通过网络由 NFS 客户端初始化 PostgreSQL 数据库集群。
如果多个客户端/主机将挂载同一目录,您还需要将它们包含在 /etc/exports 中。
/home/myserveruser/sharedir X.X.X.X(rw,sync,no_subtree_check,no_root_squash) /home/myserveruser/sharedir A.A.A.A(rw,sync,no_subtree_check,no_root_squash) /home/myserveruser/sharedir B.B.B.B(rw,sync,no_subtree_check,no_root_squash)
复制
然后,我们准备重新启动 NFS 服务以考虑 /etc/exports 中的新更改
$ systemctl restart nfs
复制
记录与要导出到客户端的目录关联的用户的 userid 和 groupid。 例如,userid = 1009,groupid = 1009
$ id myserveruser
复制
您可能还需要确保 centos7 上的防火墙被禁用或设置为允许 NFS 流量通过。 您可以使用以下命令检查防火墙状态并添加要允许的新端口:
$ sudo firewall-cmd --zone=public --list-all $ firewall-cmd --permanent --zone=public --add-port=2049/tcp $ firewall-cmd --permanent --zone=public --add-port=2049/udp $ firewall-cmd --reload
复制
NFS 客户端
首先,通过以下方式安装 NFS 客户端组件
$ yum install nfs-utils
复制
在客户端创建一个目录,用作 NFS 服务器的挂载点
$ mkdir /home/myserveruser/sharedir
复制
由于 PostgreSQL 不能以 root 用户身份运行,我们需要一种无需 root 权限即可挂载远程 NFS 的方法。 为此,我们需要在 /etc/fstab 中再添加一个条目
Y.Y.Y.Y:/home/myserveruser/sharedir /home/myclientuser/mountpoint nfs rw,noauto,user 0 0
复制
其中 Y.Y.Y.Y 是客户端要连接的 NFS 服务器的 IP 地址,nfs 是我们要挂载的文件系统的类型,rw 表示读写,noauto 表示系统启动时不会自动挂载挂载点,user 表示 这个挂载点可以由非 root 用户挂载。
将此新行添加到 /etc/fstab 后,您可以尝试使用 mount -a 命令安装它,或者只是重新启动
现在,我们需要匹配 NFS 服务器端的 myserveruser 和 NFS 端的 myclientuser 的 userid 和 groupid。 用户名不必相等,但 userid 和 groupid 必须相等才能拥有访问挂载目录的正确权限,
设置 myclientuser 的 userid 和 groupid:
$ usermod -u 1009 myclientuser $ groupmod -u 1009 myclientuser
复制
其中 1009(例如)通过 id 命令记录在 NFS 服务器端。
请注意,上述命令将更改指定用户的属性,这也将导致该工具迭代地将 /home/myclientuser 下的所有文件更改为相同的属性,因为它由指定用户拥有。 此过程可能需要很长时间才能完成。 如果那里有大量数据,我建议创建一个新用户,而不是更改用户 ID 和组 ID。 请注意,指定用户的 /home 目录之外的文件将不会正确更改,这意味着一旦更改了 userid 和 groupid,当前用户将无法再访问它们。
完成所有设置后,我们现在可以挂载 NFS:
$ mount /home/clientuser/mountpoint
复制
NFS 客户端上的文件夹挂载点现在将反映到 NFS 服务器上的 sharedir 文件夹
最后,我们可以在 NFS 客户端的挂载点上初始化一个新的数据库集群
$ initdb -D /home/clientuser/mountpoint
复制
并且初始数据库文件应该物理存储在 NFS 服务器端而不是 NFS 客户端。 这可能需要比平时更长的时间,因为文件 I/O 现在是通过 NFS 在网络上完成的。
原文标题:How to Set Up NFS and Run PG on it
原文作者:Cary Huang
原文地址:https://www.highgo.ca/2022/08/05/how-to-set-up-nfs-and-run-pg-on-it/