Created 2023年7月4日18:40
Updated 2023年7月4日18:49
Categories
自宅サーバー
Linux
自宅サーバーで冗長構成を組むため、glusterfsについて検証を行いました。
満たしてほしい要件としては、
以上になります。エンプラ環境ならもっと色々検証すべきかもしれませんが、自宅サーバーの場合HVをメンテする際に最低限ダウンしなければOKかなという感じなのでこれでよしとしましたw
volumeを作る際にはreplicationモードを使いましょう。以下コマンドで作成できます。
gluster volume create vol_name replica 3 node1:/brick node2:/brick node3:brick
デフォルトだとdistribution(分散)モードになって1ノードでもダウンすると読み書きができなくなります。
proxmoxでVMを3台建てて実施しました。
sudo apt -y install glusterfs-server
sudo systemctl enable glusterd
sudo systemctl start glusterd
余談ですが、serverを入れるとglusterfs-client
も入ります。
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)
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モードで作ることが大事ですね。