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

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

我已经在两台服务器上配置了 gluserfs,并且能够将其安装到我的客户端计算机上。我还希望能够在启动时将两台计算机脱机并从头开始启动时在两台 glusterfs 服务器上安装 glusterfs 文件系统。

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

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

mount -t glusterfs nodea:/gv0 /data

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

因此我尝试在 fstab 中添加一个条目:

nodea:/gv0  /data       glusterfs   _netdev 0 0

当我在集群启动并运行后运行“mount -a”命令时,该命令有效。但是,它在启动时不起作用。(这是客户端计算机在启动时安装 glusterfs 的方式,但集群已启动并运行。因此,它当然在启动时有效。)

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

# 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

同样,当两台服务器都启动并运行时,通过运行命令“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

如果我从头开始启动两个服务器,这种方法是可行的。但我担心的是,如果 Pacemaker 服务启动时间超过 5 分钟,那么我仍然没有在服务器上的 /data 上安装 gluster 文件系统。

有没有办法让 systemd 单元文件检查它是否真正安装了文件系统,如果没有,则重试直到安装为止?

还有其他方法可以让 glusterfs 在启动时挂载并检查它是否真的已挂载吗?

答案1

您应该能够在需要时让 systemd 自动挂载。我在启动时也遇到了 Ubuntu 16.04 挂载问题。基于这条信息noauto,x-systemd.automount在我的fstab行中添加了以下内容:

gluster1:/volume1   /storage-pool   glusterfs   defaults,_netdev,noauto,x-systemd.automount 0 0

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

答案2

鉴于 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

那么你会:

systemctl 守护进程重新加载

systemctl 启用 glusterfsmounts

然后重启...对我来说是迄今为止最好/最稳定的

答案3

您可以使用脚本来保持 systemd 的 glusterfs 服务的“已启动”状态,直到卷实际准备就绪。

systemctl edit glusterd.service

[Service]
ExecStartPost=/usr/local/sbin/glusterfs-wait

/usr/local/sbin/glusterfs-wait使用以下内容创建文件:

#!/bin/bash 
FAIL=1
until [ $FAIL -eq 0 ]; do
    gluster volume status all
    FAIL=$?
    test $FAIL -ne 0 && sleep 1
    done
exit 0

确保此文件是可执行的。

然后创建挂载覆盖,例如/mnt/storagemnt-storage.mount斜杠变成连字符。

systemctl edit mnt-storage.mount

如果这不起作用并且您刚刚添加了 fstab 条目,请重新加载 systemd 以让其看到更新(systemctl daemon-reload)。

[Unit]
After=glusterd.service
Wants=glusterd.service

相关内容