【Proxmox VE 9.2】 HCI 構成:冗長化したネットワークで Ceph を構築する手順

Proxmox VE 9.2 の 3 台のクラスタで、各ノードのディスクをまとめて分散ストレージ(Ceph)を作り、HCI(ハイパーコンバージド)構成にする手順です。Ceph の通信は 2 枚の NIC を束ねたボンド(active-backup)に流し、NIC が 1 枚故障しても止まらないようにします。最後に、ライブマイグレーション、NIC の故障、OSD(ディスク)の停止の動作を確認します。

NIC 名の固定と corosync の冗長化は、3Tier 構成の準備 で行いました。

目次

この記事の前提

参照した公式ドキュメント

公式ドキュメントの主な推奨事項

項目内容
ノードの台数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 アドレス
pve0110.20.83.181/24
pve0210.20.83.184/24
pve0310.20.83.185/24

検証環境では、public と cluster の通信を 1 つのネットワーク(bond0)にまとめました。本番環境で通信量が多い場合は、cluster 用のネットワークを別に用意することを検討してください。

Ceph 用のボンドの作成

(1) pve01 の [System] → [Network] で [Create] → [Linux Bond] をクリックします。

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-primaryactive-backup で、ふだん使う NIC ですnic3
Comment一覧に表示するメモですCeph
Mode動作
balance-rrNIC を順番に使って送信します(既定)
active-backup1 枚だけを使い、故障したら別の 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] をクリックします。

Ceph のインストール

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

Ceph のバージョン

(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] を選びます。

Public Network の選択

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

Ceph の初期設定
項目説明設定値
Public Network IP/CIDRCeph のクライアント(Proxmox VE のノード)と MON・OSD が通信するネットワークです10.20.83.181/24(bond0)
Cluster Network IP/CIDROSD 同士がデータを複製(レプリケーション)するネットワークです。別のネットワークを選ぶと分けられますSame as Public Network
Number of replicasデータの複製の数(プールの Size の既定値)です3(既定)
Minimum replicasI/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] をクリックします。

Monitor

(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] をクリックします。

OSD の作成
項目説明設定値
DiskOSD にするディスクです。パーティションなどが無い、空のディスクだけが表示されます/dev/sdb
DB Disk / WAL DiskOSD のメタデータ(DB)とログ(WAL)を置くディスクです。HDD の OSD のときに、速い SSD・NVMe を指定すると性能が上がりますuse OSD disk(既定)
Encrypt OSDOSD のデータを暗号化しますオフ
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] になったことを確認します。

OSD の一覧

プールの作成

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

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

(2) 一覧に vmpool が追加され、左のツリーの各ノードにストレージ vmpool が表示されます。

プールの作成後

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

Ceph の状態

仮想マシンのディスクの移動

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」のままです。

NIC の故障

(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:"
NIC の復旧

OSD の停止

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

OSD の停止

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

HEALTH_WARN

OSD が down のまま 10 分(mon_osd_down_out_interval の既定値)たつと、その OSD は「out」になり、残りの OSD に複製が作り直されます。

(3) [Ceph] → [OSD] で [osd.2] を選択し、[Start] をクリックします。

OSD の起動

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

HEALTH_OK

次の手順

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次