清水理史の「イニシャルB」

ラズパイ×2+NASでライブマイグレーション可能な自宅Proxmox VEクラスタを構築する

 以前、Proxmox VEでGPUパススルーを利用する方法を紹介したが、今回は複数台のサーバーでクラスタを作成し、稼働させたままのVMをノード間で移動できるライブマイグレーションを試してみた。

 今回はひとまず、Raspberry Pi 4 Model Bを2台利用し、かつ共有ストレージとしてSynologyのNAS(DS716+)を利用。これで最低限の環境を構築してみた。

利用したハードウェアはRaspberry Pi 4 Model B。写真は4台あるが、今回はこのうちの2台を利用した

Raspberry Pi向けの「Pimox」

 Proxmox VEは、オープンソースの仮想化プラットフォームだ。DebianベースでKVMによる仮想マシンとLXCによるコンテナが利用可能になっており、サポートなしの無償版を利用することで、自宅でも簡単に仮想マシン環境を構築できる。

 今回は、このProxmox VEのRaspberry Pi版である「Pimox」を利用して、複数台のノードでクラスタを作成してみた。

▼Pimoxをダウンロードする
pimox/pimox7(Github)

 本来であれば、ハードウェア障害を検知して自動的に仮想マシンを他ノードへ移動するHA(High Availability)を利用したいところだが、まずは入門として、最低限の構成で利用できるシンプルな2ノード構成のクラスタを作成することにする。

 なお、稼働させたまま仮想マシンを別のRaspberry Piへと移動するライブマイグレーションを利用するには、各ノード(Raspberry Pi)がストレージを共有している必要がある。このため、今回はSynologyのNASを利用してネットワークで共有可能なストレージ(NFS)を用意し、ここに仮想マシンのディスクイメージを配置することにした。

 NAS上のディスクイメージは、どのノードからも参照可能なため、仮想マシンをノード間で移動させる際にディスクのコピー操作が必要なく、メモリのコピーのみで移動が可能になる。

 実際の移動時間はメモリ容量とネットワークの速度次第だが、仮想マシンを稼働させたまま、1分以内に移動できるようにしてみた。

Pimoxをインストールし、クラスタを作成する

 Pimoxのインストールは、上記サイトのドキュメントを参考にすれば簡単にできる。Raspberry Pi Imagerを使って「Raspberry Pi OS Lite(64bit)」をMicroSDカードに書き込んで起動後、以下のコマンドを実行し、画面表示に従ってIPアドレスや管理者パスワードを設定すれば、Raspberry Pi 4 Model BがProxmox VEサーバとして稼働する。

1.sudo -s
2.curl https://raw.githubusercontent.com/pimox/pimox7/master/RPiOS64-IA-Install.sh > RPiOS64-IA-Install.sh
3.chmod +x RPiOS64-IA-Install.sh
4../RPiOS64-IA-Install.sh

Raspberry Pi 4 Model BにProxmox VEをインストール

 同じ作業を2台目のRaspberry Pi 4 Model Bでも実施後、Proxmox上でクラスタを作成する。

 1台目のノードの管理画面から、「データセンター」の「クラスタ」を開き、「クラスタを作成」をクリックする。クラスタ名を設定すると(ネットワークは同一でOK)、クラスタが作成される。

 続いて「Join情報」をクリックし、ほかのノードをクラスタに参加させるための文字列をコピーする。

1台目でクラスタを作成し、Join情報をコピー

 Join情報をコピーしたら、2台目のノードの管理画面にアクセスし、「データセンター」の「クラスタ」から「クラスタJoin」をクリックし、コピーした文字列を貼り付ける。すると、参加のための情報が自動的に構成されるので、最後に、1台目のノードの管理者パスワードを入力して「Join」をクリックする。これでクラスタが構成される。

 2台目の管理画面はしばらくするとタイムアウトするので、1台目の管理画面に戻ると、左側の一覧に1台目と2台目の両方のノードが表示され、以後、1つの画面で全てのノードを管理可能になる。

2台目にJoin情報を貼り付けると自動的にクラスタが構成される
クラスタが構成すると単一の管理画面から2つのノードを管理でき、ノード間でマシンを移動させることが可能になる

NFS共有を作成し、ストレージに追加する

 続いて、仮想マシンのストレージを保管するためのNFS共有を作成する。今回はSynologyのNASを利用したので、管理画面の「コントロールパネル」から「ファイルサービス」の「NFS」を選択し、「NFSサービスを有効化」にチェックを付ける。

 続いて、「共有フォルダ」の設定で、仮想マシンを保存するためのフォルダを作成し、「NFS権限」タブで、アクセス用のルールを設定する。今回は、テスト環境なので特に制限は設定せず、全てのホストから接続できるように以下のように設定した。

ホスト名またはIP:*
特権:読み取り/書き込み
Squash:マッピングなし
セキュリティ:sys
非同期を有効にする:オン

SynologyのNASを利用してNFS共有を作成

 続いて、Proxmoxのストレージに、今作成したNFS共有を追加する。「データセンター」の「ストレージ」で「追加」をクリックし、「NFS」を選択。以下のように構成する。

ID:任意の名前(例:NFSNAS)
サーバ:NASのIPアドレス
Export:上のサーバを設定すると選択可能な共有が一覧表示されるので作成した共有を選択
内容:ディスクイメージ(コンテナを保管する場合はコンテナも選択)
ノード:全部(無制限)
有効:オン

 追加して、しばらく待つと、左側の一覧に表示されている全てのノードに、作成したNFSストレージが表示される。これで、NAS上の共有フォルダを全てのノードから利用できるようになった。

Proxmox VEにNFSを追加

参考:iSCSIも利用可能

 ちなみに、NASを仮想マシンの保管場所として利用する方法としては、上記NFSのほかにiSCSIを利用する手もある。

 ただし、iSCSIはProxmoxに標準でインストールされていないため、以下を参考にインストールする必要がある。といっても、シンプルに「apt install open-iscsi」を実行するだけだ。インストール後、ノードを再起動すれば、ストレージでiSCSIを追加する際に、NASのiSCSIターゲットを認識できるようになる。

▼iSCSIの解説(Proxmox 英文)
Storage:iSCSI

Proxmox VEでiSCSIを利用するには各ノードにOpen iSCSIのインストールが必要

仮想マシンを作成する

 環境が整ったら、仮想マシンを作成する。この際、注意点が2つある。

IDE接続のCD/DVDドライブ

 1つ目はIDE接続のCD/DVDドライブだ。Proxmoxでは標準で仮想マシン用の「CD/DVDドライブ」をIDEで作成するが、Raspberry Piの場合、IDEは利用できない。このため、仮想マシン作成時のウィザードでは何もメディアをマウントせずに、一旦、設定を進め、仮想マシン作成完了後に、「ハードウェア」画面から標準で作成された「CD/DVDドライブ」を削除し、新たにSCSI接続で「CD/DVDドライブ」を追加、そこにOSインストール用のメディアをマウントしておく。

 さらに、「オプション」でブート順を変更し、作成したSCSI接続のCD/DVDドライブから起動するように設定しておく。

Raspberry Pi環境ではIDEを認識できないのでSCSI接続でCD/DVDドライブを構成し直す

UEFI/ハードディスクの保存先

 もう1つは、ストレージの保存先だ。「システム」の設定にあるBIOSで「OVMF(UEFI)」を選択した場合、EFIの保存先を選択する必要があるが、このときNFS共有を選択する必要がある。同様に「ディスク」の設定で「ストレージ」も必ずNFS共有を選択する。

各ノードでストレージを共有できる必要があるのでディスクはNFS上に作成する

 このように、仮想マシンを構成するデータが、ノード間で共有できる状態でないと、マイグレート実行時に、ストレージもコピーしなければならなくなってしまう。ダウンタイムを短時間にするために、仮想マシンの動作に必要なストレージ関連は全てNFSに保存しておく必要がある。

 なお、これ以外の構成はお好みでかまわないが、個人的には「ディスク」で「SSDエミュレーション」をオン、CPUで種別を「host」に設定している。メモリも好みだが、今回はホストのRaspberry Pi 4 Model Bが8GB搭載なので、仮想マシンにさほど多くメモリを割り当てられない。

 また、メモリを多くすると、ライブマイグレーション実行時に、メモリのスナップショットのコピーに時間がかかる。ダウンタイムを短くしたいなら、メモリの容量も最低限にしておく必要がある。

30秒ほどでマイグレーションは完了できる

 さて、環境が用意できたので、実際にライブマイグレーションを実行してみよう。移動したのは、Debian 11のGUI環境だ。

ログインして、フォルダを表示した状態のままにし、この状態が移動後も維持されるかどうか、どれくらいの時間で移行できるかを確認してみた。

 Proxmoxの管理画面で仮想マシンを右クリックし「マイグレート」を選択し、「ターゲットノード」で移行先を選択し、「マイグレート」をクリックすると、ノード間の接続確立後にメモリのコピーが開始される。

Debianを起動したまま別のノード(Raspberry Pi)へと移動させる
メモリ(2GB分)がノード間でコピーされ、約30秒で別のノードへと移動が完了
ライブマイグレーションなので、もちろん仮想マシンは稼働したまま移動する

 今回は、1Gbpsのネットワークで2GBのメモリをコピーすることになったが、結果としては30秒ほどで移行が完了した。

 もちろん、ライブマイグレーションなので、移行前の仮想マシンの状態は維持されたままだ。ログインし、フォルダが表示された状態が、そのまま再現された。瞬断はあるが、最低限のダウンタイムでマシン間を移動できる。

 なお、マイグレーションできる場合でも、それぞれのノード上のローカルストレージに仮想マシンが保存されている場合、ディスクのコピーが必要になり、移行に時間がかかる。また、オンラインで移行できない場合は、再起動モードと表示され、仮想マシンの停止が必要となる。

作業自体は簡単だが、Raspberry Piの価格が最大のネック

 以上、今回はPimoxを利用したクラスタでライブマイグレーションを試してみたが、かなり簡単にできることに感心した。ストレージの種類の選択がポイントになるが、NASを利用すればNFSでもiSCSIでも簡単に用意できるので、自宅サーバの仮想化に最適だ。

 ちなみに、3台利用したHAや、分散ストレージのCephを利用した構成も試したのだが、Cephは多くのメモリが必要で、メモリ増設不可能なRaspberry Piでは荷が重い印象だ。このあたりは、別の環境で試してみたいところだ。

Cephを利用することで各ノードのローカルストレージ(USB SSD)を共有ストレージとして構成できるが、メモリがかなり消費されてしまう

 しかしながら、Raspberry Piの価格高騰は頭が痛い。2022年10月時点でのAmazon.co.jpの実売価格は、4GB版で2万3000円前後もする。今回の構成で使用したのは8GB版で、購入したのは2021年1月だったが、このときの価格は9000円前後だった。

 本稿のような「遊び」が気軽にできなくなってしまったのは、とても残念だ。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。