複数台のサーバー構成でサーバー間のストレージを共有するために弊社のCoreOS Container Linux環境ではNFS(Network File System)を使用していました。
NFSに問題があったというわけではないのですが、Fedora CoreOSへの移行をきっかけにレプリケーションが可能なGlusterファイルシステムへの切り替えを行いました。
弊社が行ったGlusterファイルシステムの導入手順を公開します。
共有ストレージの実体をホストサーバーに作成し、起動します。
sudo rpm-ostree install glusterfs-server sudo systemctl reboot
sudo mkdir /var/gfsvolume sudo gluster volume create [volume名] transport tcp [host名]:/var/gfsvolume 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
サーバーを再起動すると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
systemdのマウントファイルを作成します。
[Unit] Description = GlusterFS Volume Mount Requires = network-online.target After = network-online.target [Mount] What = [host名]:/[volume名] Type = glusterfs [Install] WantedBy = default.target
systemdのマウントファイルを有効にしてマウントを実行します。
sudo systemctl enable var-glusterfs-volume.mount sudo systemctl daemon-reload sudo systemctl start var-glusterfs-volume.mount
systemdマウントファイルのファイル名で指定される/var/glusterfs/volumeにホストサーバーのGlusterFS共有ボリュームがマウントされています。