最近ちょっとしたはずみでリソース過剰なサーバを購入してしまった。このサーバは現在運用している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にアップデートする。実はこの検証を行いたかったのであえてVersion7をインストールした。
アップデートは公式の通りでうまくいった。
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をしながらライブマイグレーションを行ってみた。特に問題なくマイグレートできた。
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でちゃんとしたサーバでシステム組むわな。
コメント