はじめに
仮想マシンをNutanixのような複数のノードで冗長化された基盤(HCI)で安定的に動作させるためには、アフィニティなどの考え方を抑えることが大切です。
この記事では、前提となるNutanixのリソース配分機能であるADSについて述べてから、アフィニティとアンチアフィニティについて解説します。
ADSとは
ADSとはAcropolis Dynamic Schedulingの略称で、Nutanixのクラスターリソースを最適に使用することを可能としている機能です。
リソースの使用状況によって、負荷の少ないノード(AHVホスト)へ自動的にライブマイグレーションをしてくれます。
以下のような特徴があります。
- 15分毎に動作しその時点でのリソース状況を分析する。
- 15分以上、AHVノードのリソース使用率が85%を超過する場合は、ホットスポットを回避するためマイグレーションがトリガーされる。
- ストレージのホットスポットの場合、過去40分間のデータを確認。
- CPUホットスポットの場合、過去10分間の平均CPU使用率を確認。
- メモリやネットワークについてはADSの監視対象外。
- 一部の機能を有効化している場合(agent VM, PCIe Pass-through, CPU Pass-through, vUMA, vNUMAなど)は対象外となります。他のノードへ自動的にライブマイグレーションしません。
アフィニティ(VM-Host Affinity)
VMが稼働することができるノードを限定する機能です。例えば10個のノードが存在し、順番に1-10号機とします。1-5号機のみで、とあるVMを稼働させたい場合に使用します。
CLIで設定する場合
コマンドラインで行う場合は以下のようなコマンドを投入します。AHVのUUID数は適宜変更してください。
nutanix@CVM:acli vm.affinity_set "VM名" host_list="AHV_UUID1","AHV_UUID2","AHV_UUID3"
※VMHAの設定が1の場合は2つ以上のAHVを選択する必要があります。2つ以上を選択しなければエラーとなります。
※VMHAの設定が2の場合は3つ以上のAHVを選択する必要があります。3つ以上を選択しなければエラーとなります。
VMHAについては次の記事で解説しています。
GUIで設定する場合
GUIで設定する場合は、Prism Elementで仮想マシンを作成・更新するときに設定項目があります。
クリックすると、ノードが表示されるのでVMを稼働させたいノードを選択します。
設定が完了すると、以下のように表示されます。
アフィニティの設定確認について
アフィニティの設定を確認するコマンドは以下となります。
nutanix@CVM:acli vm.affinity_nodeget "UUID"もしくはVM名
設定がされていない場合は次のようなメッセージが表示されます。Trueならばアフィニティが設定されていないことを意味します。
default_to_all: True
アフィニティ設定がされている場合は以下のように表示されます。アフィニティが設定されているノードのIPアドレスが表示されます。
default_to_all: False
node_uuid_list: "192.168.0.202"
node_uuid_list: "192.168.0.201"
アフィニティの設定を解除する場合
アフィニティを解除する場合は以下のコマンドで可能です。
nutanix@CVM:acli vm.affinity_unset "VM名" host_list="AHV_UUID1","AHV_UUID2","AHV_UUID3"
注意点
1つのノード(ホスト)のみでVMを動作させるためにアフィニティを使用しないのが望ましいです。VM作成(更新)時にagent-VMを有効化すれば特定のノード(ホスト)でのみ動作します。ただし、任意のホストで動作させることはできません。
アンチアフィニティ(VM-VM anti-affinity)
指定したVM(必ず複数)が同じノードで動作しないようにする機能です。例えば、DBでプライマリ/セカンダリ構成をとっている場合、ノードがダウンした場合に、プライマリとセカンダリが同じノードで動作しているならば、冗長化した意味がありません。
そこで、アンチアフィニティを設定して同じノードで稼働しないようにする必要があります。
CLIで設定する場合
コマンドラインで行う場合は以下の流れとなります。
①グループを作成する
nutanix@CVM$ acli vm_group.create VM_AA_Group-Name
②そのグループにアンチアフィニティの対象となるVMを入れる。
nutanix@CVM$ acli vm_group.add_vms VM_AA_Group-Name vm_list=VM1,VM2
③アンチアフィニティを有効化する。
nutanix@CVM$ acli vm_group.antiaffinity_set VM_AA_Group-Name
GUIでも可能です(Prism Centralのみ)。
アンチアフィニティの設定確認について
①グループの中に所属するVMを確認する場合
nutanix@CVM:acli vm_group.list_vms VM_AA_Group-Name
②アンチアフィニティのグループを確認する場合
nutanix@CVM:acli vm_group.list
アンチアフィニティの設定を解除する場合
無効化する場合は、以下のコマンドを投入します。
nutanix@CVM$ acli vm_group.antiaffinity_unset VM_AA_Group-Name
注意点
アンチアフィニティはアフィニティと異なり必ず順守されるポリシーではありません。リソース次第では同じノードで動作する可能性はあります。必ず同じノードで動作させないようにするためにはVMHA(Virtual Machine high Availabity)を設定する必要があります。
VMHA(Virtual Machine high Availabity)については、以下の記事で解説しております。
VMHAを考慮したアフィニティとアンチアフィニティの設定について
アフィニティ
- VMHAでacli ha.update num_host_failures_to_tolerate=1を設定した場合には、アフィニティ対象のノード(ホスト)は2つ以上にする必要があります。
- VMHAでacli ha.update num_host_failures_to_tolerate=2を設定した場合には、アフィニティ対象のノード(ホスト)は3つ以上にする必要があります。
アンチアフィニティ
- VMHAでacli ha.update num_host_failures_to_tolerate=1を設定した場合には、アンチアフィニティのグループ内のVM数はクラスタのノード数-1とします。
- VMHAでacli ha.update num_host_failures_to_tolerate=2を設定した場合には、アンチアフィニティのグループ内のVM数はクラスタのノード数-2とします。
- このようにすることで、リソース不足によって同じノードでVMが動作することを防ぐことが可能となります。
コメント