PVEの２ノードHAクラスターは動きそうだけどやっぱり怪しい

:::note info
作成日：2024/6/30
編集日：2024/7/8
PVE 8.2.2
:::

:::note warn
開発元より推奨されていない2ノードでのHAに関する内容です。
有償・無償の各種サポートが受けることができない~~可能性があります~~です。
※本家に問い合わせた結果、サポート対象外とのことでした。
:::



## TL;DL

- 2ノードクラスターでも設定ファイルを変更することでHAクラスターを構成することは可能
- でも挙動はやっぱり怪しい
- 技術的には動くかもしれないけど、サポートされるかは本家~~確認が必要~~からサポートされない旨、回答を受領。
    - やりたい場合はQデバイスを使った2+1とするか、1ノード追加して3ノードとするかが必要。
    - ~~あるいは、自己責任で運用~~
## 概要

こちらの記事でPVE（Proxmox Virtual Enviroment）の２ノードクラスターの冗長性はない（障害発生などによりQuorateを満たせなくなると、読み取りモードになってしまいVM/CTの起動が出来なくなる）という話をしました。
https://qiita.com/oishi-d/items/0954ed9adb0875577f32


ですが、その後以下の記事で設定ファイルを変更すればその状況を回避できることを知りました。
https://qiita.com/Pon2G/items/1ee31b1b33a142edaa60


なので、本家に推奨されていないことは承知しつつも、２ノードでHAクラスターがちゃんと動くかを確認してみました。


## 2ノードクラスターの需要
VMware 製品からの移行を前提になりますが、現行の構成が2ノードの場合もあるので、結構あります。

前回の記事でPVEノードを一つ追加するか、Qデバイスを追加すれば大丈夫、という話を書きましたが、クラスターを構成すればサブスクリプション購入も必要（サブスクリプションの制約として、同じクラスター内のサブスクリプションプランは同一にする必要がある）になりますし、Qデバイス利用でもHW調達は必要になります。
HW調達については個人利用の感覚で「Amazonのスマイルセールで4ケタ台の格安PCをポチればいいのでは？」と思っていましたが、企業の場合そうも行かないので、コスト増につながります。

またNWや電源などの足回りも見直す必要があるので、2ノードHAクラスターができるのであればそのほうがよいのは間違いありません。





## 設定変更
`/etc/pve/corosync.conf`に`two_node: 1`を追記します。

```
quorum {
  provider: corosync_votequorum
  two_node: 1
}
```

## クラスターの動作確認
`pvecm status` で確認します。
### 設定変更前
```
root@pve1:~# pvecm status 
Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2  
Flags:            Quorate 

```


### 設定変更後
```
root@pve1:/etc/pve# pvecm status 
Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           1  
Flags:            2Node Quorate WaitForAll 
```


### 1ノード停止時
`Quorum`がデフォルトの2から1になっていて、`Total votes`を満たしているため、起動しているPVEノードは読み取りモードへ移行しません。

```
root@pve1:/etc/pve# pvecm status 
Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      1
Quorum:           1  
Flags:            2Node Quorate WaitForAll 
```

## HAの動作確認
挙動が結構怪しかったので、クラスターを作り直して確認しました。
各挙動に再現性がなく、後述のそもそもサポート対象なのか？の話があるので、深くは追っていません。

1. 作成済みクラスターの設定を変更した場合
2. 新規作成したクラスターの場合


### 作成済みクラスターの設定を変更した場合
もともと作成済みのクラスターの設定ファイルを変更して確認しました。
その際の動作は以下です。

1. 片方のノード停止時に正しくマイグレーションされる
2. 片方のノード復旧後、ZFSレプリケーションが失敗する
3. レプリケーションが失敗するので、マイグレーションが行えずにVM/CTは片寄になった状態から動かせずにHAクラスターでなくなる…


### 新規作成したクラスターの場合
前述のクラスターを破壊して新規クラスターで確認した場合です。

1. 片方のノード停止時に正しくマイグレーションされる
2. もう片方のノード停止時に、ゲストのうち1つだけマイグレーションに失敗。
3. 停止したノード復旧後、マイグレーション失敗したゲストも問題なく動作。手動マイグレーションも問題なし

## 大切なのは開発元によるサポートを受けられるかどうか
色々試したものの、挙動が怪しいかつ再現性がないので困ってしまいました。
しかもこの環境はPonP（Proxmox on Proxmox）だったり、HWがしょぼかったりで色々と怪しい…

いずれにしても商用環境で2ノードクラスターをHAで組むには開発元のお墨付き必要です。

以下のフォーラムを確認したのですが、開発元から2ノードクラスターを組まないでと言われているわけでもないので微妙…
https://forum.proxmox.com/threads/cluster-with-only-two-nodes.57766/

というわけで、リセラーの窓口使って聞いてみる＆要望として送ってみようと思います。
※PVEというよりもCorosyncの仕様による部分もあると思うのですが、開発元のスタンスとしては「Proxmox部分以外には関与しない」ではなく、「必要であればOSS コミュニティ等にも働きかけていく」という感じなので、声が多ければチャンス広がるかも？

微妙な問題なのはリセラー窓口使っちゃうと個人の見解なのかリセラーとしての見解なのか微妙になっちゃう点。
公式からポジティブな解凍をもらった際に、Qiitaでない場所でのアナウンス（準備中のリセラーのブログとか）になっちゃうかもしれません。

### 問い合わせした結果、サポートされない。
```
no, two node HA is not possible.
If you have only two real nodes, please configure a qdevice (so you get three votes in your cluster)
```
CEO「2ノードHAは不可です。Qデバイス使って2+1にしてね。」
と言われてしまいました。

※以前イベントなどでマーティンをCTOと呼んでた時もありますが、CEOの間違いでした。
※サポート回答結構くれるからついCTOかと…



## 参考
https://qiita.com/oishi-d/items/0954ed9adb0875577f32


https://qiita.com/Pon2G/items/1ee31b1b33a142edaa60

https://forum.proxmox.com/threads/cluster-with-only-two-nodes.57766/