クラスタグループにおいて優先する所有者という設定があります。これは主に、フェールオーバー順やフェールバックの戻り先を設定するために使用します。ただし、優先所有者として指定されなかったノードにフェールオーバーしないわけではないことに注意が必要です。
仮に8ノードのクラスタがあったとします。そのうち、NodeA→NodeB→NodeCの順に優先所有者の設定を行います。順にNodeAがダウンするとNodeBへフェールオーバー、NodeBがダウンするとNodeCへフェールオーバー、NodeCがダウンするとランダムなノードへフェールオーバーということになります。
実行可能な所有者という設定があります。リソースの詳細なポリシーに存在するものです。これはどのような時に使用するのか?
仮に4ノードクラスタが存在しています。この時NodeDが待機系だとします。いわゆるActive / Active / Active / Passive (AAAP)の構成です。この時はまず優先所有者でNodeAに対してはNodeAとNodeDにチェックを入れます。こうすれば待機系のマシンにフェールオーバーしてくれますね。しかし、この設定だけだと仮にNodeDがダウンすると他のノードにフェールオーバーしてしまいます。そこで「実行可能な所有者」の設定が生きてきます。この「実行可能な所有者」はまさにそのノードでしか実行を許しません。よって確実に待機系ノードでのみ実行させる場合には優先所有者の設定と同時に、実行可能な所有者の設定も行います。
しかし、この設定もNodeDが障害を起こすと困ります。そこで、待機系ノードを複数台用意します。そうすれば、懸念材料が少なくなります。が、ここでまたまた問題が・・・待機系ノードにフェールオーバー後に、他のノードも同じ待機系ノードにフェールオーバーしてくる可能性がありますね。
こんなときは「AntiAffinityClassNames」を使用します。
参考:ホット スペア サポートのための Windows クラスタ グループ構成方法
cluster group “<グループ名>” /prop AntiAffinityClassNames=”<一意の識別名>”
この設定はグループに対して行うもので、AntiAffinityClassNamesに同じ名前がある場合には、それを除く優先所有者の設定が使用されます。ですので仮に、NodeDとNodeEが待機系ノードで、NodeDにグループAがフェールオーバーしてきます。その後グループBがフェールオーバーして来たとします。
グループBの設定は優先所有者がNodeB、NodeD、NodeEの順番で、なおかつ実行可能な所有者も同様です。この場合、まずNodeDに対してフェールオーバーしようとしますが、グループAとグループBに対してAntiAffinityClassNamesに同じ名前を設定してある場合は、NodeDを除外した優先所有者が使用されます(NodeDにグループAがいるため)
よって、優先所有者のNodeEが使用されることになります。
AntiAffinityClassNamesの動作は、絶対ではありません。なぜなら、もし同じ名前しかなかった場合はその中でフェールオーバーします。ですので、この設定は優先所有者の拡張版と捉えることができますね。
あくまでも強制力を持たせるのは、実行可能な所有者の設定になります。