サーバーのペアでgluserfsを構成しましたが、これをクライアントマシンにマウントできます。また、両方のマシンをオフラインにして最初から起動するときに、ブート時に両方のglusterfsサーバーにglusterfsファイルシステムをマウントできるようにしたいと考えています。
これらのサーバーは、pacemakerを使用してクラスターとしてセットアップされます。共有データベースに加えて、pacemakerはglusterファイルシステムのマウント元となる仮想IPアドレスも提供しています。
次のコマンドを使用して、両方のサーバーが起動した後、ファイルシステムを手動でそれぞれにマウントできます。
mount -t glusterfs nodea:/gv0 /data
それは素晴らしいです。しかし、これは起動時に自動的に行われるようにします。
だから私はfstabにエントリを追加しようとしました:
nodea:/gv0 /data glusterfs _netdev 0 0
これは、クラスターの稼働後に「mount -a」コマンドを実行すると機能します。ただし、起動時には機能しません。 (これは、クライアントマシンがブート時にglusterfsをマウントする方法ですが、クラスターは稼働中です。したがって、もちろんそれらはブートで機能します。)
ブート時にglusterfsのマウントを処理するsystemdユニットファイルの作成も試みました。私のユニットファイルは「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
繰り返しますが、これは、コマンド「systemctl start data.mount」を実行して、両方のサーバーが稼働しているときに機能します。また、クラスター内のマシンの1つだけを再起動した場合にも機能します。ただし、両方のサーバーの再起動では機能しません。
クラスター内の両方のノードがダウンした場合、または何らかの理由で両方を同時に再起動したい場合は、両方のマシンが再起動したときに、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をマウントして、実際にマウントされていることを確認する他の方法はありますか?
必要なときにsystemdを自動マウントできるはずです。起動時のUbuntu 16.04のマウントにも問題がありました。 このメッセージ に基づいて追加しましたnoauto,x-systemd.automount
からfstab
行へ:
gluster1:/volume1 /storage-pool glusterfs defaults,_netdev,noauto,x-systemd.automount 0 0
アプリサーバーを数回再起動し、すべて正常にマウントしました。これもお役に立てば幸いです。
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 daemon-reload
systemctl enable glusterfsmounts
そして再起動...これまでのところ私にとって最高/安定でした
スクリプトを使用して、ボリュームが実際に準備ができるまで、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/storage
の場合、mnt-storage.mount
になります。スラッシュはハイフンになります。
systemctl edit mnt-storage.mount
これが機能せず、fstabエントリーを追加しただけの場合は、systemdを再ロードして、更新(systemctl daemon-reload
)を認識させます。
[Unit]
After=glusterd.service
Wants=glusterd.service