Re:Q Tech Blogをご覧いただきありがとうございます。インフラ技術部のT.Yです。
本記事では、OLVMのアフィニティグループという機能について説明します。
OLVMの基本的な説明は省きますので、そちらについて知りたいという方はぜひ以下の記事をご覧ください!
■基本シリーズ
第1回:Oracle KVMとOLVMについて
第2回:Oracle KVM 要件と構築について
第3回:OLVM構築 - セルフホステッドエンジン方式
第4回:OLVM構築 - スタンドアロン方式
第5回:OLVM - Oracle KVM追加・設定
第6回:OLVM - 仮想マシン作成
1.アフィニティグループとは
初めに、アフィニティグループがどういった機能なのか簡単に説明します。
アフィニティグループとは、同一クラスタ内のKVMホスト(KVMを搭載したLinuxサーバ)、仮想マシン(以下VM)に対して、稼働ルールを定義することができる機能です。
VMの稼働を制御するルールとして、ポジティブ、ネガティブの2種類があります。
アフィニティグループを設定することにより、以下のようにVMの稼働を制御することができます。
同一クラスタ内にVM2個(VM#1,VM#2)、KVMホスト2個(KVM#1,KVM#2)が存在する場合の例になります。
| 組み合わせ | ルール | VM稼働ルール |
| VM#1-VM#2 | ポジティブ | VM#1,VM#2が同一のKVMホストで稼働する |
| VM#1-VM#2 | ネガティブ | VM#1,VM#2が異なるKVMホストで稼働する |
| VM#1-KVM#1 | ポジティブ | VM#1がKVM#1上で稼働する |
| VM#1-KVM#1 | ネガティブ | VM#1がKVM#1以外のKVMホストで稼働する |
実際の設定画面とより詳細な設定方法については記事の後半で説明します。
2.OLVM,VMwareの設定方法 | 対応関係
本記事はOLVMのアフィニティグループの紹介になりますが、仮想基盤として広く使われているVMwareにも
同様の機能としてアフィニティルールという機能があるので、そちらについても併せて紹介いたします。
OLVMとVMwareそれぞれの設定の対応関係についても説明いたします。
2-1.OLVM-アフィニティグループ設定方法
アフィニティグループの設定はVMポータルから行うことはできず、管理ポータルからのみ設定可能となっています。
管理ポータルにアクセス→「コンピュート」→「クラスター」→対象のクラスタを選択→「アフィニティーグループ」タブから、現在クラスタに設定されているアフィニティグループを確認することができます。
「新規作成」を選択すると、アフィニティグループの設定ウィンドウが開きます。
①VM間のルールを無効(ルールなし)、ポジティブ、ネガティブから選択できます。
「Enforcing」を有効にするとHAなどの強制的な移動の際にも適用され、ルールを満たさない場合は稼働しなくなります。
②VM-KVMホスト間のルール、および「Enforcing」の設定を①と同様に行うことができます。
③対象とするVM、KVMホストを選択できます。+.-ボタンで対象の増減が行えます。
また、「アフィニティーラベル」タブよりアフィニティラベルの設定を行うことができます。
アフィニティラベルはVM,KVMホストをグループとして保存できる機能です。
作成したグループをアフィニティグループの設定で選択することにより、対象とするVM,KVMホストを
一括で追加することが可能です。
2-2.VMware-アフィニティルール設定方法
vSphere Clientにアクセス→左ペインより対象クラスタを選択→「構成」タブの「仮想マシン/ホスト ルール」
「仮想マシン/ホスト グループ」より設定を行うことが出来ます。
![]()
仮想マシン / ホスト ルールがOLVMでのアフィニティグループに該当します。ルール、および対象の選択が行えます。
仮想マシン/ホスト グループがOLVMでのアフィニティラベルに該当し、VM、ESXiホストのグループ化を行えます。
前述の仮想マシン / ホスト ルールでVM、ESXiホスト間のルールを定義するためには設定が必須になります。
2-3.対応関係
基本的にはOLVM、VMwareで同様のルールを定義することができますので、それぞれの設定の対応を下表にまとめます。
| VM稼働ルール | VMware | OLVM |
| VM#1,#2が同一ホストで稼働する | 仮想マシンを一緒に保存 VM#1,VM#2 | VM#1-VM#2 ポジティブ |
| VM#1,#2が異なるホストで稼働する | 仮想マシンを個別に保存 VM#1,VM#2 | VM#1-VM#2ネガティブ |
| VM#1がホスト#1でのみ稼働する | 仮想マシンからホストへ:グループ内のホスト上で実行する必要があります VM#1,ESXi#1 | VM#1-KVM#1ポジティブ |
| VM#1がホスト#1以外で稼働する | 仮想マシンからホストへ:グループ内のホスト上で実行しない必要がありますVM#1,ESXi#2 | VM#1-KVM#1ネガティブ |
3.アフィニティグループの活用例
ここでは、アフィニティグループの活用例としてOracle RAC構成での設定をご紹介します。
仮想基盤上でのOracle RAC構成では以下の2つの可用性について考慮する必要があります。
①VMレベル(VMに障害発生時の可用性)
②KVMレベル(KVMホストに障害発生時の可用性)
VM配置によっては②を満たすことができませんが、適切なアフィニティグループを設定することにより、両者とも満たすVM配置の維持が可能となります。
今回は簡易的なRAC構成として、同一クラスタ内にKVMホスト3台、VM(ノード)2台のリソースがある場合を考えます。
VMの配置パターンを2つ紹介した後に、アフィニティグループの設定とその効果をご説明します。
3-1.Oracle RAC構成における適切なVM配置
下図のようにVM#1,VM#2が異なるKVMホストで稼働している配置では、VMレベル、KVMレベル2つの可用性を満たしています。
下図のような障害発生を想定すると、2つの可用性を満たしていることが分かります。
3-1-a: 一方のVMが停止しているが、もう一方のVMが稼働しているためサービス利用可能
3-1-b: 1つのKVMホスト障害によりその上で稼働しているVMが停止するが、その他のKVMホスト上のVMが稼働しているためサービス利用可能
3-2.Oracle RAC構成における不適切なVM配置
下図のようにVM#1,VM#2が同一KVMホストで稼働している配置ではKVMホストレベルの可用性を満たしていません。
下図のような障害発生を想定すると、VMレベルの可用性は満たしているが、KVMホストレベルの可用性を満たしていないことが分かります。
3-2-a: 一方のVMが停止しているが、もう一方のVMが稼働しているためサービス利用可能
3-2-b: 1つのKVMホスト障害により、その上で稼働している2台のVMが停止するためサービスが一時的に利用不可
3-3.アフィニティグループによるVM稼働制御
OLVMのHA機能によるVMの自動再開や、誤ったライブマイグレーションにより不適切なVM配置となってしまうことがあります。
アフィニティグループを適切に設定することで、これを防ぐことができます。
今回は、VM#1,VM#2をネガティブ,「Enforcing」に設定することにより、"異なるKVMホストでVM#1とVM#2が稼働する"というルールを満たすようにHA機能によるVMの自動再開が行われ、ルールを満たさない配置になるライブマイグレーション、VMの稼働が不可になります。
これにより、適切なVM配置時の2つの可用性を保つことができます。
今回は簡易的な構成での例を出しましたが、アフィニティグループは3台以上のVM、KVMに対しても設定可能なため、より複雑な構成でも対応可能です。
4.アフィニティグループ設定方法
最後となりましたが、アフィニティグループの基本となる4パターンの実際の設定方法と、それぞれの設定の活用例をご説明します。
今回は同一クラスタ内にKVMホスト×2,VM×2のリソースがある場合での設定になります。
ルールを満たさないVMの配置になるライブマイグレーションや、VMの稼働が不可になります。
また、ルールを満たさない配置でVMが稼働しているとアフィニティグループの作成が不可なため、作成前にVMを停止させるか、ルールを満たすようにVMを移動させる必要があります。
「Enforcing」にチェックを入れているため、HA機能の強制的なVMの移動の場合でもルールを満たしていないとVMが稼働しない設定になります。
4-1.VM-VMポジティブ
VM#1とVM#2が必ず同一KVMホスト上で稼働する設定になります。
活用例:通信量の多いサーバ(AP,DBなど)間のレイテンシ低減
4-2.VM-VMネガティブ
VM#1とVM#2が必ず異なるKVMホストで稼働する設定になります。
活用例:Oracle RAC構成、冗長構成のAP/WebサーバのKVMホスト障害に対する可用性維持
4-3.VM-KVMポジティブ
VM#1が必ずKVM#1上で稼働する設定になります。
活用例:特定リソース搭載のKVMホストで特定用途のVMを稼働させる
(GPU搭載のKVMホストで機械学習用のVMを稼働させる)
4-4.VM-KVMネガティブ
VM#1が必ずKVM#1以外で稼働する設定になります。
活用例:リソース不足のKVMホストで高負荷VMの稼働を防ぐ
5.おわりに
いかかだったでしょうか。
アフィニティグループを適切に設定することにより、システムにおける様々な要件を満たすことができるようになります。
環境構築の際にはぜひアフィニティグループを活用してみてください!


