はじめに
サーバ間の同期には rsync/lsyncd を使った方法がよく知られていますが、rsync/lsyncd はディレクトリの変更を検出して差分を同期するシステムなので、必ず同じデータになっていることは保証されません。
一方で、GlusterFS では自動的にデータを同期してくれるので、サーバ間のデータに差分があることを心配する必要がなく楽に運用できます。
本記事では GlusterFS の自体の説明はしませんので別の記事をご参照ください m(__)m
GlusterFS で出てくる用語
GlusterFS には「ブリック」という特有の単位が存在します。ブリックは、サーバ上のディレクトリのことで、GlusterFS は複数のブリックを束ねることで1つのボリュームを作ります。
GlusterFS のボリュームにはいくつかのタイプがあります。例えば、Replicated
タイプにすると、データを複数のサーバにコピーし冗長性を確保します(Raid 1 みたいな感じです)。他にも、Distributed
タイプにすると、データを複数のサーバに分散して保存するようになります。
その他のボリュームタイムはこちらをご参照ください。
環境
IP Address | OS | |
---|---|---|
server01 | 192.168.1.11 | Ubuntu24.04 |
server02 | 192.168.1.12 | Ubuntu24.04 |
構築
構築するシステムは下図のような構成なります。
- 各サーバの
/opt/brick0
ディレクトリをブリックにして GlusterFS のボリュームvol0
を作る -
vol0
を各サーバの/opt/app/data
にマウントする- 各サーバのアプリケーション
app
は、/opt/app/data
のデータを読み書きする
- 各サーバのアプリケーション
前準備
server01,02 で GlusterFS のインストールとブリック用のディレクトリ /opt/brick0
を作ります。
sudo apt install glusterfs-server
sudo systemctl start glusterd
sudo mkdir /opt/brick0
ピアの設定とボリュームの作成
どちらかのサーバでピアの設定とボリュームを作ります。どちらでもよいので、今回は server01 で実施します。
ピア(server02)との疎通を開始
sudo gluster peer probe 192.168.1.12
# peer probe: success
server01,02 のブリックからボリューム vol0 を作成
sudo gluster volume create vol0 replica 2 192.168.1.11:/opt/brick0 192.168.1.12:/opt/brick0 force
# volume create: vol0: success: please start the volume to access data
ボリュームの提供を開始
sudo gluster volume start vol0
# volume start: vol0: success
マウント
各サーバでGlusterFSのボリュームをマウントします。
# @server01
sudo mount -t glusterfs 192.168.1.11:/vol0 /opt/app/data
# @server02
sudo mount -t glusterfs 192.168.1.12:/vol0 /opt/app/data
マウントの確認
# @server01
df -h /opt/app/data
# Filesystem Size Used Avail Use% Mounted on
# 192.168.1.11:/vol0 8.7G 1.8G 6.9G 21% /opt/app/data
# @server02
df -h /opt/app/data
# Filesystem Size Used Avail Use% Mounted on
# 192.168.1.12:/vol0 8.7G 1.8G 6.9G 21% /opt/app/data
これで、各サーバの /opt/app/data
に書き込まれたデータが同期されるようになりました!
サーバが壊れた際の復旧
どちらかのサーバが壊れた時に、復旧する方法について紹介したいと思います。今回は server01 が壊れた事を想定します。
まず、生きているサーバ(今回は server02 )から、server01 のブリックをボリュームから取り外してreplica数を1に設定します。
sudo gluster volume remove-brick vol0 replica 1 192.168.1.11:/opt/brick0 force
# Remove-brick force will not migrate files from the removed bricks, so they will no longer be available on the volume.
# Do you want to continue? (y/n) y
# volume remove-brick commit force: success
次に server02 から server01 をピアから切り離します。
sudo gluster peer detach 192.168.1.11
# All clients mounted through the peer which is getting detached need to be remounted using one of the other active peers in the trusted storage pool to ensure client gets notification on any changes done on the gluster configuration and if the same has been done do you want to proceed? (y/n) y
# peer detach: success
最後に、server02 からピアリングして、ボリュームに server01 のブリックを追加します。
sudo gluster peer probe 192.168.1.11
# peer probe: success
sudo gluster volume add-brick vol0 replica 2 192.168.1.11:/opt/brick0 force
# volume add-brick: success
おわりに
GlusterFS を使うことで手軽に冗長構成を取ることができました。一般的には、GlusterFS 専用のサーバを3台以上用意してボリュームを作り、別のサーバがマウントする形となりますが、今回のようにサーバ2台だけで冗長構成を作ることもできます。