複数台のサーバー構成でサーバー間のストレージを共有するために弊社のCoreOS Container Linux環境ではNFS(Network File System)を使用していました。
NFSに問題があったというわけではないのですが、Fedora CoreOSへの移行をきっかけにレプリケーションが可能なGlusterファイルシステムへの切り替えを行いました。
弊社が行ったGlusterファイルシステムの導入手順を公開します。
共有ストレージの実体をホストサーバーに作成し、起動します。
1 2 |
sudo rpm-ostree install glusterfs-server sudo systemctl reboot |
1 2 |
sudo mkdir /var/gfsvolume sudo gluster volume create [volume名] transport tcp [host名]: /var/gfsvolume force |
1 2 |
sudo gluster volume start [volume名] sudo gluster volume status [volume名] |
3 4 5 6 7 8 9 10 |
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 |
サーバーを再起動するとTCP PortがN/Aになってしまいますので、systemdの起動サービスを作成します。
まず、GlusterFSボリュームの強制再起動スクリプトを作成します。
※作成ディレクトリやスクリプトファイル名は例です
1 2 3 4 5 6 7 8 9 10 11 |
#!/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 |
実行権限を付与します。
1 |
sudo chmod +x /usr/local/systemd/gluster-volume-start/ExecStart .sh |
systemdのサービスファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 |
[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 |
1 2 |
sudo systemctl enable gluster-volume-start.service sudo systemctl daemon-reload |
クライアントサーバー側でホストサーバーのGlusterFS共有ボリュームをマウントします。
1 2 |
sudo rpm-ostree install glusterfs-client sudo systemctl reboot |
systemdのマウントファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description = GlusterFS Volume Mount Requires = network-online.target After = network-online.target [Mount] What = [host名]:/[volume名] Type = glusterfs [Install] WantedBy = default.target |
systemdのマウントファイルを有効にしてマウントを実行します。
1 2 3 |
sudo systemctl enable var-glusterfs-volume. mount sudo systemctl daemon-reload sudo systemctl start var-glusterfs-volume. mount |
systemdマウントファイルのファイル名で指定される/var/glusterfs/volumeにホストサーバーのGlusterFS共有ボリュームがマウントされています。