O2CB クラスター管理
Oracle Cluster File System v2 (OCFS2) は、複数の仮想化ホスト間でアクティブ/アクティブの同時読み書き操作を実行するために設計された汎用共有ディスク・クラスターファイルシステムです。Vapor では、クラスターインフラストラクチャおよび分散ロック管理を O2CB (OCFS2 Cluster Base) スタックが処理します。
O2CB を使用することで、複数の Vapor ノードが同一の SAN LUN、iSCSI ターゲット、またはマルチパス NVMe-oF デバイスを同時にマウントでき、データの破損を起こすことなくインフラ全体で仮想マシンとクラスター化ストレージプールを並行稼働させることができます。
アーキテクチャ: 静的設定と実行時カーネル状態
O2CB は管理者が理解しておくべき 2 つの異なるレイヤーで動作します:
+-------------------------------------------------------------+
| Vapor Web コンソール / REST API |
+-------------------------------------------------------------+
|
+---------------------+---------------------+
| |
v v
+-------------------------------+ +-------------------------------+
| 静的設定ファイル | | 稼働中 Linux カーネル |
| /etc/ocfs2/cluster.conf | | /sys/kernel/configfs/... |
| (クラスター、ノード、IP定義) | | (メモリ内の有効なクラスター) |
+-------------------------------+ +-------------------------------+
| ^
+----- 動的オンライン登録 (o2cb) -----------+- 静的設定ファイル (
/etc/ocfs2/cluster.conf):- ディスク上に保存される設定ファイルで、クラスター名、ノードスロット、ノード名、IP アドレス、ポート番号(デフォルト
7777)、およびグローバルハートビート領域を定義します。
- ディスク上に保存される設定ファイルで、クラスター名、ノードスロット、ノード名、IP アドレス、ポート番号(デフォルト
- 稼働中カーネルメモリ (
/sys/kernel/config/cluster/<cluster>/):- メモリ上のアクティブなクラスターオブジェクトを表す動的な
configfsカーネルファイルシステムです。ノードがクラスター通信や DLM ロックに参加するには、カーネルメモリ内にその定義が存在する必要があります。
- メモリ上のアクティブなクラスターオブジェクトを表す動的な
- 動的オンライン登録:
o2cb register-cluster <cluster>コマンドを実行すると、cluster.confが解析され、ファイルシステムのアンマウントやサービスの再起動を伴わずに、新しく追加されたノードが実行中カーネルメモリへ動的に登録されます。
ハートビートモード
O2CB は 2 種類のハートビートメカニズムを通じてホストの健全性を監視します:
| ハートビートモード | 説明 | 推奨される用途 |
|---|---|---|
| Local Heartbeat (デフォルト) | マウントされた個々の OCFS2 ファイルシステムの専用ブロックにハートビートメタデータを直接書き込みます。専用デバイスが不要で構成がシンプルです。 | 共有データストアが数個程度の標準的な環境。 |
| Global Heartbeat | データストアをマウントする前に、独立した専用のハートビート領域 (heartbeat region) ブロックデバイスに対して永続的なバックグラウンドサービスとしてハートビートを実行します。 | 大規模クラスター、多数の共有 LUN、またはエンタープライズ SAN 環境。 |
Vapor Web コンソールでの O2CB 管理
Vapor の Web コンソールで、Storage > O2CB Cluster に移動して O2CB クラスターの状態を管理および監視します。
1. クラスターのステータスと操作
上部のカードにはリアルタイムのステータスと操作コントロールが表示されます:
- クラスター情報: 有効なクラスター名、ハートビートモード、構成済みノード総数、およびアクティブなハートビート領域数を表示します。
- ステータスバッジ:
Online(緑): クラスターがカーネルメモリに登録されアクティブです。Offline(グレー): クラスターが停止または登録解除されています。Not in Kernel(黄): 設定ファイルには存在しますが、カーネルに登録されていません。
- 主なアクション:
- Register Cluster / Sync to Kernel:
cluster.confを自動解析し、実行中のカーネルメモリに全ノードを同期します。 - Enter Maintenance / Exit Maintenance: ホストのメンテナンス作業前に、アクティブなファイルシステムを安全にアンマウントし、クラスターから登録解除します。
- Register Cluster / Sync to Kernel:
- アクションメニュー (
⋮):- Start Heartbeat / Stop Heartbeat: グローバルハートビートサービスの開始/停止(グローバルモードのみ)。
- Set Heartbeat Mode:
localとglobalのハートビートモードを切り替えます。 - Unregister Cluster: カーネルメモリからクラスターオブジェクトをアンロードします。
- Delete Cluster:
/etc/ocfs2/cluster.confからクラスター定義を削除します。
2. ノード管理
Nodes セクションでは、クラスターメンバーの確認、追加、削除が行えます:
+---------------------------------------------------------------------------------------------------+
| Node Name Number IP Address Port Status Actions |
+---------------------------------------------------------------------------------------------------+
| reg2-1 1 10.99.16.20 7777 [Local] [✓ In Kernel] — |
| reg2-2 2 10.99.16.21 7777 [✓ In Kernel] [Remove] |
| reg2-3 3 10.99.16.22 7777 [✓ In Kernel] [Remove] |
| reg2-4 4 10.99.16.250 7777 [⚠ Not in Kernel] [Remove] |
+---------------------------------------------------------------------------------------------------+ノードステータスインジケーター:
Localバッジ: このノードが現在アクセスしているローカルの Vapor ホストであることを示します。✓ In Kernel(緑バッジ): 稼働中の Linux カーネルメモリでノードが正常に認識されていることを確認します。⚠ Not in Kernel(黄バッジ): ノードが/etc/ocfs2/cluster.confに定義されているものの、実行中のカーネルメモリに読み込まれていない状態を示します。Sync to Kernel をクリックしてオンライン登録してください。
ノードの追加:
- Nodes の下にある Add Node フォームを展開します。
- Node Name(例:
n04やhost-4)、Node Number(スロット番号)、IP Address、および Port(デフォルト7777)を入力します。 - Add Node をクリックします。
- Vapor はノードを
/etc/ocfs2/cluster.confに保存し、即座にオンライン登録を実行してダウンタイムなしでカーネルメモリへ同期します。
ノードの削除:
- ノードの横にある Remove をクリックすると、設定ファイルから該当エントリが削除されます。
3. ハートビート領域 (グローバルモード)
グローバルハートビートモードが有効な場合、Heartbeat Regions セクションで次の操作を行えます:
- ブロックデバイスのパス(例:
/dev/mapper/mpathaや/dev/sdb)を追加してクラスターハートビートに参加させる。 - 不要になったハートビートデバイスを削除する。
メンテナンスモードのワークフロー
ストレージネットワークに影響を及ぼす作業(スイッチのファームウェア更新、マルチパスの再構成、HBA/NIC の交換など)を行う前に、ホストをメンテナンスモードに設定してください:
- クラスターヘッダーの Enter Maintenance をクリックします。
- Vapor が安全性の事前チェックを実行します:
- マウントされているすべての OCFS2 ファイルシステムを特定。
- 仮想マシンの仮想ディスクやアクティブなワークロードがストレージを使用していないか検証。
- すべてのアクティブな OCFS2 ストレージプールを正常にアンマウントします。
- ハートビートサービスを停止し、O2CB スタックからノードを登録解除します。
- 物理的な作業が完了したら、Exit Maintenance をクリックしてクラスターを再登録し、ハートビートを開始して共有データストアを再マウントします。
VM がアクティブな状態での強制アンマウントは厳禁です
アクティブな OCFS2 ファイルシステムをアンマウントせずにホストを突然停止させると、スプリットブレインによるデータ破損を防ぐために O2CB のセルフフェンシング(カーネルパニックまたは強制即時再起動)がトリガーされます。
REST API リファレンス
Vapor は O2CB クラスター管理用の完全な REST API を提供します:
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /storage/o2cb/clusters | 構成されているすべての O2CB クラスターを一覧表示。 |
POST | /storage/o2cb/clusters | 新しい O2CB クラスター定義を作成。 |
GET | /storage/o2cb/clusters/{name} | クラスターの詳細設定およびノード一覧を取得。 |
DELETE | /storage/o2cb/clusters/{name} | O2CB クラスター設定を削除。 |
GET | /storage/o2cb/clusters/{name}/status | クラスターのライブカーネル状態を照会。 |
POST | /storage/o2cb/clusters/{name}/register | クラスターを動的に登録し、ノードをカーネルに同期。 |
POST | /storage/o2cb/clusters/{name}/unregister | カーネルメモリからクラスターの登録を解除。 |
GET | /storage/o2cb/clusters/{name}/nodes | カーネル状態を含む構成済みメンバーノード一覧を取得。 |
POST | /storage/o2cb/clusters/{name}/nodes | 新規メンバーノードを追加し、オンラインで自動登録。 |
DELETE | /storage/o2cb/clusters/{name}/nodes/{node} | メンバーノードを削除。 |
GET | /storage/o2cb/clusters/{name}/heartbeats | 構成されているすべてのハートビート領域を取得。 |
POST | /storage/o2cb/clusters/{name}/heartbeats | ハートビート領域デバイスを追加。 |
DELETE | /storage/o2cb/clusters/{name}/heartbeats/{device} | ハートビート領域デバイスを削除。 |
PUT | /storage/o2cb/clusters/{name}/heartbeat-mode | ハートビートモードを設定(local または global)。 |
GET | /storage/o2cb/clusters/{name}/maintenance/preflight | メンテナンスモード開始前の事前チェックを実行。 |
POST | /storage/o2cb/clusters/{name}/maintenance/enter | 安全に O2CB メンテナンスモードを開始。 |
POST | /storage/o2cb/clusters/{name}/maintenance/exit | メンテナンスモードを終了し、データストアを再マウント。 |
CLI リファレンス
SSH またはコンソールアクセス権を持つ管理者は、標準の CLI ツールを使用して O2CB の状態を確認できます:
# カーネルメモリ内のクラスター状態を確認
sudo o2cb cluster-status <クラスター名>
# 設定を実行中のカーネルに登録
sudo o2cb register-cluster <クラスター名>
# カーネルからクラスター登録を解除
sudo o2cb unregister-cluster <クラスター名>
# カーネル configfs 内のアクティブノードを確認
ls -la /sys/kernel/config/cluster/<クラスター名>/node/
# グローバルハートビートサービスの開始と停止
sudo o2cb start-heartbeat <クラスター名>
sudo o2cb stop-heartbeat <クラスター名>トラブルシューティングとベストプラクティス
1. 「Not in Kernel」ノードの不整合の解決
- 原因: ノードが
/etc/ocfs2/cluster.confに直接追記されたか、クラスターがオフラインのときに追加されました。 - 対処法: Vapor UI の Sync to Kernel ボタンをクリックするか、CLI で
sudo o2cb register-cluster <クラスター名>を実行します。
2. ネットワークファイアウォールの要件
- 参加するすべてのクラスターノードは、TCP ポート
7777で双方向通信できる必要があります。ストレージネットワークインターフェース間で通信を許可してください:bashsudo ufw allow 7777/tcp # または firewalld: sudo firewall-cmd --permanent --add-port=7777/tcp && sudo firewall-cmd --reload
3. フェンシングとクオラムルール
- OCFS2 は過半数クオラムアルゴリズムを使用します。ノード間で通信が途絶した場合、データの整合性を保護するために少数派パーティションは自動的にセルフフェンシング(即時再起動)します。ストレージインターフェースには必ず冗長ネットワークリンク(Bonding / マルチパス)を構成してください。