👋

おっさんのお小遣いで作るホームラボ 〜10万円で作るHCI〜 ⑤Proxmox VEでHCIクラスタを構成する

に公開

ようやくHCIを作る下準備が整ったので、HCIの構築に入れるようになった。
といってもそんなに時間もとれないので大分不定期になりそう。
毎度環境を引っ張り出してくるのが割と面倒くさくなってきてるのもどうにかしたいところ。

今回は大きく3部構成。

  1. クラスタの作成と所属
  2. Cephクラスタの構成
  3. 分散ストレージの設定
    実質2部だけど。

全部終われば晴れてHCIを名乗れるぞー

クラスタの作成と所属

これはとても簡単なので、説明は3ステップで終わる。

  1. [データセンター]を選択し、[クラスタ]から[クラスタを作成]。適当なクラスタ名を入れて完成。
    クラスタネットワークは冗長化してるのでリンクは1つでOK
  2. [Join情報]を開いて、Join用のキーをコピー
  3. 残ったほかのメンバーノードで同じく[クラスタ]から[クラスタに参加]を選択。
    コピーしたJoin情報をペーストして、Join先サーバーのrootユーザーパスワードを入力。
    [Join Cluster]を押せば完了。

うん、とても簡単。

Cephクラスタの構成

Cephのインストール

デフォルトではCephのパッケージは導入されていないので、インストール。
こちらも導入自体は簡単で、GUIでポチポチ選ぶだけ。

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

    Cephのインストールはこれで完了。
    2台目以降はCephインストール時に「構成はすでに済んでいる」と出て設定することなく終わる。
    実際各ノードでCephが動いているかの確認としてGUIでCephの状態が見られることを確認しておく。

Cephクラスタの構成

Cephのインストールと、マスターノードの設定は完了したものの、クラスタの設定がまだなのでこれから設定していく。

  1. モニタの設定
    2台目以降のノードで[Ceph]-[モニタ]を選択して[モニタ]で[作成]を選択。
    対象ホストを選択して作成する。
    今回ノードが3つだけなので、最小構成の3台(つまり全台)を設定する。
    スプリットブレインの危険があるので基本奇数で。
    基本は故障を許容する台数に1を足した数以上設定するのがいいという認識。(ただし奇数になるように)
  2. マネージャの設定
    これもHA構成にしておくのがよいのでpve2にスタンバイ機を設定しておく。
    [Ceph]-[マネージャ]を選択して[マネージャ]で[作成]を選択。
    3台目は設定してもどうせStandbyになるので2台で構成する。
  3. 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で使用する領域を確保するため、fdiskpartedを使ってパーティションを設定することになる。
さて、頑張ってコマンドで設定しよう。

  1. ディスクの確認
    一応現在の状況を確認しておく。
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のパーティションを作成する予定。

  1. パーティションの構成
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.

領域確保完了。

  1. パーティションタイプの変更
    やらなくても構築できそうな気がしなくもないけど、やっておく。
    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.
  1. パーティション確認
    ということで、設定されたパーティションはコマンド上ではこんな感じ。
fdisk
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回…

  1. OSD作成
    ノードを選択し、[Ceph]-[OSD]-[OSD作成]でOSDを作成する。
    ディスクはさっき作った/dev/sda4を選択。ほかは全部デフォルトで作成する。
    これを3台分繰り返せばクラスタは完成。

  2. クラスタの状態確認

    例によって状態の確認ヨシ!

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