Proxmox VE 9.0で導入された「Affinity Rules」は、従来のHAグループに代わるHA設定です。
この記事では、Affinity Rulesの概要、HAグループとの違い、代表的な設定例を紹介します。
Affinity Rulesとは?
Proxmox VE 9.0からHAマネージャ(ha-manager)で利用可能になった、HA管理対象リソース(VM/CT)の配置を制約するルールです。
Node Affinity Rules・Resource Affinity Rules という2種類のルールを持ち、従来のHAグループはNode Affinity Rulesに引き継がれます。
2種類のルールを活用することでHAグループよりも柔軟な可用性を提供することが可能です。
一方で、不適切な設定時にはリソースの想定外のノードでの起動や停止につながるため、注意が必要です。
Node Affinity Rulesとは?
従来のHAグループと同等の機能であり、HAリソースを特定ノードへ配置する設定です。
インプレースアップグレードを行った場合にはHAグループの設定がNode Affinity Rulesに引き継がれます。
設定項目は以下の通り。

| 項目名 | 入力値 | 備考 |
|---|---|---|
| HA Resources | 対象リソースを指定 | |
| ノード | 対象ノードを指定 | |
| プライオリティ | 数値 | 数字が大きいノードで優先的に動作する。 同じ値に設定することも可能。 |
| Strict | 有効/無効 | 有効時は対象ノードのみでリソースが動作する。 無効時は対象ノード以外へのFallbackを行う。 |
HAグループのnofailback設定はHA全体のfailbak設定に移管されました。また、nostrictからstrictに変更されました。
各ルール選択時に編集ボタンはグレーアウトしており選択できませんが、ルールをダブルクリックすることで編集することが可能です。
Resource Affinity Rulesとは?
新規追加された機能です。
複数のHAリソース間の関係を定義し、Keep Together/positive(同一ノードにまとめる)または Keep Separate/negative(異なるノードへ分散)を指定します。
同一ノードで動作させたいVM(Web/AP/DBなど)をKeep Together/positiveに、別ノードで動作させたいVM(負荷分散を行いたい同一種別のVMなど)をKeep Separate/negativeに設定することで、想定の動作をさせることが可能です。
設定項目は以下の通り。

| 項目名 | 入力値 | 備考 |
|---|---|---|
| HA Resources | 対象リソースを指定 | 2つ以上の指定が必要 |
| Affinity | Keep Together/Keep Separate |
設定画面のポップアップではKeep Together/Keep Separateと表示されていますが、Affinity Rules の画面や設定ファイルではpositive/negativeと表記されます。
Node Affinity Rules 同様に、各ルール選択時に編集ボタンはグレーアウトしており選択できませんが、ルールをダブルクリックすることで編集することが可能です。
設定例
Node Affinity Rulesであれば、VMを実行するノードを指定できるため、より厳密な制御をすることが可能です。
Resource Affinity Rulesと同等の設定をすることも可能ですが、ノード数が多い場合にはクラスタノードの数だけNode Affinity Rulesを設定する必要があり、設計・設定のコストが高いケースもあり得ます。
そのようなケースでResource Affinity Rulesを利用するとリソースの配置ポリシーだけを設定するため、クラスタの規模に設計・設定が依存せず、優位と考えられます。
ただし、Resource Affinity Rules でどのノードに対してマイグレーションを行うかは、HAマネージャーによりノードの正常性・CPU/MEMなどのリソース割り当て可否により判断されます。
クラスタ内のすべてのノードが候補となり、実際のCPU/MEM利用率やワークロードなどは考慮されないため、注意が必要です。
なお、この動作はNode Affinity Rules、Resource Affinity Rulesを利用せずにリソースをHA対象にした場合と同じです。
詳細な仕様は以下もご参考ください。
High Availability Cluster Resource Scheduling
Node Affinity Rules で、複数VMを単一ノードへHAする場合。
画像のように設定しました。

この設定では正常時にノード3でリソースは動作します。
ノード3が停止した場合、ノード3のリソースはノード2へ移動します。
実際の環境では各ノードごとに優先度をずらしたNode Affinity Rulesを設定し、各ノードで動作するリソースを割り当てるケースが多いと考えらえます。
Node Affinity Rules で、複数VMを複数ノードへHAする場合。
画像のように設定しました。

正常時にノード3でリソースが動作する点は前項と同様です。
ノード3が停止した場合、ノード3のリソースはノード1、2で同じプライオリティのため、ノード1,2に分散してマイグレーションされます。
どのように分散するかはHAマネージャーにより評価されます。
Resource Affinity Rules で、複数VMを単一ノードへHAする場合。(Keep Together/positive)
画像のように設定しました。

正常時にどのノードで動作するかの指定はしていません。
どちらかのリソースに対して手動でのマイグレーションを行った場合は、他のリソースも併せてマイグレーションされます。
障害発生時にも同様に、同じノードに対してマイグレーションされます。
また、複数のResource Affinity Rulesの対象になっているリソースが同じノードで動作している場合、HAマネージャーにより評価され、マイグレーション先ノードが決定します。
Resource Affinity Rules で、複数VMを複数ノードで動作させる場合。(Keep Separate/negative)
画像のように設定しました。

画像のように設定しました。
前項同様に、正常時にどのノードで動作するかの指定はしていません。
手動でのマイグレーションを行い際に、同じルールの他リソースが動作しているノードへのマイグレーションはできません。
障害発生時は同じルールの他リソースが動作していないノードの中から、HAマネージャーにより評価され、マイグレーション先ノードが決定します。
クラスタ内ノード数と対象リソース数が同じ場合等、動作可能なノードがなければ、マイグレーションを行わずにリソースは停止します。この点はKeep Separate/negative利用時の注意点と言えるでしょう。
Node Affinity RulesとResource Affinity Rules を併用する場合。
画像のように設定しました。


このように、Node Affinity RulesとResource Affinity Rules は併用することが可能です。
ですが、併用した場合はNode Affinity Rulesで複数のノードを指定することはできません。
つまり、クラスタが正常な状態でリソースが動作するノードだけを指定可能な状態です。
またこの状態であればFailbackオプションが動作します。
この例ではKeep Together/positiveで設定していますが、Keep Separate/negativeでも同様の設定が可能です。
設定の競合・エラー
Node Affinity Rules と Resource Affinity Rules の設定に競合があった場合、警告により設定投入ができないようになっています。
ですが、各ノード・リソースの状況によっては競合によるエラーが発生する可能性があります。
競合とエラーの確認は以下に基づいて評価が行われます。
https://pve.proxmox.com/pve-docs/chapter-ha-manager.html#ha_manager_rule_conflicts
株式会社クラスアクトは2023年2月にリセラーパートナー契約を締結して以来、日本初の Gold Reseller Partnerとして、豊富な経験と高い技術力を誇っております。 Proxmoxに関するご質問、サブスクリプションのご購入、システム開発のご相談など、お気軽にお声がけください。
