書いてること
- GlusterFSとは
- GlusterFSで使われる用語
- Volume(ストレージ)タイプ
- 使ってみた
- 所感
- 参考
GlusterFSとは
- オープンソースの分散ファイルシステム
- VIPやMaster/Slaveといった概念は無し
- 複数サーバを束ねて1つのファイルシステムとして利用可能、専用のハードウェアを必要としない
- 例として、5台のCentOSサーバからそれぞれ20GBのディスク領域をGlusterFS用に提供し、100GBのストレージとして利用可能
- ストレージの追加/削除は動的に可能、ストレージに問題が発生した場合は自動フェイルオーバ機能が備わっている
- 中央集権的なmetadataサーバは不要、可用性とデータ保護性に優れていると言われている
- 基本的にはGlusterFSをマウントすることで利用可能だが、NFSマウントも可能、REST APIでもアクセス可能、 k8sとの相性も良い(k8sの公式ドキュメントでも紹介されている)
GlusterFSで使われる用語
- GlusterFS Server
- 複数のノードでGlusterFSクラスタ(Volume)を構築する
- 前述の通り、Master/Slaveは無い
- GlusterFS Client
- GlusterFS Serverで構築したVolumeを利用する
- Volumeをマウントすることで利用可能
- マウント先のノードがダウンしている場合、マウントは失敗するがマウントオプションで失敗時に別のマウント先を指定可能なのでフェイルオーバ可能
- Storage Pool
- GlusterFSクラスタに参加するサーバグループのこと
- Brick
- 個々のサーバのファイルシステムを指す
- ディレクトリと読み替えてもよい
- GlusterFSは各ノードの1つのブリックにつき1つのポートが使用される
- GlusterFSの分散ファイルシステム(Volume)に保存されたファイルは物理的にはBrick上に保存される
- Volume
- Brickを論理的に束ねたもの
- 1つのストレージとして利用可能
- GlusterFSストレージをクライアントから利用する場合はこのボリュームをマウントする
ここまでをまとめると以下のようなイメージになる
Volume(ストレージ)タイプ
-
Distributed Volume(分散ボリューム)
-
Replicated Volume(冗長ボリューム)
-
Striped Volume
動作検証(クイックスタートに沿って構築する)
環境情報
インストール(test02, test03)
# yum install glusterfs-server
# yum install centos-release-gluster
glusterfsの起動(test02, test03)
# systemctl enable glusterd
# systemctl start glusterd
# systemctl status glusterd
poolの設定(test02)
poolを組むいずれかのサーバから実施
# gluster peer probe 192.168.0.3
[root@test02 ~]# gluster peer probe 192.168.0.3
peer probe: success
poolの確認(test02, test03)
poolのリストとpeerの状態を確認する
# gluster pool list
# gluster peer status
[root@test02 ~]# gluster pool list
UUID Hostname State
2dc07656-b8e2-4908-b289-2ba193a752cc 192.168.0.3 Connected
5e338595-db0c-45e4-abe3-7f3b35471541 localhost Connected
[root@test03 ~]# gluster pool list
UUID Hostname State
5e338595-db0c-45e4-abe3-7f3b35471541 192.168.0.2 Connected
2dc07656-b8e2-4908-b289-2ba193a752cc localhost Connected
[root@test02 ~]# gluster peer status
Number of Peers: 1
Hostname: 192.168.0.3
Uuid: 2dc07656-b8e2-4908-b289-2ba193a752cc
State: Peer in Cluster (Connected)
[root@test03 ~]# gluster peer status
Number of Peers: 1
Hostname: 192.168.0.2
Uuid: 5e338595-db0c-45e4-abe3-7f3b35471541
State: Peer in Cluster (Connected)
パーティションの設定
# fdisk -l
# fdisk /dev/sdb
# fdisk -l
[root@test02 ~]# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009ef88
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 83886079 41942016 83 Linux
Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2312d135
Device Boot Start End Blocks Id System
/dev/sdb1 2048 2097151 1047552 83 Linux
Brickのフォーマットとマウント
ファイルシステムを作成
# mkfs.xfs -i size=512 /dev/sdb1
Brickの領域をmkdirで作成
# mkdir -p /bricks/brick1
fstabへ反映
# vi /etc/fstab
/dev/sdb1 /bricks/brick1 xfs defaults 1 2
mountする
# mount -a && mount
# mount | grep /dev/sd
[root@test02 ~]# mount | grep /dev/sd
/dev/sda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb1 on /bricks/brick1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
volumeのセットアップ
適当なディレクトリを作成
# mkdir /bricks/brick1/gv0
Volumeを作成する
なおvolumeを構築するサーバは、localhost/127.0.0.1/ループバックアドレスの指定は不可
IPアドレスかホスト名にすること
2ノードだとスプリットブレインが起きやすいから3ノードを推奨されてるがここでは一旦無視する
# gluster volume create gv0 replica 2 192.168.0.2:/bricks/brick1/gv0 192.168.0.3:/bricks/brick1/gv0
[root@test02 ~]# gluster volume create gv0 replica 2 192.168.0.2:/bricks/brick1/gv0 192.168.0.3:/bricks/brick1/gv0
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?
(y/n) y
volume create: gv0: success: please start the volume to access data
構築したVolumeの状態を確認
Volume名、Volumeタイプ、Brickの数、Brickの情報などが確認可能
なお、Volumeが作成できない場合は/var/log/glusterfs配下に吐かれるログを確認する
Status: Createdとなっており、まだ利用はできない
# gluster volume info
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 450c3b9a-ce18-4573-b70b-a047aecb4c43
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
StatusがCreatedなのでスタートする
# gluster volume start gv0
[root@test02 ~]# gluster volume start gv0
volume start: gv0: success
Volumeの状態を確認しStatusがStartedであることを確認する
# gluster volume info
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 450c3b9a-ce18-4573-b70b-a047aecb4c43
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
GlusterFS volumeのテスト
- 以下のイメージのようにvolume上に作成したファイルが各Brickでreplicaされることを確認する
test01からglustefs volumeをmountする
# mount -t glusterfs 192.168.0.2:/gv0 /mnt
[root@test01 ~]# mount -t glusterfs 192.168.0.2:/gv0 /mnt
mountできたことを確認する
# mount | grep mnt
[root@test01 ~]# mount | grep mnt
192.168.0.2:/gv0 on /mnt type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
dfコマンドで確認するとReplicateTypeなので2GBではなく1GBの領域がマウントされている
# df -h
[root@test01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 4.3G 36G 11% /
devtmpfs 237M 0 237M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000
192.168.0.2:/gv0 1020M 43M 978M 5% /mnt
マウントしている領域にファイルを100個作成する
# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
[root@test01 ~]# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
client側の確認
# ll /mnt
# ll /mnt/copy-test-* | wc -l
[root@test01 ~]# ll /mnt/
(略)
[root@test01 ~]# ll /mnt/copy-test-* | wc -l
100
server側の確認
# ll /bricks/brick1/gv0/
# ll /bricks/brick1/gv0/copy-test-* | wc -l
[root@test02 ~]# ll /bricks/brick1/gv0/
(略)
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
100
[root@test03 ~]# ll /bricks/brick1/gv0/
(略)
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
100
動作検証
ファイル削除時の挙動
- 以下を検証
- クライアント側でのファイル削除
- サーバ側でのファイル削除
クライアント側でのファイル削除
test01でファイルを削除
[root@test01 ~]# rm /mnt/copy-test-001
rm: remove regular file ‘/mnt/copy-test-001’? yes
[root@test01 ~]# ll /mnt/copy-test-001
ls: cannot access /mnt/copy-test-001: No such file or directory
すぐにteswt02, test03でも削除される
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-001
ls: cannot access /bricks/brick1/gv0/copy-test-001: No such file or directory
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-001
ls: cannot access /bricks/brick1/gv0/copy-test-001: No such file or directory
/var/log/glusterfs配下のログへの書き込みはなし
サーバ側でのファイル削除
test02からファイルを1つ削除してみる
[root@test02 ~]# rm /bricks/brick1/gv0/copy-test-001
rm: remove regular file ‘/bricks/brick1/gv0/copy-test-001’? yes
削除されたことを確認
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-001
ls: cannot access /bricks/brick1/gv0/copy-test-001: No such file or directory
test03でファイルが存在することを確認する
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-001
-rw-------. 2 root root 246800 Feb 15 10:01 /bricks/brick1/gv0/copy-test-001
test01からファイルは問題なく確認できる
[root@test01 ~]# ll /mnt/copy-test-001
-rw-------. 1 root root 246800 Feb 15 10:01 /mnt/copy-test-001
test02でファイルが復活している
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-001
-rw-------. 2 root root 246800 Feb 15 10:01 /bricks/brick1/gv0/copy-test-001
各サーバのログを確認したがtest02で以下の1行が存在するだけだった
MSGIDで検索したけど見当たらなかった
[root@test02 ~]# cat /var/log/glusterfs/bricks/bricks-brick1-gv0.log
[2022-02-15 10:28:15.103541 +0000] W [MSGID: 113093] [posix-entry-ops.c:373:posix_set_gfid2path_xattr] 0-gv0-posix: setting gfid2path xattr failed on /bricks/brick1/gv0/copy-test-001: key = trusted.gfid2path.2f98ab7942e13969 [File exists]
障害からの復旧
- サーバを1台再起動させたときの挙動を確認する
test02のshutdown前の状態
[root@test03 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 450c3b9a-ce18-4573-b70b-a047aecb4c43
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
test02をシャットダウン
[root@test02 ~]# shutdown -h now
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.
poolとpeerの状態
[root@test03 ~]# gluster pool list
UUID Hostname State
5e338595-db0c-45e4-abe3-7f3b35471541 192.168.0.2 Disconnected
2dc07656-b8e2-4908-b289-2ba193a752cc localhost Connected
[root@test03 ~]# gluster peer status
Number of Peers: 1
Hostname: 192.168.0.2
Uuid: 5e338595-db0c-45e4-abe3-7f3b35471541
State: Peer in Cluster (Disconnected)
volumeの状態
[root@test03 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 450c3b9a-ce18-4573-b70b-a047aecb4c43
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
クライアントからglusterfsへのアクセスは可能
[root@test01 ~]# ll /mnt/copy-test-* | wc -l
99
test02起動後
[root@test03 ~]# gluster pool list
UUID Hostname State
5e338595-db0c-45e4-abe3-7f3b35471541 192.168.0.2 Connected
2dc07656-b8e2-4908-b289-2ba193a752cc localhost Connected
[root@test03 ~]# gluster peer status
Number of Peers: 1
Hostname: 192.168.0.2
Uuid: 5e338595-db0c-45e4-abe3-7f3b35471541
State: Peer in Cluster (Connected)
volumeの削除
volumeを停止する
データにアクセスできなるけどって警告が出る
# gluster volume stop gv0
[root@test02 ~]# gluster volume stop gv0
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gv0: success
volumeの状態確認
Statusがstoppedになっている
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 450c3b9a-ce18-4573-b70b-a047aecb4c43
Status: Stopped
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
クライアントからはアクセスできなくなってる
[root@test01 ~]# ll /mnt
ls: cannot access /mnt: Transport endpoint is not connected
アンマウントする
[root@test01 ~]# umount /mnt
volumeの削除
[root@test02 ~]# gluster volume delete gv0
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: gv0: success
削除されたことを確認
[root@test02 ~]# gluster volume info
No volumes present
brick配下は削除されない
[root@test02 ~]# ll /bricks/brick1/gv0/
total 24156
-rw-------. 2 root root 246800 Feb 15 10:01 copy-test-002
-rw-------. 2 root root 246800 Feb 15 10:01 copy-test-003
(略)
volumeを別のタイプ(Distribute)で作成する
デフォルトがdistributeタイプなのでVolume作成してみる
# gluster volume create gv0 192.168.0.2:/bricks/brick1/gv0 192.168.0.3:/bricks/brick1/gv0
[root@test02 ~]# gluster volume create gv0 192.168.0.2:/bricks/brick1/gv0 192.168.0.3:/bricks/brick1/gv0
volume create: gv0: failed: /bricks/brick1/gv0 is already part of a volume
怒られたので、各Gluster FS serverのBrick配下のデータを削除する
[root@test02 ~]# ll -a /bricks/brick1/gv0/
total 0
drwxr-xr-x. 3 root root 24 Feb 17 09:37 .
drwxr-xr-x. 3 root root 17 Feb 17 09:37 ..
drw-------. 2 root root 6 Feb 17 09:37 .glusterfs
[root@test02 ~]# rm -rf /bricks/brick1/gv0/.glusterfs
再度作成する
[root@test02 ~]# gluster volume create gv0 192.168.0.2:/bricks/brick1/gv0 192.168.0.3:/bricks/brick1/gv0
volume create: gv0: success: please start the volume to access data
Statusがcreatedで作成
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Distribute
Volume ID: 6d29c78f-4dac-4738-82d1-d1b37d77abd2
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
volumeをスタートする
[root@test02 ~]# gluster volume start gv0
volume start: gv0: success
Distributeタイプでstartedであることを確認
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Distribute
Volume ID: 6d29c78f-4dac-4738-82d1-d1b37d77abd2
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
test01からglustefs volumeをmountする
[root@test01 ~]# mount -t glusterfs 192.168.0.2:/gv0 /mnt
mountされていることを確認する
[root@test01 ~]# mount | grep mnt
192.168.0.2:/gv0 on /mnt type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
DistributeタイプなのでReplicateタイプと異なり総容量が2GBになっている
[root@test01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 4.3G 36G 11% /
devtmpfs 237M 0 237M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.6M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000
192.168.0.2:/gv0 2.0G 86M 2.0G 5% /mnt
tmpfs 49M 0 49M 0% /run/user/0
動作確認
- 以下のイメージのようにvolume上に作成したファイルが各Brickで分散されることを確認する
マウントしている領域にファイルを100個作成する
# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
[root@test01 ~]# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
client側の確認
# ll /mnt
# ll /mnt/copy-test-* | wc -l
[root@test01 ~]# ll /mnt/
(略)
[root@test01 ~]# ll /mnt/copy-test-* | wc -l
100
server側の確認
# ll /bricks/brick1/gv0/
# ll /bricks/brick1/gv0/copy-test-* | wc -l
[root@test02 ~]# ll /bricks/brick1/gv0/
total 600
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-001
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-004
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-006
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-008
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-011
(略)
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
50
[root@test03 ~]# ll /bricks/brick1/gv0/
total 600
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-002
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-003
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-005
-rw-------. 2 root root 8224 Feb 24 06:19 copy-test-007
(略)
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
50
volumeにBrickを追加
- 試しにtest02の/tmp配下にディレクトリを作成し、volumeに追加してみる
ディレクトリ作成
# mkdir -p /tmp/bricks/gv0
追加前のvolume情報
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Distribute
Volume ID: 6d29c78f-4dac-4738-82d1-d1b37d77abd2
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
Brickの追加
# gluster volume add-brick gv0 192.168.0.2:/tmp/bricks/gv0
[root@test02 ~]# gluster volume add-brick gv0 192.168.0.2:/tmp/bricks/gv0
volume add-brick: failed: The brick 192.168.0.2:/tmp/bricks/gv0 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.
rootボリュームは警告が出るためforceオプションで実施(動的に追加可能なことを確認するため)
特に再起動コマンドなどは不要
[root@test02 ~]# gluster volume add-brick gv0 192.168.0.2:/tmp/bricks/gv0 force
volume add-brick: success
追加後のvolume情報
[root@test02 ~]# gluster volume info
Volume Name: gv0
Type: Distribute
Volume ID: 6d29c78f-4dac-4738-82d1-d1b37d77abd2
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: 192.168.0.2:/bricks/brick1/gv0
Brick2: 192.168.0.3:/bricks/brick1/gv0
Brick3: 192.168.0.2:/tmp/bricks/gv0
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
クライアント側でdfコマンドを実施して総容量が2GBから42GBまで増えていることを確認
[root@test01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 4.3G 36G 11% /
devtmpfs 237M 0 237M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000
192.168.0.2:/gv0 42G 4.9G 38G 12% /mnt
リバランス
- ファイル数が偏っているためリバランス可能か確認する
- 公式ドキュメントに記載されているがリバランスには以下の2つの意味がある
- Fix Layout
- 新しいボリュームトポロジーを利用可能となるようにレイアウトを修正、新しく追加されたノードにファイルを保存/分散できるようにする
- Fix Layout and Migrate Data
- 新しいボリュームトポロジーを利用可能となるようにレイアウトを修正、既存のデータを移行しボリュームをリバランスする
- Fix Layout
- 今回は既存のデータ移行まで実施する
リバランス前
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
50
[root@test02 ~]# ll /tmp/bricks/gv0/copy-test-* | wc -l
ls: cannot access /tmp/bricks/gv0/copy-test-*: No such file or directory
0
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
50
リバランスする
# gluster volume rebalance gv0 start
[root@test02 ~]# gluster volume rebalance gv0 start
volume rebalance: gv0: success: Rebalance on gv0 has been started successfully. Use rebalance status command to check status of the rebalance process.
ID: 14eb7433-10df-401a-bd88-446787296ef8
ステータス確認
[root@test02 ~]# gluster volume rebalance gv0 status
Node Rebalanced-files size scanned failures skipped status run time in h:m:s
--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------
192.168.0.3 0 0Bytes 49 0 48 completed 0:00:00
localhost 0 0Bytes 148 0 49 completed 0:00:00
volume rebalance: gv0: success
リバランス後
なぜか総ファイル数が197になっている?リバランスするコマンドを間違えた?
[root@test02 ~]# ll /tmp/bricks/gv0/copy-test-* | wc -l
97
[root@test02 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
51
[root@test03 ~]# ll /bricks/brick1/gv0/copy-test-* | wc -l
49
試しに別のファイルを100ファイル作成する
[root@test01 ~]# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/file-test-$i; done
[root@test01 ~]# ll /mnt/file-test-* | wc -l
100
一番容量の大きなBrickに多くのファイルが格納されている
[root@test02 ~]# ll /bricks/brick1/gv0/file-test-* | wc -l
1
[root@test02 ~]# ll /tmp/bricks/gv0/file-test-* | wc -l
97
[root@test03 ~]# ll /bricks/brick1/gv0/file-test-* | wc -l
2
test03をshutdownしてファイルにアクセスできないことを試す
test03に格納されているファイル一覧を確認
[root@test03 ~]# ll /bricks/brick1/gv0/file-test-0*
-rw-------. 2 root root 8509 Feb 24 07:01 /bricks/brick1/gv0/file-test-009
-rw-------. 2 root root 8509 Feb 24 07:01 /bricks/brick1/gv0/file-test-096
シャットダウンする
[root@test03 ~]# shutdown -h now
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.
クライアント側から見えるファイル数が98に減っている
[root@test01 ~]# ll /mnt/file-test-* | wc -l
98
見えなくなったのはtest03に格納されていた以下の2ファイル
[root@test01 ~]# ll /mnt/file-test-009
ls: cannot access /mnt/file-test-009: No such file or directory
[root@test01 ~]# ll /mnt/file-test-096
ls: cannot access /mnt/file-test-096: No such file or directory
test03が起動後は問題なくファイルを確認可能
[root@test01 ~]# ll /mnt/file-test-* | wc -l
100
[root@test01 ~]# ll /mnt/file-test-009
-rw-------. 1 root root 8509 Feb 24 07:01 /mnt/file-test-009
[root@test01 ~]# ll /mnt/file-test-096
-rw-------. 1 root root 8509 Feb 24 07:01 /mnt/file-test-096
所感
- 簡単にファイルシステムが構築できるため、初心者でもとっつきやすいと感じました
- 無停止で拡張/縮小できるため、動的にリソースを変更可能なクラウド環境との相性も良いと感じました
- Volumeタイプもハイブリッドでの利用が可能なので、ファイルの性質(消えても良い)と環境の性質に合わせて構築できる点も魅力的です
- バッチ処理の中間ファイルは一時的な容量が欲しいからDistributed Volumeを利用
- ユーザからのアップロードファイルなどはReplicated Volumeを利用など
- リバランスは課題
- リバランスのポリシーを調べたけど、調べ方が悪かったのかヒットせず....時間があるときに調査したい
参考
- 公式ドキュメント
https://docs.gluster.org/en/latest/
以上