ProxmoxにおけるLINSTOR:Cephに代わる「超軽量」分散ストレージソリューション

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

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つの重要な注意点

  1. ネットワーク帯域:すべてのディスク書き込み操作はネットワークを経由します。ネットワークカードがボトルネックになると、VMに即座にラグが発生します。管理トラフィックとデータトラフィックを分離するために、少なくとも2枚のネットワークカードを使用してください。
  2. スプリットブレイン現象:2つのノードが接続を失いながらも動作し続けた場合、お互いのデータを上書きしてしまう可能性があります。この惨事を避けるために、ProxmoxのQuorum(定足数)設定が正しく行われていることを確認してください。
  3. カーネルの更新:DRBDはLinuxカーネル内で直接動作します。 apt upgrade で新しいカーネルに更新する際は、DKMS経由でDRBDモジュールが再ビルドされているか必ず確認してください。

結論として、LINSTORは中小規模のシステムにとって「堅実」な選択肢です。Cephのような巨大なハードウェア要件なしに、分散ストレージの強力な機能を手に入れることができます。

Share: