データストレージ:HDDが1台だけでは不十分な理由
サーバーのHDDが突然故障し、一瞬にして顧客データが消え去る恐怖で眠れない夜を過ごしたことがあるなら、バックアップの重要性は身に沁みているはずです。rsyncで定期的にバックアップを取っていても、実際には遅延が発生します。深夜2時にサーバーがダウンし、バックアップの間隔である15分間の貴重なデータが失われることは、企業にとって大きな痛手です。高い可用性(High Availability)を実現するには、より強力なソリューション、GlusterFSが必要です。
GlusterFS is, a distributed file system that integrates HDDs across multiple physical servers into a single giant shared storage. Its main feature is real-time data replication. If one node fails, the other node continues to operate, so end users don’t even notice the service interruption.
古くなったCentOS 7からCentOS Stream 9へシステムを移行した際、新しいプラットフォームでのセットアップにはリポジトリに関する重要な変更点がいくつかあることに気づきました。これを知らないと、依存関係のエラーで手こずることになります。
ラボ環境の準備
このガイドでは、2つのCentOS Stream 9ノードを使用します。本番環境(プロダクション)では、最低3ノードの使用を推奨します。3台構成にすることでクォーラム(Quorum)を維持し、2つのノード間でデータの整合性が取れなくなるスプリットブレイン(split-brain)現象を防ぐことができます。
- ノード 1: gfs-node01 (192.168.1.101)
- ノード 2: gfs-node02 (192.168.1.102)
- 追加HDD: 各ノードに20GBのディスクを追加(通常は
/dev/sdb)。注意:GlusterFSには/(ルート) パーティションを絶対に使用しないでください。ディスクがいっぱいになると、OS全体がフリーズしてしまいます。
hostsファイルの定義
各ノードがIPアドレスではなくホスト名で互いを識別できるようにします。両方のノードで /etc/hosts ファイルを編集してください:
192.168.1.101 gfs-node01
192.168.1.102 gfs-node02
CentOS Stream 9へのGlusterFSインストール
CentOS 9のデフォルトリポジトリにはGlusterFSが含まれていません。安定版を入手するために、SIG(Special Interest Group)のリポジトリを有効にする必要があります。
1. リポジトリの有効化
両方のノードで以下のコマンドを実行します:
# Glusterリポジトリを取得するためにリリースパッケージをインストール
sudo dnf install centos-release-gluster -y
# CRB (Code Ready Builder) リポジトリを有効化 - 従来のPowerToolsの代わり
sudo dnf config-manager --set-enabled crb
2. サービスの展開
sudo dnf install glusterfs-server -y
# 起動および自動起動設定
sudo systemctl enable --now glusterd
# ステータスの確認
sudo systemctl status glusterd
3. ファイアウォールの設定
サービスは動いているのにノード間が接続できず、悩む人が多くいます。GlusterFSはポート24007と、各ブリック(Brick)用に49152以降のポート範囲を使用します。内部ネットワークであれば、以下の方法が最も手軽で安全です:
sudo firewall-cmd --add-service=glusterfs --permanent
sudo firewall-cmd --reload
クラスターとボリュームの設定
ノードの接続(Peering)
gfs-node01 から、隣のノードに接続コマンドを実行します:
sudo gluster peer probe gfs-node02
両方が正常に「握手」できたか確認するには、以下を入力します:
sudo gluster peer status
Peer in Cluster (Connected) という表示が出れば、工程の50%は完了です。
ストレージ用ブリックの作成
ここでは、GlusterFSのパフォーマンスを最適化するために、/dev/sdb をXFS形式でフォーマットします:
sudo mkfs.xfs /dev/sdb
sudo mkdir -p /data/glusterfs/myvol/brick1
sudo mount /dev/sdb /data/glusterfs/myvol/brick1
# 再起動後も自動マウントされるよう /etc/fstab に追記してください。
レプリケートボリュームの作成
次に、gv0 という名前のボリュームを replica 2 モード(両方のノードに1:1でコピー)で作成します:
sudo gluster volume create gv0 replica 2 gfs-node01:/data/glusterfs/myvol/brick1/brick gfs-node02:/data/glusterfs/myvol/brick1/brick force
sudo gluster volume start gv0
確認と運用
ボリュームが「正常」かどうかを確認するには、以下のコマンドを使用します:
sudo gluster volume info
遅延(レイテンシ)や実行中のプロセスを詳しく調査したい場合は、以下を試してください:
sudo gluster volume status gv0
クライアントからの接続
クライアントマシンでは、glusterfs-client をインストールし、以下のようにマウントするだけです:
sudo mount -t glusterfs gfs-node01:/gv0 /mnt/storage
ちょっとしたコツ: node01のIPでマウントしていても、もしそのノードがダウンした場合は、クライアントが自動的にnode02へ切り替えます。マウント時にロードされるメタデータにより、クライアントはクラスター全体の構造を把握しています。
実戦経験:スプリットブレインを避けるために
スプリットブレインは、両方のノードがデータを書き込んでいる最中に接続が突然切断されたときに発生します。GlusterFSは、どちらが「正解」のデータか判断できなくなるため、そのファイルをロックします。
- 最善の解決策: 常に3つのノードを使用するか、Arbiter(ストレージ容量を消費しない調停ノード)を追加することです。
- 対処法:
gluster volume heal gv0 info split-brainコマンドでエラーファイルを確認します。手動で正しいデータを持つノードを選択して復旧させる必要があります。
手順さえ間違えなければ、分散ストレージシステムの構築は難しくありません。CentOS Stream 9でGlusterFSを運用することで、データが常に安全にバックアップされているという安心感を得られ、ぐっすり眠れるようになりました。皆さんの構築が成功することを願っています!

