glusterfs 在集群服务器上启动时挂载 - RHEL 7

use*_*441 6 glusterfs

我已经在一对服务器上配置了 gluserfs,我可以将它安装在我的客户端机器上。当我将两台机器脱机并从头启动时,我还希望能够在引导时在两台 glusterfs 服务器上挂载 glusterfs 文件系统。

这些服务器使用起搏器设置为集群。除了共享数据库之外,pacemaker 还提供了一个虚拟 IP 地址来挂载 gluster 文件系统。

在两台服务器都使用以下命令启动后,我可以在每个服务器上手动挂载文件系统:

mount -t glusterfs nodea:/gv0 /data
Run Code Online (Sandbox Code Playgroud)

这很棒。但我希望这在启动时自动发生。

所以我尝试在 fstab 中添加一个条目:

nodea:/gv0  /data       glusterfs   _netdev 0 0
Run Code Online (Sandbox Code Playgroud)

当我在集群启动并运行后运行“mount -a”命令时,它会起作用。但是,它在启动时不起作用。(这是客户端机器在启动时挂载 glusterfs 的方式,但集群已启动并正在运行。所以当然它可以在启动时为它们工作。)

我还尝试创建一个 systemd 单元文件来处理启动时 glusterfs 的安装。我的单元文件位于名为“data.mount”的 /etc/systemd/system 中,如下所示:

# Mounting gluster fs at /data

[Unit]
Description = Automount gluster filesystem
After=pcsd.service

[Mount]
What=nodea:/gv0
Where=/data
Type=glusterfs

[Install]
WantedBy = pcsd.service
Run Code Online (Sandbox Code Playgroud)

同样,当两台服务器都通过运行命令“systemctl start data.mount”启动并运行时,这会起作用。如果我只重启集群中的一台机器,它也可以工作。但它不适用于重新启动两台服务器。

如果集群中的两个节点都出现故障,或者如果我出于某种原因想同时重新启动两个节点,我想确保当两台机器重新启动时,glusterfs 已安装在 /data 上。

作为一种解决方法,我在两台机器上的 root 的 crontab 中添加了以下几行:

@reboot sleep 60 && mount -t glusterfs nodea:/gv0 /data
@reboot sleep 300 && mount -t glusterfs nodea:/gv0 /data
Run Code Online (Sandbox Code Playgroud)

如果我从头开始启动两个服务器,这会起作用。但我担心的是,如果起搏器服务的启动时间超过 5 分钟,那么我仍然没有将 gluster 文件系统安装在服务器上的 /data。

有没有办法让 systemd 单元文件检查它是否真的挂载了文件系统,以及是否在挂载之前不重试?

是否有其他方法可以在启动时安装 glusterfs 并检查它是否已实际安装?

小智 16

您应该能够在需要时让 systemd 自动挂载。我在启动时安装 Ubuntu 16.04 也有问题。基于此消息,我添加noauto,x-systemd.automount到我的fstab行中:

gluster1:/volume1   /storage-pool   glusterfs   defaults,_netdev,noauto,x-systemd.automount 0 0
Run Code Online (Sandbox Code Playgroud)

我已经重新启动了应用程序服务器几次,它们都已成功安装。我希望这也能帮助你!


小智 8

鉴于 LP 的态度,我一直在解决这个问题:

文件/etc/systemd/system/glusterfsmounts.service::

[Unit]
Description=Glustermounting
Requires=glusterfs-server.service

[Service]
Type=simple
RemainAfterExit=true
ExecStartPre=/usr/sbin/gluster volume list
ExecStart=/bin/mount -a -t glusterfs
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

那么你会:

systemctl 守护进程重新加载

systemctl 启用 glusterfsmounts

并重新启动......迄今为止对我来说是最好的/最稳定的