目次

21 Glusterファイルシステム

複数台のサーバー構成でサーバー間のストレージを共有するために弊社のCoreOS Container Linux環境ではNFS(Network File System)を使用していました。

NFSに問題があったというわけではないのですが、Fedora CoreOSへの移行をきっかけにレプリケーションが可能なGlusterファイルシステムへの切り替えを行いました。

弊社が行ったGlusterファイルシステムの導入手順を公開します。

ホストサーバー

共有ストレージの実体をホストサーバーに作成し、起動します。

sudo rpm-ostree install glusterfs-server
sudo systemctl reboot

2行目
rpm-ostreeでインストールしたパッケージは再起動しなければ使用できません

sudo mkdir /var/gfsvolume
sudo gluster volume create [volume名] transport tcp [host名]:/var/gfsvolume force

1行目
ローカルのファイルシステム上に任意のディレクトリを作成します
2行目
[volume名]にはGlusterFSで使用する任意のボリューム名を指定します
[host名]にはホストサーバーのホスト名を指定します
[host名]の後、:に続けて1行目で作成したディレクトリを指定します
1行目で作成したディレクトリがルートパーティションの場合はforceの指定が必要です

sudo gluster volume start [volume名]
sudo gluster volume status [volume名]
Status of volume: [volume名]
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick [host名]:/var/gfsvolume               xxxxx     0          Y       xxxx

Task Status of Volume [volume名]
------------------------------------------------------------------------------
There are no active volume tasks

1行目、2行目
[volume名]createで指定した任意のボリューム名です

サーバーを再起動するとTCP PortがN/Aになってしまいますので、systemdの起動サービスを作成します。

まず、GlusterFSボリュームの強制再起動スクリプトを作成します。
※作成ディレクトリやスクリプトファイル名は例です

#!/bin/sh

for VOLUME in $(gluster volume list)
do
  while true
  do
    [ $(gluster volume status $VOLUME | sed -ne '/N\/A/p' | wc -l) -eq 0 ] && break
    sleep 5
    gluster volume start $VOLUME force
  done
done

実行権限を付与します。

sudo chmod +x /usr/local/systemd/gluster-volume-start/ExecStart.sh

systemdのサービスファイルを作成します。

[Unit]
Description = GlusterFS Volume Start Service
After       = glusterd.service
Requires    = glusterd.service

[Service]
Type            =  simple
ExecStart       =  /usr/local/systemd/gluster-volume-start/ExecStart.sh
RemainAfterExit =  yes

[Install]
WantedBy = default.target

最低限の設定内容を記載しています


再起動に実行されるようにサービスを有効にします。

sudo systemctl enable gluster-volume-start.service
sudo systemctl daemon-reload

クライアントサーバー

クライアントサーバー側でホストサーバーのGlusterFS共有ボリュームをマウントします。

sudo rpm-ostree install glusterfs-client
sudo systemctl reboot

2行目
rpm-ostreeでインストールしたパッケージは再起動しなければ使用できません

systemdのマウントファイルを作成します。

[Unit]
Description = GlusterFS Volume Mount
Requires    = network-online.target
After       = network-online.target

[Mount]
What = [host名]:/[volume名]
Type = glusterfs

[Install]
WantedBy = default.target

最低限の設定内容を記載しています
7行目
[host名]にはホストサーバーのホスト名を指定します
[volume名]にはホストサーバーで付けた任意のGlusterFSボリューム名を指定します

systemdのマウントファイルを有効にしてマウントを実行します。

sudo systemctl enable var-glusterfs-volume.mount
sudo systemctl daemon-reload
sudo systemctl start var-glusterfs-volume.mount

systemdマウントファイルのファイル名で指定される/var/glusterfs/volumeにホストサーバーのGlusterFS共有ボリュームがマウントされています。