GlusterFSアーキテクチャの概要
GlusterFSは、メタデータサーバーを持たないスケーラブルな分散ファイルシステムであり、単一障害点(SPOF)を排除した設計が特徴です。クライアントからのアクセスは通常のローカルファイルシステムのように行われ、VFS(Virtual File System)を通じてFUSEモジュールにリクエストが渡されます。FUSEは/dev/fuse経由でGlusterFSクライアントに処理を委譲し、ネットワークを介して適切なサーバーノード上のブリック(brick)に対してI/O操作を実行します。
ボリュームタイプとその用途
GlusterFSでは、使用ケースに応じて複数のボリュームタイプを提供しています。各タイプは性能、耐久性、容量効率のトレードオフに基づいて選択されます。
- ハッシュ分散ボリューム(Distribute Volume)
ファイル単位でハッシュ値に基づき複数のブリックに分散配置されます。小規模ファイルの大量格納に適していますが、特定のノード障害時にそのブリック上のデータが失われるリスクがあります。デフォルトのボリュームタイプです。 - レプリカボリューム(Replicate Volume)
同一データを指定された回数(例: replica 2)だけ複製して保存します。高い可用性と読み取り性能を持つ一方、書き込み性能は低下します。最低でも2台以上のストレージノードが必要です。 - ストライプボリューム(Stripe Volume)
ファイルを固定サイズ(デフォルト128KB)のチャンクに分割し、複数のブリックに並列配置します。大規模ファイルの高速処理に向いていますが、任意のブリック障害で全体のデータが破損するため、運用には注意が必要です。 - 分散ストライプボリューム(Distributed Stripe Volume)
複数のノード間でハッシュ分散を行い、さらに各ファイルをストライピングします。多数の大容量ファイルを高スループットで扱う用途に適していますが、冗長性がないため信頼性は低いです。ブリック数はストライプ幅の倍数である必要があります。 - 分散レプリカボリューム(Distributed Replicate Volume)
ハッシュ分散とレプリケーションを組み合わせたハイブリッド型です。多くのファイルを扱いながら高い信頼性を確保したい場合に最適です。ただし、ストレージ効率は半分になります。ブリックの総数はレプリカ数の倍数でなければなりません。 - ストライプレプリカボリューム(Stripe-Replica Volume)
大規模ファイルに対してストライピングを行い、さらに各ストライプをレプリケートします。非常に大きなファイルを安全に保存する必要があるシナリオ向けですが、書き込みコストが高く、ストレージ消費量も大きくなります。必要なブリック数はストライプ数 × レプリカ数の積です。
実際の構成:分散レプリカボリュームの展開
本環境では5台のサーバーを使用し、ログデータの永続化を目的とした分散レプリカボリュームを構築します。物理ストレージ総量90TBに対し、レプリケーションにより有効容量は45TBとなります。各サーバーに2つのブリックを設置することで偶数のブリック数を確保し、レプリケーションの要件を満たします。
管理ノード(10.102.23.44)から他のピアノードをクラスタに追加します。
gluster peer probe 10.102.23.45
gluster peer probe 10.102.23.46
gluster peer probe 10.102.23.47
gluster peer probe 10.102.23.4
すべてのノードでLVM準備を行います。
# ボリュームグループの作成
vgcreate vg_data01 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
vgcreate vg_data02 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1
# 論理ボリュームの作成(各9TB)
lvcreate -n lv_data01 -L 9TB vg_data01
lvcreate -n lv_data02 -L 9TB vg_data02
# XFSでフォーマット
mkfs.xfs /dev/vg_data01/lv_data01
mkfs.xfs /dev/vg_data02/lv_data02
# マウント設定
mkdir -p /data_01/node /data_02/node
echo "/dev/vg_data01/lv_data01 /data_01 xfs defaults 0 0" >> /etc/fstab
echo "/dev/vg_data02/lv_data02 /data_02 xfs defaults 0 0" >> /etc/fstab
mount /data_01
mount /data_02
分散レプリカボリュームの作成(replica 2、全10ブリック):
gluster volume create data-volume replica 2 \
10.102.23.4:/data_01/node 10.102.23.44:/data_01/node \
10.102.23.44:/data_02/node 10.102.23.45:/data_02/node \
10.102.23.45:/data_01/node 10.102.23.4:/data_02/node \
10.102.23.46:/data_01/node 10.102.23.47:/data_01/node \
10.102.23.46:/data_02/node 10.102.23.47:/data_02/node force
ボリュームの起動と状態確認:
gluster volume start data-volume
gluster volume info
gluster volume status
NFS-GaneshaによるNFSエクスポートの統合
GlusterFSネイティブのNFSサポートはNFSv3に限られ、マルチサブネット環境での利用には制限があります。これを解決するために、NFS-Ganeshaを導入します。GaneshaはFSAL(File System Abstraction Layer)を通じてGlusterFSをバックエンドとして利用し、NFSv3/v4に対応した柔軟なエクスポートを提供します。
管理ノードにインストール済みのNFS-Ganeshaを設定します。
vim /etc/ganesha/ganesha.conf
主要なエクスポート設定:
EXPORT {
Export_Id = 10;
Path = /data01;
Pseudo = /data01;
Protocols = 4;
Access_Type = RW;
Squash = No_root_squash;
Sectype = sys;
FSAL {
Name = GLUSTER;
hostname = "10.102.23.44";
volume = "data-volume";
}
}
サービスの再起動とエクスポート確認:
systemctl restart nfs-ganesha
systemctl enable nfs-ganesha
showmount -e 10.102.23.44
クライアントからのマウント方法
クライアント側では、直接GlusterFSプロトコルまたはNFS経由でストレージに接続できます。
GlusterFSネイティブマウント:
mkdir /logs
mount -t glusterfs 10.102.23.44:data-volume /logs
NFS経由マウント(他ネットワークからのアクセス):
yum install -y nfs-utils rpcbind
systemctl start rpcbind
mkdir /home/dwweiyinwen/logs
mount -t nfs -o vers=4,proto=tcp,port=2049 10.102.23.44:/data01 /home/dwweiyinwen/logs