GlusterFSクラスタ構築と運用ガイド

環境構成

今回は3台のサーバーでGlusterFSクラスタを構築し、Dockerボリュームプラグインとして利用します。各ノードの役割とIPアドレスは以下の通りです。

  • マスターノード: 192.168.1.10 (gfs-master)
  • ワーカーノード1: 192.168.1.11 (gfs-node01)
  • ワーカーノード2: 192.168.1.12 (gfs-node02)
  • クライアント: 192.168.1.100 (client01)

全てのノードでhostsファイルに以下のエントリを追加します。

192.168.1.10 gfs-master
192.168.1.11 gfs-node01
192.168.1.12 gfs-node02

インストール手順

CentOS 7/8環境へのインストールはyumリポジトリ経由で簡単に行えます。3台全てのサーバーで以下のコマンドを実行してください。

yum install -y centos-release-gluster
yum install -y glusterfs-server glusterfs-fuse glusterfs-rdma

クラスタ設定

インストール完了後、各ノードでglusterdサービスを起動し、自動起動を有効化します。

systemctl start glusterd
systemctl enable glusterd

マスターノード(gfs-master)から他のノードをクラスタに参加させます。

[root@gfs-master ~]# gluster peer probe gfs-node01
peer probe: success.

[root@gfs-master ~]# gluster peer probe gfs-node02
peer probe: success.

[root@gfs-master ~]# gluster peer status
Number of Peers: 2

Hostname: gfs-node01
Uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
State: Peer in Cluster (Connected)

Hostname: gfs-node02
Uuid: b2c3d4e5-f6g7-8901-bcde-f23456789012
State: Peer in Cluster (Connected)

ボリューム作成準備

各ノードにストレージ用ディレクトリを作成します。

[root@gfs-master ~]# mkdir -p /data/gluster/brick0
[root@gfs-node01 ~]# mkdir -p /data/gluster/brick0
[root@gfs-node02 ~]# mkdir -p /data/gluster/brick0

レプリケーションボリュームの作成

3台のサーバーでレプリケーションボリュームを作成します。ボリューム名は「gv0」とします。

[root@gfs-master ~]# gluster volume create gv0 replica 3 gfs-master:/data/gluster/brick0 gfs-node01:/data/gluster/brick0 gfs-node02:/data/gluster/brick0 force
volume create: gv0: success: please start the volume to access data

作成したボリュームを確認します。

[root@gfs-master ~]# gluster volume info gv0

Volume Name: gv0
Type: Replicate
Volume ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Status: Created
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: gfs-master:/data/gluster/brick0
Brick2: gfs-node01:/data/gluster/brick0
Brick3: gfs-node02:/data/gluster/brick0

ボリュームを起動します。

[root@gfs-master ~]# gluster volume start gv0
volume start: gv0: success

GlusterFSボリュームタイプの種類

GlusterFSでは7種類のボリュームタイプを利用できます。それぞれの特徴を解説します。

1. 分散ボリューム (DHT)

デフォルトのモードで、ファイルをハッシュアルゴリズムでランダムに分散配置します。

gluster volume create vol_dht gfs-master:/export/brick1 gfs-node01:/export/brick1

2. レプリケーションボリューム (AFR)

replicaパラメータで指定した数だけファイルを複製します。

gluster volume create vol_replica replica 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1

3. ストライピングボリューム

stripeパラメータでファイルを分割して複数ノードに配置します(RAID 0のような動作)。

gluster volume create vol_stripe stripe 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1

4. 分散レプリケーションボリューム

分散とレプリケーションを組み合わせたタイプ。最低4台のサーバーが必要です。

gluster volume create vol_dht_replica replica 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1 gfs-node02:/export/brick2 gfs-node03:/export/brick2

5. 分散ストライピングボリューム

分散とストライピングを組み合わせたタイプ。最低4台のサーバーが必要です。

gluster volume create vol_dht_stripe stripe 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1 gfs-node02:/export/brick2 gfs-node03:/export/brick2

6. ストライプリプリケーションボリューム

ストライピングとレプリケーションを組み合わせたタイプ。最低4台のサーバーが必要です。

gluster volume create vol_stripe_replica stripe 2 replica 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1 gfs-node02:/export/brick2 gfs-node03:/export/brick2

7. 分散ストライプリプリケーションボリューム

3つの機能を組み合わせたタイプ。最低8台のサーバーが必要です。

gluster volume create vol_all stripe 2 replica 2 transport tcp gfs-master:/export/brick1 gfs-node01:/export/brick1 gfs-node02:/export/brick2 gfs-node03:/export/brick2 gfs-node04:/export/brick3 gfs-node05:/export/brick3 gfs-node06:/export/brick4 gfs-node07:/export/brick4

パフォーマンスチューニング

ボリュームのパフォーマンスを最適化するための設定例です。

# クォータ機能の有効化
gluster volume quota gv0 enable

# ルートディレクトリの使用容量制限を80GBに設定
gluster volume quota gv0 limit-usage / 80GB

# 読み取りキャッシュサイズを4GBに設定
gluster volume set gv0 performance.cache-size 4GB

# 非同期書き込みを有効化
gluster volume set gv0 performance.flush-behind on

# I/Oスレッド数を32に設定
gluster volume set gv0 performance.io-thread-count 32

# ライトバックキャッシュを有効化
gluster volume set gv0 performance.write-behind on

クライアント環境の構築

クライアントマシン(client01)でGlusterFSをマウントします。まず必要なパッケージをインストールします。

[root@client01 ~]# yum install -y glusterfs-fuse
[root@client01 ~]# mkdir -p /mnt/gluster
[root@client01 ~]# mount -t glusterfs gfs-master:gv0 /mnt/gluster

マウントを確認します。

[root@client01 ~]# df -h | grep gluster
gfs-master:gv0  441G   18G  424G   4% /mnt/gluster

パフォーマンステスト

各ボリュームタイプのパフォーマンスをddコマンドでテストします。

分散ボリュームでのテスト

[root@client01 ~]# dd if=/dev/zero of=/mnt/gluster/test1.img bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB) copied, 8.5 s, 126 MB/s

レプリケーションボリュームでのテスト

[root@client01 ~]# dd if=/dev/zero of=/mnt/gluster/test2.img bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB) copied, 25.2 s, 42.6 MB/s

ストライピングボリュームでのテスト

[root@client01 ~]# dd if=/dev/zero of=/mnt/gluster/test3.img bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB) copied, 8.3 s, 129 MB/s

分散レプリケーションボリュームでのテスト

[root@client01 ~]# dd if=/dev/zero of=/mnt/gluster/test4.img bs=100M count=10 oflag=direct
1048576000 bytes (1.0 GB) copied, 16.8 s, 62.4 MB/s

fioを使用した詳細テスト

4Kランダム書き込みテスト:

[root@client01 ~]# fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=10G -filename=/mnt/gluster/randwrite.test -name="GlusterFS 4K Random Write" -iodepth=32 -runtime=60

4Kランダム読み取りテスト:

[root@client01 ~]# fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -size=10G -filename=/mnt/gluster/randread.test -name="GlusterFS 4K Random Read" -iodepth=8 -runtime=60

運用管理コマンド

ボリュームの一覧表示

[root@gfs-master ~]# gluster volume list

ボリュームの削除

[root@gfs-master ~]# gluster volume stop gv0
[root@gfs-master ~]# gluster volume delete gv0

削除後は各brick内の.glusterfsと.trashcanディレクトリを手動で削除する必要があります。

ノードの切り離し

[root@gfs-master ~]# gluster peer detach gfs-node02

アクセス制御

[root@gfs-master ~]# gluster volume set gv0 auth.allow 192.168.1.*,10.0.0.*

ボリュームの拡張

[root@gfs-master ~]# gluster peer probe gfs-node03
[root@gfs-master ~]# gluster volume add-brick gv0 gfs-node03:/data/gluster/brick0

ボリュームの縮小

データ移行を伴う縮小:

[root@gfs-master ~]# gluster volume remove-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 start
[root@gfs-master ~]# gluster volume remove-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 status

データ移行なしの即時削除:

[root@gfs-master ~]# gluster volume remove-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 commit

Brickの置換

[root@gfs-master ~]# gluster volume replace-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 start
[root@gfs-master ~]# gluster volume replace-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 status
[root@gfs-master ~]# gluster volume replace-brick gv0 gfs-node02:/data/gluster/brick0 gfs-node03:/data/gluster/brick0 commit

リバランシング

[root@gfs-master ~]# gluster volume rebalance gv0 start
[root@gfs-master ~]# gluster volume rebalance gv0 status
[root@gfs-master ~]# gluster volume rebalance gv0 stop

分散レプリケーションボリュームのベストプラクティス

分散レプリケーションボリュームを構築する際の注意点:

  • Brickサーバーの数はレプリカ数の倍数である必要があります
  • サーバーリストの順番に従って、隣接するサーバー同士がレプリカを形成します

例: 8台のサーバーでレプリカ数2の場合、サーバー1-2、3-4、5-6、7-8のペアがレプリカになります。レプリカ数4の場合、サーバー1-4、5-8のグループがレプリカになります。

最適化パラメータ

主要なパフォーマンス関連パラメータ一覧:

パラメータ説明デフォルト値
auth.allowIPアクセス制御*(全許可)
cluster.min-free-disk最小空きディスク容量閾値10%
performance.cache-size読み取りキャッシュサイズ32MB
performance.io-thread-countI/Oスレッド数16
performance.write-behindライトバックキャッシュon
nfs.disabledNFSサービス無効化off

監視とメンテナンス

日常的な監視項目:

# ノード状態の確認
gluster peer status

# ボリューム状態の確認
gluster volume status gv0

# ヘルスチェックと修復
gluster volume heal gv0 full
gluster volume heal gv0 info
gluster volume heal gv0 info healed
gluster volume heal gv0 info split-brain

# クォータ情報の確認
gluster volume quota gv0 list

障害対応手順

ディスク障害

RAID構成がある場合はディスク交換後に自動同期されます。RAIDがない場合は、当該brickをボリュームから削除し、新しいディスクで再追加します。

サーバー障害

同一スペックの代替サーバーを準備し、以下の手順で復旧します:

  1. IPアドレスとホスト名を元サーバーと同じに設定
  2. GlusterFSを同じバージョンでインストール
  3. 障害サーバーのUUIDを確認(他の健全ノードで「gluster peer status」実行)
  4. 新サーバーの/var/lib/glusterd/glusterd.infoを障害サーバーのUUIDで更新
  5. クラスターに参加させる
  6. データ同期を実行: gluster volume heal gv0 full

企業での活用シーン

GlusterFSは以下のような用途に最適です:

  • 大容量ファイルのストレージ(動画、画像、バックアップデータ)
  • クラウドストレージ基盤
  • 仮想化環境の共有ストレージ
  • HPC(高性能計算)のストレージ層
  • ログデータの長期保管

なお、小ファイル(特に数百万以上)の取り扱いはパフォーマンスが低下するため、専用のストレージソリューションとの併用を検討してください。

タグ: GlusterFS 分散ストレージ linux CentOS ボリュームタイプ

5月14日 19:40 投稿