Proxmox VE 9.2 の 3 台のクラスタで、各ノードのディスクをまとめて分散ストレージ(Ceph)を作り、HCI(ハイパーコンバージド)構成にする手順です。Ceph の通信は 2 枚の NIC を束ねたボンド(active-backup)に流し、NIC が 1 枚故障しても止まらないようにします。最後に、ライブマイグレーション、NIC の故障、OSD(ディスク)の停止の動作を確認します。
NIC 名の固定と corosync の冗長化は、3Tier 構成の準備 で行いました。
この記事の前提
参照した公式ドキュメント
- Proxmox VE Administration Guide – Deploy Hyper-Converged Ceph Cluster
- Proxmox VE Administration Guide – Network Configuration(Linux Bond)
公式ドキュメントの主な推奨事項
| 項目 | 内容 |
|---|---|
| ノードの台数 | 3 台以上。データを 3 つのノードに 1 つずつ置く(レプリカ 3)ためです |
| ネットワーク | Ceph 専用のネットワークを用意し、10 Gbps 以上(NVMe なら 25 Gbps 以上)を推奨します。冗長化(ボンド)も推奨されています。Ceph の通信は、クライアント用(public)とレプリケーション用(cluster)に分けることもできます |
| ディスク | ハードウェア RAID は使わず、ディスクをそのまま(HBA や IT モードで)見せます。OSD 1 つにディスク 1 本です |
| メモリー | OSD 1 つあたり既定で 4 GiB(osd_memory_target)を使います。MON・MGR の分も含めて余裕を持たせます |
| プール | Size 3 / Min. Size 2(既定)を推奨します。Min. Size を 1 にすると、データを失う危険があります |
検証環境
| 項目 | 内容 |
|---|---|
| ノード | pve01 / pve02 / pve03(各 4 vCPU・メモリー 8 GB) |
| Ceph 用のディスク | 各ノードの sdb(40 GB、空のディスク) |
| Ceph 用のネットワーク | bond0(nic3 + nic4、active-backup)、10.20.83.0/24 |
| Ceph のバージョン | 20.2 Tentacle(20.2.4)、No-Subscription リポジトリ |
| ノード | bond0 の IP アドレス |
|---|---|
| pve01 | 10.20.83.181/24 |
| pve02 | 10.20.83.184/24 |
| pve03 | 10.20.83.185/24 |
検証環境では、public と cluster の通信を 1 つのネットワーク(bond0)にまとめました。本番環境で通信量が多い場合は、cluster 用のネットワークを別に用意することを検討してください。
Ceph 用のボンドの作成
(1) pve01 の [System] → [Network] で [Create] → [Linux Bond] をクリックします。

(2) [Create: Linux Bond] が表示されます。[Mode] の一覧から [active-backup] を選びます。

(3) 次のとおり入力して [Create] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Name | ボンドの名前です | bond0 |
| IPv4/CIDR | ボンドの IP アドレスです | 10.20.83.181/24 |
| Gateway (IPv4) | 既定のゲートウェイです。管理用(vmbr0)にだけ設定するので空欄にします | 空欄 |
| Autostart | 起動時にボンドを有効にします | オン |
| Slaves | 束ねる NIC です。スペースで区切って入力します | nic3 nic4 |
| Mode | ボンドの動作です。下の表を参照してください | active-backup |
| bond-primary | active-backup で、ふだん使う NIC です | nic3 |
| Comment | 一覧に表示するメモです | Ceph |
| Mode | 動作 |
|---|---|
| balance-rr | NIC を順番に使って送信します(既定) |
| active-backup | 1 枚だけを使い、故障したら別の NIC に切り替えます。スイッチ側の設定は不要です |
| LACP (802.3ad) | 複数の NIC を同時に使います。スイッチ側にも LACP の設定が必要です |
| balance-xor / broadcast / balance-tlb / balance-alb | そのほかの負荷分散・冗長化の方式です |
NIC を 2 台のスイッチに分けてつなぐ場合、スイッチ側の設定が不要な active-backup が簡単です。2 台のスイッチがスタックや MLAG に対応していれば、LACP で 2 枚とも使うこともできます。
(4) 画面下の [Pending changes] で変更点を確認して [Apply Configuration] をクリックし、[Do you want to apply pending network changes?] と表示されたら [Yes] をクリックします。

(5) bond0 の [Active] が [Yes] になったことを確認します。

(6) pve02 と pve03 でも同じように作成します。Web UI の代わりに、各ノードの Shell で次のコマンドを実行しても同じ設定になります(pve02 の例)。
pvesh create /nodes/pve02/network --iface bond0 --type bond --slaves "nic3 nic4" --bond_mode active-backup --bond-primary nic3 --cidr 10.20.83.184/24 --autostart 1 --comments Ceph
pvesh set /nodes/pve02/network
(7) ボンドの状態を確認します。「Bonding Mode: fault-tolerance (active-backup)」と、使っている NIC(Currently Active Slave)が表示されます。ほかのノードの bond0 の IP アドレスに ping が通ることも確認します。
cat /proc/net/bonding/bond0
ping -c 2 10.20.83.184
ping -c 2 10.20.83.185
Ceph のインストール
(1) pve01 を選択し、[Ceph] をクリックします。「Ceph is not installed on this node. Would you like to install it now?」と表示されるので、[Install Ceph] をクリックします。

(2) [Setup] のウィザードが表示されます。[Ceph version to install] の一覧でバージョンを選びます。今回は既定の [tentacle (20.2)] にしました。

(3) [Repository] の一覧で、使うリポジトリを選びます。サブスクリプションが無いので [No-Subscription] を選びます。

(4) [Start tentacle installation] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Ceph version to install | インストールする Ceph のバージョンです。squid (19.2) と tentacle (20.2) から選べます | tentacle (20.2) |
| Repository | パッケージを取得するリポジトリです。Enterprise(推奨)はサブスクリプションが必要です。No-Subscription は「本番環境には最適ではない」と表示されます | No-Subscription |
(5) [Installation] のタブにパッケージの一覧が表示され、「Do you want to continue? [Y/n]」と聞かれます。[Y] を入力して Enter キーを押します。

(6) 「installed Ceph 20.2 Tentacle successfully!」と表示されたら、[Next] をクリックします。

(7) [Configuration] のタブが表示されます。[Public Network IP/CIDR] の一覧から、bond0 の [10.20.83.181/24] を選びます。

(8) 次のとおり設定して [Next] をクリックします。最初のモニター(MON)とマネージャー(MGR)が pve01 に作られます。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Public Network IP/CIDR | Ceph のクライアント(Proxmox VE のノード)と MON・OSD が通信するネットワークです | 10.20.83.181/24(bond0) |
| Cluster Network IP/CIDR | OSD 同士がデータを複製(レプリケーション)するネットワークです。別のネットワークを選ぶと分けられます | Same as Public Network |
| Number of replicas | データの複製の数(プールの Size の既定値)です | 3(既定) |
| Minimum replicas | I/O を受け付けるのに必要な最小の複製の数(Min. Size の既定値)です | 2(既定) |
| Monitor node | 最初のモニターを作るノードです | pve01 |
(9) [Success] のタブに「Installation successful!」と表示されます。残りの手順(ほかのノードへのインストール、モニター・OSD・プールの作成)が案内されます。[Finish] をクリックします。

(10) pve02 と pve03 にも Ceph をインストールします。各ノードを選択して (1)〜(6) と同じウィザードで行います(構成は作成済みなので、[Configuration] は表示されません)。CLI で行う場合は、各ノードの Shell で次のコマンドを実行します。
pveceph install --repository no-subscription --version tentacle
モニターとマネージャーの追加
モニター(MON)はクラスタの状態を管理するサービスで、過半数が動いている必要があるため 3 台に置きます。マネージャー(MGR)は統計やダッシュボードを受け持ち、1 台が動作中(active)、残りは待機(standby)になります。
(1) pve01 の [Ceph] → [Monitor] を開き、[Monitor] の [Create] をクリックします。

(2) [Create: Monitor] の [Host] で [pve02] を選び、[Create] をクリックします。同じように pve03 にも作成します。

(3) [Manager] の [Create] をクリックし、[Create: Manager] の [Host] で [pve02] を選んで [Create] をクリックします。同じように pve03 にも作成します。

(4) モニターが 3 つとも [running]、[Quorum] が [Yes] になり、マネージャーが 1 つ [active]、2 つ [standby] になったことを確認します。

OSD の作成
OSD は、Ceph がデータを置くディスク 1 本ごとのサービスです。各ノードの空のディスク(sdb)を OSD にします。
検証環境では、ノードのメモリーが 8 GB と少ないため、OSD を作る前に OSD 1 つあたりのメモリーの目標値を 2 GiB に下げました(
ceph config set osd osd_memory_target 2147483648)。本番環境では既定値(4 GiB)以上のメモリーを用意してください。
(1) pve01 の [Ceph] → [OSD] を開き、[Create: OSD] をクリックします。[Create: Ceph OSD] が表示されます。次のとおり設定して [Create] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Disk | OSD にするディスクです。パーティションなどが無い、空のディスクだけが表示されます | /dev/sdb |
| DB Disk / WAL Disk | OSD のメタデータ(DB)とログ(WAL)を置くディスクです。HDD の OSD のときに、速い SSD・NVMe を指定すると性能が上がります | use OSD disk(既定) |
| Encrypt OSD | OSD のデータを暗号化します | オフ |
| Device Class | ディスクの種類(hdd / ssd / nvme)です。自動で判定されます | auto detect |
画面のとおり、ハードウェア RAID のディスクは Ceph では使えません。
(2) pve02 と pve03 でも、各ノードを選択して同じように作成します。CLI で行う場合は、各ノードの Shell で次のコマンドを実行します。
pveceph osd create /dev/sdb
(3) [Reload] をクリックし、3 つの OSD がノードごとに表示され、[Status] が [up / in] になったことを確認します。

プールの作成
(1) [Ceph] → [Pools] を開き、[Create] をクリックします。[Create: Ceph Pool] が表示されます。次のとおり入力して [Create] をクリックします。

| 項目 | 説明 | 設定値 |
|---|---|---|
| Name | プールの名前です。[Add as Storage] がオンの場合、ストレージの ID にもなります | vmpool |
| Size | データの複製の数です | 3(既定) |
| Min. Size | I/O を受け付けるのに必要な最小の複製の数です。1 にしないでください | 2(既定) |
| Crush Rule | データの置き方の規則です。既定ではノードごとに 1 つずつ複製を置きます | replicated_rule |
| # of PGs | データを分ける単位(配置グループ)の数です。PG Autoscaler がオンなら自動で調整されます | 128(既定) |
| PG Autoscaler Mode | PG の数を自動で調整します | on |
| Add as Storage | プールを Proxmox VE のストレージ(RBD)として追加します | オン |
(2) 一覧に vmpool が追加され、左のツリーの各ノードにストレージ vmpool が表示されます。

(3) [Ceph] を開き、[Status] が [HEALTH_OK]、OSD が 3 つとも [Up] / [In]、モニターとマネージャーが 3 台とも動いていることを確認します。プールを作った直後は PG の数の調整(peering)が表示されることがありますが、しばらくすると [active+clean] になります。

仮想マシンのディスクの移動
3Tier 構成:iSCSI+マルチパスの共有ストレージ設定手順で共有 LVM に置いた仮想マシン(VM 100)のディスクを、動かしたまま vmpool に移します。
(1) 仮想マシンの [Hardware] で [Hard Disk] を選択し、[Disk Action] → [Move Storage] をクリックします。[Target Storage] の一覧から [vmpool] を選びます。[Avail] には、複製の数(3)で割った容量が表示されます。

(2) [Delete source] をオンにして [Move disk] をクリックします。

(3) タスクビューアーに [TASK OK] と表示されたら完了です。ディスクがコピーされ、移動元の LVM のボリュームが削除されています。

(4) [Hard Disk] が vmpool に変わったことを確認します。

動作の確認
ライブマイグレーション
(1) 仮想マシンの右上の [Migrate] をクリックし、[Target node] を選んで [Migrate] をクリックします。

(2) タスクのログで、ディスクのコピーが行われず、メモリーの内容(VM-state)だけが転送されて、十数秒で終わったことを確認します。Ceph のストレージは、すべてのノードから同じように使えるためです。

NIC の故障(ボンド)
検証のための手順です。本番環境で行う場合は、メンテナンスの時間に行ってください。
(1) 仮想マシンが動いているノード(pve02)の Shell で、ボンドでふだん使っている NIC(nic3)を止めて、ボンド・Ceph・仮想マシンの状態を確認します。
ip link set nic3 down
sleep 5
grep -E "Currently Active|Slave Interface|MII Status" /proc/net/bonding/bond0
ceph -s | grep -E "health:|osd:"
qm status 100
使う NIC が nic4 に切り替わり(Currently Active Slave: nic4)、Ceph は [HEALTH_OK] のまま、仮想マシンも「running」のままです。

(2) NIC を元に戻します。bond-primary に指定した nic3 に戻ります。
ip link set nic3 up
sleep 5
grep -E "Currently Active|Slave Interface|MII Status" /proc/net/bonding/bond0
ceph -s | grep -E "health:|osd:"

OSD の停止
(1) [Ceph] → [OSD] で、仮想マシンが動いていないノード(pve03)の [osd.2] を選択し、[Stop] をクリックします。

(2) [Ceph] を開くと、[Status] が [HEALTH_WARN] になり、「1 osds down」「Degraded data redundancy」と表示されます。複製が 2 つに減った状態(active+undersized+degraded)ですが、Min. Size(2)を満たしているので I/O は続きます。検証では、この状態で仮想マシンの中でファイルの書き込み(200 MiB)ができ、仮想マシンも動き続けました。

OSD が down のまま 10 分(mon_osd_down_out_interval の既定値)たつと、その OSD は「out」になり、残りの OSD に複製が作り直されます。
(3) [Ceph] → [OSD] で [osd.2] を選択し、[Start] をクリックします。

(4) しばらくすると、[Status] が [HEALTH_OK] に、PG が [active+clean] に戻ります。
