【検証】glusterfsでノードがダウンしても読み書きできるvolumeを作成

Created 2023年7月4日18:40
Updated 2023年7月4日18:49
Categories 自宅サーバー Linux

自宅サーバーで冗長構成を組むため、glusterfsについて検証を行いました。

満たしてほしい要件としては、

  • 3台構成
  • 1台ダウンしても読み込み・書き込みが問題なく行える

以上になります。エンプラ環境ならもっと色々検証すべきかもしれませんが、自宅サーバーの場合HVをメンテする際に最低限ダウンしなければOKかなという感じなのでこれでよしとしましたw

TL;DR

volumeを作る際にはreplicationモードを使いましょう。以下コマンドで作成できます。

gluster volume create vol_name replica 3 node1:/brick node2:/brick node3:brick

デフォルトだとdistribution(分散)モードになって1ノードでもダウンすると読み書きができなくなります。

環境

  • OS: debian 12
  • gluster: 10.3

proxmoxでVMを3台建てて実施しました。

インストール

sudo apt -y install glusterfs-server
sudo systemctl enable glusterd
sudo systemctl start glusterd

余談ですが、serverを入れるとglusterfs-clientも入ります。

peer追加

sakaki@node1:~$ sudo gluster peer probe node2.home
peer probe: success
sakaki@node1:~$ sudo gluster peer probe node3.home
peer probe: success
sakaki@node1:~$ sudo gluster peer status
Number of Peers: 2

Hostname: node2.home
Uuid: xxx
State: Peer in Cluster (Connected)

Hostname: node3.home
Uuid: xxx
State: Peer in Cluster (Connected)

volume作成

brickは/dev/sdb1をマウントして使っています。システムドライブを利用する場合、forceオプションの指定が必要です。

sakaki@node1:~$ sudo gluster volume create test replicas 3 \
    node1.home:/gluster/test \
    node2.home:/gluster/test \
    node3.home:/gluster/test
volume create: test: success: please start the volume to access data
sakaki@node1:~$ sudo gluster volume start test
volume start: test: success

確認

sakaki@node1:~$ sudo gluster volume info test

Volume Name: test
Type: Replicate
Volume ID: xxx
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1.home:/gluster/test
Brick2: node2.home:/gluster/test
Brick3: node3.home:/gluster/test
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

障害試験

まずはファイルの書き込み。

sakaki@node4:~$ mkdir test
sakaki@node4:~$ sudo mount -t glusterfs node1.home:/test ./test
sakaki@node4:~$ cd test/
sakaki@node4:~/test$ sudo touch test.txt
sakaki@node4:~/test$ ls
test.txt
sakaki@node4:~/test$ sudo nano test.txt
sakaki@node4:~/test$ cat test.txt
aaa

ここでおもむろにnode1を落とします。落ちたことが確認できたら、node4でファイルの確認をしてみます。

sakaki@node4:~/test$ ls
test.txt
sakaki@node4:~/test$ cat test.txt
aaa

ちゃんと読み込みはできていますね。では書き込んでみましょう。

sakaki@node4:~/test$ sudo nano test.txt
sakaki@node4:~/test$ cat test.txt
aaabbb

問題なく書き込めました。

ちなみにdistributionモードでvolumeを作ってしまうと、ダウンした際には

sakaki@node4:~/test$ touch test2.txt
touch: 'test2.txt' に touch できません: 入力/出力エラーです

といったエラーが出ました。

また、ホームディレクトリに戻ると

sakaki@node4:~$ ls
ls: 'test' にアクセスできません: 通信端点が接続されていません
test

のようなエラーが出ました。volumeを作る際はreplica 3のようにreplicationモードで作ることが大事ですね。

コメントを投稿

コメント