PBS をやめて PVE でクラスタを構築した

Proxmox Backup Server は便利だけど、2割くらいの確率でバックアップに失敗する。バックアップはうまくいったように見えても verify でダメなケースもある。

エラーを回避するには PVE と PBS を最新バージョンに更新することが重要らしいが、更新後にエラーが生じることもあって、なかなか思うように安定しない。

ということで、自鯖環境の問題かもしれないがスッパリ PBS は諦めて PVE 2台でクラスタを構築することにした。

H470 が安定しなかった原因は、おそらくメモリ。Crucial CT16G4SFD832A を購入して ceph を1週間ほど運用してみたところ、全く問題ない。
また、SSD を使用するときは、UEFI の設定画面で明示的に SSD を指定する必要がある。
メーカーによっては接続設定が HDD のままだと安定しない。自分の環境だと少なくとも WD は設定変更が必要だった。
もっと早く気づけよと自己反省。

目次

方針

ホスト内にバックアップファイルを保存しても、ホストそのものがお亡くなりになると元も子もないから、NFS を追加した別ホストにバックアップを保存することにした。

といいつつも、新規に NFS を準備するわけじゃなくて、PVE が動作しているホストに NFS を追加するだけ。これを2台構成にして、相互にバックアップファイルを保存すれば片方が落ちてももう片方で何とかなる。

業務用じゃないからダウンタイム数日とか問題ない自鯖のメリット🙂

準備

ホスト名が pbs のままではあんまりなので MyDNS や リバースプロキシの設定は適宜、終えておくこと。

まず、既存の PVE-1 は NFS 用のディスクを確保するため、いったん全てのVM、CT を local-lvm とかに移動(クローンを作成)する。空っぽになったディスクは改めて NFS のストレージとして追加することになる。

既存 PBS はバックアップファイルしかないから綺麗サッパリ初期化して PVE-2 を新規にインストールする。NFS でストレージを追加するところまで同じ。

NFS のインストール

既存ディスクの初期化

NFS 用にfdisk で初期化する・・・前に、PVE-1 に関しては mount 情報(例は disk2)を削除しておく。管理画面左メニューの「データセンター」から「ストレージ」を選択して、不要な(NFS にする)ストレージを削除しただけだと、PVE を再起動したら見かけ上、復活してしまう。PVE-2 は新規インストールなので関係ない。

root@pve1:~# systemctl disable mnt-pve-disk2.mount
root@pve1:~# umount /mnt/pve/disk2
root@pve1:~# rm /etc/systemd/system/mnt-pve-disk2.mount

このあたりを参考に。

ディスクのマウント

使用済み SSD なので初期化する(しなくても良いかも)。

root@pve1:~# sgdisk --zap-all /dev/sda ←デバイスを間違えないように!

続いて fdisk でパーティションを作成して /etc/fstab に1行書き込む。

root@pve1:~# vi /etc/fstab
UUID=cf******-****-****-****-************ /media/disk2 ext4 defaults,nofail,x-systemd.device-timeout=1 0 0

今回は /media/disk2 を NFS で共有するためのディレクトリにしたから mkdir /media/disk2 を忘れずに。

NFS のインストールと設定

NFS のインストール。

root@pve1:~# apt install nfs-kernel-server 

NFS で共有するための設定。/etc/exports で最後の行を環境に合わせて追加する。
192.168.1.0/24 とすることで、同一セグメント LAN 内の全ての PC から NFS へアクセスすることができる。が、今回は PVE-1 と PVE-2 だけが相互にアクセスできれば良い。
ルーターのポートは開放しないなど、アクセス制限には注意すること。

root@pve1:~# vi /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/media/disk2 192.168.1.0/24(async,rw,no_root_squash,no_subtree_check)

/etc/exports を書き換えたら次のコマンドを実行して反映させる。

root@pve1:~# exportfs -ra

systemctl で自動有効化とサービスの開始と確認。

root@pve1:~# systemctl enable nfs-kernel-server
root@pve1:~# systemctl start nfs-kernel-server
root@pve1:~# systemctl status nfs-kernel-server

Proxmox VE で NFS を追加

Proxmox VE の NFS クライアント機能で接続することになる。
管理画面左のメニューの「データセンター」「ストレージ」から「追加」ボタンをクリックして NFS を選択する。画像はストレージ追加後(クラスタも構築後)のもの。

PVE-1 と PVE-2 とで、異なる ID (NFS1,NFS2など)にしておくこと。同じ ID だと、あとでクラスタを構成したときに問題が生じる(片方が見えない)。

クラスタ作成

2台構成だから機能に制限はあるものの、自分の環境では問題ない。

次のサイトで詳しく説明されている。ありがとう。
今回の注意点として、PVE-1 には2段階認証を設定しているから、PVE-2 はコマンドラインで参加させる必要があること。管理画面からは参加できないので慌てないように。
最初に2段階認証を解除してクラスタを構成(参加)して、あとから2段階認証を有効にすることもできる。

設定の流れとしては、

PVE-1 でクラスタを作成

上のサイトを参考にすれば大丈夫だと思う。

PVE-2 をクラスタに参加

2段階認証を有効にしたまま PVE-2 をクラスタに参加させる場合。
PVE-2 のコンソール(または ssh でログイン)から、コマンド pvecm でクラスタに参加する。
オプション --use_ssh を忘れないように。

例は PVE-1 の 192.168.1.3 に PVE-2 を参加させる様子。

root@pve2:# pvecm add 192.168.1.3 --use_ssh
The authenticity of host '192.168.1.3 (192.168.1.3)' can't be established.
ECDSA key fingerprint is SHA256:+iVGHyQiE0NxHzLVM1fcSAl3pbWkHMKTlbZlH5rztdU.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.1.3's password: パスワード
No cluster network links passed explicitly, fallback to local node IP '192.168.1.2'
copy corosync auth key
stopping pve-cluster service
backup old database to '/var/lib/pve-cluster/backup/config-1618122921.sql.gz'
waiting for quorum...OK
(re)generate node files
generate new node certificate
merge authorized SSH keys and known hosts
generated new node certificate, restart pveproxy and pvedaemon services
successfully added node 'h470' to cluster.
root@h470:/media# 

消えてしまった PVE-2 のサーバー証明書を再取得

クラスタに PVE-2 を参加させたらサーバー証明書が消えてしまった。なので、コンソール(または ssh でログイン)から、certbot でサーバー証明書を取得する。

root@pve2:# /usr/local/bin/renew-pve-certs.sh 

以前に書いた記事を参考に。

以降は PVE-1 側(クラスタを作成したPVE)で設定した root / password / OTP だけでログイン可能。

2段階認証を解除してからクラスタに PVE-2 を参加させた場合は、管理画面左メニューのユーザーからボタン「TFA」をクリックして設定すれば良い。

最後に

バックアップは全ての VM に対して、PVE-1 の NFS1 と PVE-2 の NFS2 に、それぞれ隔日で job を実行することにした。これで、どちらのノードにも常にバックアップが存在することになるから、どちらかが落ちても復元は容易だ。リバースプロキシが落ちても https://192.168.1.2:8006 でアクセスできるから復旧可能。最悪、ssh でログインすれば何とかなる。

せっかく NFS を取り入れたから、一通り設定が終わってから NFS に VM を作成(既存 VM のクローンを設置)してライブマイグレーションを試してみた。全く問題なし。

コメント

コメント一覧 (1件)

コメントする

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

目次
閉じる