最近ちょっとしたはずみでリソース過剰なサーバを購入してしまった。このサーバは現在運用しているPVE のクラスタに組み込む予定であるが、実運用に入る前に PVE で気になっている機能である HA と分散ファイルシステムの Ceph について検証してみる。
検証内容
検証内容は以下のとおり。
- Proxmox VE on Proxmox VE(PVE 環境 3 つ)
- Ceph による分散ファイルシステム
- PVE の HA
上記の検証を行い、実際にクラスタに組み込み共有ディスクシステムを利用するかどうか、また HA 構成にするかどうか検討する。
ハード
試験を実施するハード構成は以下の通り。
- DeskMeet X300
- 128GBメモリ(32GB x 4)
- 2TB SSD+2TB SSD
- Ryzen 5 5600G
ハードウェア組み立てについては別記事にて説明。
Proxmox VE on Proxmox VE 環境の構築
用語について
このブログの中で利用する用語
- PVE→Proxmox Virtual Environment の略
- ホストマシン、物理マシン→上記の組立後の DeskMeet X300 のこと
- pve7→物理マシンにインストールする PVE のホスト名あるいはそのものをさす。
- pve71,pve72,pve73→pve7 にインストールする PVE のホスト名あるいはそのもの。
- pve7x→pve71,pve72,pve73 の総称
- pvecl7→pve7x で構成するクラスタの名前
PVE のインストール
PVE インストールの大まかな流れ。PVE はわけあって Version 7をインストールする。
- PVE ISO のダウンロード、作業用マシンで実施
- 上記 ISO イメージを USB メモリへ書き込み、作業用マシンで実施
- 物理マシンにキーボード・マウス・ディスプレイを接続
- 物理マシンをネットワークに接続(LAN ケーブルで)
- 物理マシンで上記で作成した USB メモリから PVE インストーラーの起動
- インストール先の選択(NVMe SSD にした)、国の選択(Japan)、パスワードの設定、ホスト名・IP アドレス等々
- リブート後、ssh 接続しサーバ証明書の設定、リポジトリの書き換えを行う。
- 上記で設定したホスト名・IP アドレスを内部DNSに登録する。ついでに pve7 で動作するpve71,pve72,pve73 についても DNS の設定を行っておく。
- この後再起動し、Web ブラウザで接続する。サーバ証明書と DNS がうまく設定されていれば証明書エラーはでないはず。
- pve7 をシャットダウンし、物理マシンからキーボード・マウス・ディスプレイ・USB メモリを取り除く
PVE のアップデート
物理マシンの電源を入れ、ssh で接続する。PVE 7 から PVE 8 にアップデートする。実はこの検証を行いたかったのであえて Version 7 をインストールした。
アップデートは公式の通りでうまくいった。
PVE on PVE のインストール
pve7 での確認・設定
PVE をネストするため以下のパラメータの確認が必要である。利用する物理 CPU のメーカーによって確認するファイルが違う点に注意。AMD の CPU を積んでいるマシンでは以下のコマンドを
# cat /sys/module/kvm_amd/parameters/nested
Intel の CPU を積んでいるマシンでは以下のコマンドで確認する。
# cat /sys/module/kvm_intel/parameters/nested
この値が AMD であれば 1、Intel であれば Y になっていればネスト可能である。ネット上の情報ではこれが 0(もしくは N)のものが多いようだが、手元の PVE7 はもともと 1 であった。
もし、0 や N の場合は設定が必要なので、Proxmox の公式ページやネット上の情報を参照し設定を行うこと。
VM の作成
pve7x にはわざわざ古いものを入れる必要がないので、最新バージョンを利用する。公式サイトよりPVE version 8 の ISO イメージをダウンロードしておき、pve7 にアップロードしておく。
3 つの VM を以下のように作成する。
Disk 容量 32GB(SSD エミュレーション ON)、メモリ 16GB、CPU の Type で「host」、SeaBIOS、CD-ROM に PVE8 の ISO イメージ
PVE のインストール
各 VM を ISO イメージから起動し PVE のインストールを行う。インストール後 VM を再起動しておく。
ssh 接続しサーバ証明書の設定、リポジトリの書き換えを行う。つづいて、Web ブラウザで接続し、upgrade を行っておく。
これで、pve7 上に pve71,pve72,pve73 の 3 つの PVE がインストールされた状態になっている。
pve7x でのクラスター構成
pve71 に Web ブラウザで接続する。
Datacenter をクリック→画面右の Cluster をクリック→Create Cluster をクリック→ポップアップウィンドウでクラスタ名入力し「Create」ボタンをクリック→完成
つづいて、画面右の Join Information をクリック→ポップアップウィンドウが表示されるので左下の「Copy Information」をクリックし窓を閉じる。
つづいて pve72 に Web ブラウザで接続する。
Datacenter をクリック→画面右の Cluster をクリック→Join Cluster をクリック→ポップアップウィンドウが表示されるので Information に先ほどコピーした情報を入力し、Password: に pve71 のパスワードを入力する。さらに右下の「Join ‘pvecl7’」をクリック→タスクビューアが表示される。が、この画面の「status」をみていても途中でセッションは切れてしまいこの画面で結果を知ることはできない。がこれで正常のようである。
pve71 の画面を見ると pve72 がクラスタに追加されている。
つづいて pve73 に Web ブラウザで接続する。
Datacenter をクリック→画面右の Cluster をクリック→Join Cluster をクリック→ポップアップウィンドウが表示されるので Information に先ほどコピーした情報を入力し、Password: に pve71 のパスワードを入力する。さらに右下の「Join ‘pvecl7’」をクリック→完了
pve71 の画面を見ると pve73 がクラスタに追加されている。
Ceph の設定
Ceph のインストール
リポジトリの設定
pve7x に ssh でログインし、以下のコマンドを実行しておく。
echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" >> /etc/apt/sources.list.d/ceph.list
インストール
pve71 の管理画面→Ceph→インストール
つづいて pve72,pve73 でもインストールを行う
Monitor の追加
pve71 の管理画面→Ceph→Monitor→Monitor Create で pve72 と pve73 を追加する。pve7x のstatus は running となる。
Manager の追加
pve71 の管理画面→Ceph→Monitor→Manager Create で pve72 と pve73 を追加する。pve71 のstatus は running、pve72 と pve73 の status は standby となる。
ディスクの追加
pve7 の SATA SSD を PVE の LVM もしくは ZFS として登録する。
pve7x へそれぞれ 128GB x 1(/dev/sdb) と 16GB x 2(/dev/sdc,/dev/sdd) のディスクを追加する。
OSD の追加
pve71 の管理画面→Ceph→OSD→Create: OSD→Advanced チェック→Disk: /dev/sdb→DB Disk: /dev/sdc→WAL Disk: /dev/sdd
pve72 および pve73 でも同じ操作を行う。
Ceph プールの作成
pve71 の管理画面→Ceph→Pools→Create→プール名入力→Create ボタンクリック
この操作だけで pve72 および pve73 にも Ceph のプールが自動的に追加される。
Ceph プールを利用する VM の作成
Fedora Workstation と Server をインストールしてみる。VM 作成時にディスクを Ceph プール上に確保するのがポイント。Workstation の VID を 171、Server の VID を 172 とした。
ライブマイグレーションの実行
上記の OS で dnf update をしながらライブマイグレーションを行ってみた。特に問題なくマイグレートおよび OS のアップデートができた。
HA の設定
Proxmox VE における HA は、VM がのっかっているファイルシステムがキモとなる…なぜならば、Proxmox VE で HA するということは、VM もしくは LXC がライブマイグレーションするということであるので、Proxmox VE の Ceph か外部の共有ストレージが必要になるからである。
HA で設定する項目は、リソースとグループである。
HA リソース
HAリソースにはVMもしくはLXCを登録する。
pve7xの管理画面でDatacenter(pvecl7)→HA→Resources→Addをクリック→クラスタに登録しているVMがプルダウン表示されるので登録したいVMをクリック→HAグループを指定する場合はGroupをプルダウン画面から選択する。Groupは事前に登録しておく必要がある。
HAグループ
pve7x の管理画面で Datacenter(pvecl7)→HA→Groups→Create をクリック→ID: に HA グループ名を指定する→グループに追加したいノードにチェックをいれ、Priority: に重みを数値でいれる→右下のCreate ボタンをクリックする。
例えば HA グループ「hag1」には pve71→3、pve72→2、pve73→1 のように重みを数値で登録する。また、「hag2」には pve71→1、pve72→3、pve73→2 のように登録する。おもみは数値が大きいほうが優先される。
HA リソースを実際に登録してみる
HA リソースを、VID=171 かつグループ =hag1 のように登録すると、クラスタが正常な場合、VID=171 の VM(上記でインストールした Fedora Workstation)は pve71 で実行される。またVID=172 の VM(Fedora Server)を HA リソースに HA グループ hag2 で登録すると、クラスタが正常な場合は、pve72 で実行される。
なお、HA リソースを登録した時点で条件(HA グループの指定、ストレージ)がそろえば、優先度の高い PVE へマイグレーションされる。
fail over 試験
試験といってもこの検証環境では PVE を shutdown するくらいしかない。上記の状態で pve72 を止める(shutdown する)と、VID=172 の VM(Fedora Server)は自動的に pve73 に(ライブ)マイグレーションされるはずである。実際そのようになった。
つづいて、pve72 を起動してみる。pve72 の起動が完了ししばらくたつと、VID=172 の VM(Fedora Server)は自動的に pve72 へライブマイグレーションされる。
この動作は場合によってはおおきなお世話なので、そのまま放置できるかどうかの調査は…必要になって実施しようと思う。
検証を行ってみて
HA があると障害にも強くなるしメンテナンスも楽になるのでぜひ導入したいところ。ただ、HA するには Ceph がほぼ必須である。またある程度リソースに余裕を持たせる必要がある(特にメモリ)。採用するかどうかは費用とのトレードオフとなる。
いつも感じることであるが(特に大容量のファイルシステムが必要なときには)、堅牢な共有ファイルシステムをいかに構築するかがそのシステムの安定性に重要な部分を占めていると思う。(NFS の冗長構成をフリーソフトだけで作るのは案外難しい)。NetApp のような外部共有ファイルシステムを使うことができたら理想的なんだが…ってそんな金があるんだったら ESXi でちゃんとしたサーバでシステム組むわな。
コメント