Proxmoxクラスター構築時のストレージの悩み
Proxmoxクラスターを構築する方の多くは、システムの継続性を確保するために「高可用性(HA)」機能を目指しているはずです。しかし、HAを実現するには共有ストレージ(Shared Storage)または分散ストレージ(Distributed Storage)が不可欠です。これらがないと、物理ノードがダウンした際、データが故障したノードのローカルディスクに閉じ込められ、仮想マシン(VM)も一緒に停止してしまいます。
12台のVMとコンテナを運用している私のホームラボプロジェクトでは、当初その知名度からCephの導入を検討しました。しかし、Cephは非常にリソースを消費します。最低3ノードが必要で、ストレージデータ1TBあたり各ノードで約1GBのRAMを消費し、さらにCPUオーバーヘッドも無視できません。低スペックなマシンや古いサーバーにとって、Cephを動かすのは「小さな釘を打つのに大きなハンマーを持ち出す」ようなもので、あまりにも重すぎます。
試行錯誤の末、私はLINSTORに辿り着きました。これはDRBD(Distributed Replicated Block Device)を管理するための非常に軽量なソリューションでありながら、驚くべきパフォーマンスを発揮します。
比較表:なぜLINSTORを選ぶべきか?
LINSTORと他のソリューションの違いを理解するために、実際の比較表を作成しました:
| 項目 | ローカルストレージ | Ceph (RBD) | LINSTOR (DRBD) |
|---|---|---|---|
| 可用性 (HA) | なし | 非常に高い (3ノード以上) | 高い (2ノードから可能) |
| パフォーマンス (IOPS) | ネイティブ (100%) | 低い (~50-70%) | 非常に高い (ネイティブの~90-95%) |
| RAM使用量 | ほぼゼロ | 4GB – 16GB以上 | 500MB以下 |
| 複雑さ | 容易 | 非常に困難 | 中程度 |
LINSTORの動作仕組み
LINSTOR自体は直接データを保存しません。背後にあるDRBDを制御する「コントロールセンター」の役割を果たします。DRBDは、LAN経由で複数のディスク間のデータをリアルタイムでコピーします。
- 速度:ブロックレベルで動作するため、書き込みコマンドが発生すると即座にデータが転送され、遅延を最小限に抑えます。
- 効率性:Cephのように3ノードを強制されることはなく、2ノードだけでHAを構成可能です。
- 柔軟性:LVM-ThinやZFSの両方をうまく活用できます。
ハードウェアの準備
スムーズに導入するために、以下の環境を推奨します:
- 少なくとも2台のProxmoxノード(今回は
pve-01,pve-02,pve-03の3ノードを使用)。 - 各ノードに空きのハードディスク1台(例:
/dev/sdb容量240GB)。 - ネットワークは最低1Gbpsが必要ですが、10GbpsあればLINSTORは真価を発揮し、爆速で動作します。
詳細な導入手順
1. リポジトリの設定
LINSTORはデフォルトのリポジトリには含まれていません。すべてのノードで以下のコマンドを実行し、LINBITの公式リポジトリを追加する必要があります:
wget -O- https://packages.linbit.com/package-signing-pubkey.asc | gpg --dearmor > /usr/share/keyrings/linbit-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/linbit-keyring.gpg] https://packages.linbit.com/proxmox-8/ proxmox-8 v9" > /etc/apt/sources.list.d/linbit.list
apt update
2. Controller and Satelliteのインストール
システムは、指令塔となる Controller と、各ノードで実行を担う Satellite の2つの部分で構成されます。
メインノード (pve-01) で実行:
apt install linstor-controller linstor-satellite linstor-client drbd-utils
サテライトノード (pve-02, pve-03) で実行:
apt install linstor-satellite drbd-utils
その後、システム起動時に自動開始されるようサービスを有効化します:
systemctl enable --now linstor-controller linstor-satellite
3. クラスターとストレージプールの初期化
Controllerノードで、各ノードをネットワークに接続します:
linstor node create pve-01 192.168.1.10 --node-type Combined
linstor node create pve-02 192.168.1.11 --node-type Satellite
linstor node create pve-03 192.168.1.12 --node-type Satellite
次に、データ保存場所を作成します。スナップショットが高速なLVM-Thinを選択します:
# 空きディスクからVolume Groupを作成
vgcreate drbd_vg /dev/sdb
# LINSTOR管理用のプールを宣言
linstor storage-pool create lvmthin pve-01 storage_data drbd_vg/thin_pool
linstor storage-pool create lvmthin pve-02 storage_data drbd_vg/thin_pool
linstor storage-pool create lvmthin pve-03 storage_data drbd_vg/thin_pool
4. Proxmoxインターフェースとの連携
VM作成時にProxmoxが自動的にLINSTORを呼び出せるよう、統合プラグインをインストールします:
apt install linstor-proxmox
ProxmoxのWeb GUIにアクセスし、Datacenter -> Storage -> Add -> LINSTOR に進みます。ControllerノードのIPとプール名 storage_data を入力します。また、以下のコマンドでResource Groupを作成するのを忘れないでください:
linstor resource-group create proxmox_group --storage-pool storage_data --place 2
ヒント: --place 2 はデータが常に2つのコピー(レプリカ)を持つことを意味します。3ノードすべてで絶対的な安全性を確保したい場合は、この数字を3に変更してください。
検証:一瞬で終わるライブマイグレーション
設定完了後、Ubuntu Serverを LINSTOR-Storage にインストールしてテストしました。結果は非常に印象的でした。VMをノード1からノード2へ Migrate させたところ、プロセスはわずか4.2秒で完了しました。
移行中、外部からVMへの ping が途切れることはありませんでした。データはあらかじめ並列で同期されているため、ProxmoxはRAM内の残りのデータを転送するだけで済みます。これは、数千万円もする専用ストレージを導入する予算はないけれど、安定性を求めるユーザーにとって完璧なソリューションです。
運用における3つの重要な注意点
- ネットワーク帯域:すべてのディスク書き込み操作はネットワークを経由します。ネットワークカードがボトルネックになると、VMに即座にラグが発生します。管理トラフィックとデータトラフィックを分離するために、少なくとも2枚のネットワークカードを使用してください。
- スプリットブレイン現象:2つのノードが接続を失いながらも動作し続けた場合、お互いのデータを上書きしてしまう可能性があります。この惨事を避けるために、ProxmoxのQuorum(定足数)設定が正しく行われていることを確認してください。
- カーネルの更新:DRBDはLinuxカーネル内で直接動作します。
apt upgradeで新しいカーネルに更新する際は、DKMS経由でDRBDモジュールが再ビルドされているか必ず確認してください。
結論として、LINSTORは中小規模のシステムにとって「堅実」な選択肢です。Cephのような巨大なハードウェア要件なしに、分散ストレージの強力な機能を手に入れることができます。

