おっさんのお小遣いで作るホームラボ 〜10万円で作るHCI〜 ⑤Proxmox VEでHCIクラスタを構成する
ようやくHCIを作る下準備が整ったので、HCIの構築に入れるようになった。
といってもそんなに時間もとれないので大分不定期になりそう。
毎度環境を引っ張り出してくるのが割と面倒くさくなってきてるのもどうにかしたいところ。
今回は大きく3部構成。
- クラスタの作成と所属
- Cephクラスタの構成
- 分散ストレージの設定
実質2部だけど。
全部終われば晴れてHCIを名乗れるぞー
クラスタの作成と所属
これはとても簡単なので、説明は3ステップで終わる。
- [データセンター]を選択し、[クラスタ]から[クラスタを作成]。適当なクラスタ名を入れて完成。
クラスタネットワークは冗長化してるのでリンクは1つでOK - [Join情報]を開いて、Join用のキーをコピー
- 残ったほかのメンバーノードで同じく[クラスタ]から[クラスタに参加]を選択。
コピーしたJoin情報をペーストして、Join先サーバーのrootユーザーパスワードを入力。
[Join Cluster]を押せば完了。

うん、とても簡単。
Cephクラスタの構成
Cephのインストール
デフォルトではCephのパッケージは導入されていないので、インストール。
こちらも導入自体は簡単で、GUIでポチポチ選ぶだけ。
- ノードを選択し、Cephのメニューに移動する。
- [Cephをインストール]と出ているので、ボタンポチー。
導入するバージョンとリポジトリを選択する必要があるので今回は[squid(19.2)]と[サブスクリプションがありません]を選択して[squidのインストール開始]
パッケージのインストールが終わるまでのんびり待つ。 - インストール後、Cephクラスタの構成を実施。
Cephクラスタの専用ネットワークは特に設定しない。
後で必要なら変える。
レプリカ数などもデフォルトで。3台しかいないし。 - インストール完了。モニタもマネージャも正常に動いてそう。ヨシ!

Cephのインストールはこれで完了。
2台目以降はCephインストール時に「構成はすでに済んでいる」と出て設定することなく終わる。
実際各ノードでCephが動いているかの確認としてGUIでCephの状態が見られることを確認しておく。
Cephクラスタの構成
Cephのインストールと、マスターノードの設定は完了したものの、クラスタの設定がまだなのでこれから設定していく。
- モニタの設定
2台目以降のノードで[Ceph]-[モニタ]を選択して[モニタ]で[作成]を選択。
対象ホストを選択して作成する。
今回ノードが3つだけなので、最小構成の3台(つまり全台)を設定する。
スプリットブレインの危険があるので基本奇数で。
基本は故障を許容する台数に1を足した数以上設定するのがいいという認識。(ただし奇数になるように) - マネージャの設定
これもHA構成にしておくのがよいのでpve2にスタンバイ機を設定しておく。
[Ceph]-[マネージャ]を選択して[マネージャ]で[作成]を選択。
3台目は設定してもどうせStandbyになるので2台で構成する。 - Cephクラスタの完成
これでクラスタ自体は完成した。
現在の構成状況はこんな感じ。

ちゃんと動いててヨシ!
一応コマンドでも確認しておこう。
root@pve1:~# ceph -s
cluster:
id: 0189e26f-92d4-414c-927a-46a8397d7e95
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum pve1,pve2,pve3 (age 79m)
mgr: pve1(active, since 2h), standbys: pve2
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
OSDが一つも無いのでワーニング出てるものの、ほかはちゃんと動いてそう。
分散ストレージの設定
設定する前のストレージ状態はこんな感じ。512GB中大体300GBが確保されてる感じ。

Ceph用パーティションの作成
CephではOSDを設定する際にディスク全体をそのまま使うことが基本になる。
しかし検証環境などで専用のディスクを確保できないこともある(今回みたいに)。
その場合はパーティションをあらかじめCeph用に設定しておくことでディスクまるごと確保する必要が無くなるのであった。
ただ、デメリットとしてはほかのストレージ処理とかぶるのでパフォーマンスは落ちるということ。
今回は検証環境なのでその辺のデメリットは無視することとする。
まずはCephで使用する領域を確保するため、fdiskやpartedを使ってパーティションを設定することになる。
さて、頑張ってコマンドで設定しよう。
- ディスクの確認
一応現在の状況を確認しておく。
root@pve1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.9G 0 disk
|-sda1 8:1 0 1007K 0 part
|-sda2 8:2 0 1G 0 part /boot/efi
+--sda3 8:3 0 275G 0 part
|-pve-swap 252:0 0 8G 0 lvm [SWAP]
|-pve-root 252:1 0 78.7G 0 lvm /
|-pve-data_tmeta 252:2 0 1.7G 0 lvm
| +-mqpve-data 252:4 0 168.8G 0 lvm
+-pve-data_tdata 252:3 0 168.8G 0 lvm
+-mqpve-data 252:4 0 168.8G 0 lvm
使用済みはざっくり276GBで、今回はsda4のパーティションを作成する予定。
- パーティションの構成
root@pve1:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): p
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: NGFF 2280 512GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 63227990-EB5E-4602-A9FD-EF0E2A76AA5E
Device Start End Sectors Size Type
/dev/sda1 34 2047 2014 1007K BIOS boot
/dev/sda2 2048 2099199 2097152 1G EFI System
/dev/sda3 2099200 578813952 576714753 275G Linux LVM
Command (m for help): n
Partition number (4-128, default 4):
First sector (578813953-1000215182, default 578816000):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (578816000-1000215182, default 1000214527):
Created a new partition 4 of type 'Linux filesystem' and of size 200.9 GiB.
Command (m for help): w
The partition table has been altered.
Syncing disks.
領域確保完了。
- パーティションタイプの変更
やらなくても構築できそうな気がしなくもないけど、やっておく。
Ceph OSDのパーティションタイプは「185」なのでそれを指定している。
root@pve1:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): p
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: NGFF 2280 512GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 63227990-EB5E-4602-A9FD-EF0E2A76AA5E
Device Start End Sectors Size Type
/dev/sda1 34 2047 2014 1007K BIOS boot
/dev/sda2 2048 2099199 2097152 1G EFI System
/dev/sda3 2099200 578813952 576714753 275G Linux LVM
/dev/sda4 578816000 1000214527 421398528 200.9G Linux filesystem
Command (m for help): t
Partition number (1-4, default 4): 4
Partition type or alias (type L to list all): 185
Changed type of partition 'Linux filesystem' to 'Ceph OSD'.
Command (m for help): w
The partition table has been altered.
Syncing disks.
- パーティション確認
ということで、設定されたパーティションはコマンド上ではこんな感じ。
Device Start End Sectors Size Type
/dev/sda1 34 2047 2014 1007K BIOS boot
/dev/sda2 2048 2099199 2097152 1G EFI System
/dev/sda3 2099200 578813952 576714753 275G Linux LVM
/dev/sda4 578816000 1000214527 421398528 200.9G Ceph OSD
root@pve1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.9G 0 disk
+-sda1 8:1 0 1007K 0 part
+-sda2 8:2 0 1G 0 part /boot/efi
+-sda3 8:3 0 275G 0 part
| +-pve-swap 252:0 0 8G 0 lvm [SWAP]
| +-pve-root 252:1 0 78.7G 0 lvm /
| +-pve-data_tmeta 252:2 0 1.7G 0 lvm
| | +-pve-data 252:4 0 168.8G 0 lvm
| +-pve-data_tdata 252:3 0 168.8G 0 lvm
| +-pve-data 252:4 0 168.8G 0 lvm
+-sda4 8:4 0 200.9G 0 part
+-ceph--506a72d8--27aa--47da--9521--dfaedbecd8a3-osd--block--1eb6ac89--8784--4 8bb--87a1--d99c4be126ef
252:5 0 200.9G 0 lvm
ProxmoxのGUI管理画面ではこう見えてる。

ストレージ側の設定はこれで完了なので、残り2台も設定する。
OSDの作成
ようやく佳境に入ってきた。
OSDはノードごとに作成する必要があるのでこれもまた3回…
-
OSD作成
ノードを選択し、[Ceph]-[OSD]-[OSD作成]でOSDを作成する。
ディスクはさっき作った/dev/sda4を選択。ほかは全部デフォルトで作成する。
これを3台分繰り返せばクラスタは完成。 -
クラスタの状態確認
例によって状態の確認ヨシ!

root@pve1:~# ceph -s
cluster:
id: 0189e26f-92d4-414c-927a-46a8397d7e95
health: HEALTH_OK
services:
mon: 3 daemons, quorum pve1,pve2,pve3 (age 2h)
mgr: pve1(active, since 3h), standbys: pve2
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 705 KiB
usage: 82 MiB used, 602 GiB / 602 GiB avail
pgs: 1 active+clean
これでようやくHCIの初期構築がおわり。
今回はとりあえずここまで。
次はVMを建てられるように基本設定していきたい。
おまけ:Cephクラスタの起動停止方法
クラスタを構成してしまったので、起動停止が必要になる。
ということで簡単に方法だけメモ。
GUIだと面倒くさいからCLIでできるならそっちの方が楽かな。
- シャットダウン時
ceph osd set noout
ceph osd set nodown
ceph osd set nobackfill
ceph osd set norebalance
ceph osd set norecover
ceph osd set pause
このフラグを設定してからノードのシャットダウンを実施する。
- 再起動処理時
単一ノードなら特にフラグ立ては不要のことが多いが、数分でああってこない場合はこれを設定しておく。
ceph osd set noout
ceph osd unset noout
- 正常稼働状態にする
ceph osd unset noout
ceph osd unset nodown
ceph osd unset nobackfill
ceph osd unset norebalance
ceph osd unset norecover
ceph osd unset pause
- ProxmoxでのGUI設定
ノードを選択して、[Ceph]-[OSD]の中にある[グローバルフラグを管理]を触る。
Discussion