XenServerの高可用性について

XenServerの高可用性(HA:High Availability)により、リソースプール内のハードウェアや個々のサーバーに障害が発生した場合に、仮想マシンが自動的に再起動します。この機能は、重要な仮想マシンがリソースプール内で常に動作することを保証するためのものです。サーバーに障害が発生した場合、そのサーバー上の仮想マシンは、同じリソースプール内のほかのサーバー上で自動的に再起動します。これにより、システムやコンポーネントの障害発生時に、サービスの中断を最小限に抑えながら重要なサービスを復元できます。プールマスタに障害が発生すると、XenServerの高可用性で別のサーバーがプールマスタとして動作を開始するよう自動的に選択されるため、管理者は引き続きそのプールを管理できます。プール内のすべてのサーバーに、プールマスターとして選出される可能性があります。また、プールのデータベースは常にすべてのノード間で複製され、さらにハートビートストレージリポジトリ上にバックアップされます。

XenServerの高可用性には、以下で説明するように、サーバー障害を正確に検出するための機能と、フェイルオーバープランを計算するための機能があります。

可用性のためのハートビート

サーバーの障害を確実に検出することは、サーバーの一時的な消失と壊滅的な障害とをリモートから区別しなければならないため、非常に困難です。プールマスターの障害を過って検出してほかのサーバーをプールマスターとして選出してしまうと、元のプールマスターが復帰したときに予期できない問題が発生する可能性があります。また、ネットワークの問題によりリソースプールが2つに分割された場合に、どちらか一方だけが共有ストレージにアクセスするようにして、両方が同時にアクセスしないようにしなければなりません。これらの問題を解決するために、XenServerにはストレージハートビートとネットワークハートビートの2つのメカニズムが組み込まれています。

リソースプールの高可用性を有効にするときに、iSCSI、ファイバチャネル、またはNFSのストレージリポジトリをハートビートストレージリポジトリとして指定します。このストレージリポジトリ上には、いくつかの小さな仮想ディスクがXenServerによって自動的に作成されます。これらの仮想ディスクの最初のディスクは、リソースプール内のすべてのサーバーにより、共有クォーラムディスクとして使用されます。各サーバーは、この共有ディスク内の固有のブロックに割り当てられて、そこに定期的に書き込みを行います。これにより、そのサーバーが動作中であることが確認されます。高可用性が開始されると、すべてのサーバーがネットワークチャネルおよびストレージチャネルを使ってデータを交換し、各サーバーが相互に両方のチャネルでアクセス可能であることが確認されます。この通信に問題が検出される場合は、どの入出力パスが動作していないかが示されます。このデータ交換は特定の時間が経過して、プール内のすべてのサーバーで相互通信に問題がないことが確認されるまで継続されます。データ交換が終了すると、高可用性が有効になり、プールが保護されます。この準備処理は、大規模なリソースプールで数分かかることがありますが、高可用性を最初に有効にするときにのみ実行されます。

高可用性が有効になると、各サーバーは定期的にストレージ更新情報をハートビート仮想ディスクに書き込み、管理インターフェイスにネットワークパケットを送信します。耐障害性を向上させるため、ネットワークアダプタを ボンディング したり、ストレージインターフェイスで 動的マルチパス を使用したりすることはとても重要です。これにより、単一アダプタの障害や書き込みの失敗が結果として可用性の問題になることを避けることができます。

サーバーの隔離

高可用性にとって最悪のシナリオは、オフラインとして認識されたサーバーが共有ストレージへの書き込みを続けることです。これにより、永続的なデータが破損することがあります。これを避けるため、XenServerはその サーバーを隔離 します。つまり、そのサーバーは自動的にシャットダウンし、プール内のすべての共有リソースへのアクセスが停止します。障害が発生したサーバーを隔離することで、仮想マシンをプール内のほかのサーバー上に移行している間に、そのサーバーが共有ディスクに書き込んだり、格納されているデータの一貫性を損なったりすることが回避されます。

ハートビートの問題が検出されると、サーバーが自動的に隔離(つまりシャットダウン後に再起動)されます。ただし、以下のいずれかが当てはまる場合、サーバーは隔離されません。

  • すべてのサーバーでストレージハートビートは正しく動作していますが、ネットワークが分割された場合(つまりプール内に2つのサーバーグループが存在する)。この場合、規模が小さい方のグループのサーバーだけが隔離され、大きい方のグループのサーバーは継続して動作します。これは、ネットワーク障害により仮想マシンが到達不能になったという想定の下で、ネットワークが機能しているサーバー上でその仮想マシンが再起動されるようにするためです。分割されたサーバーグループの規模が同じ場合は、いずれか一方のグループだけが隔離されます。
  • ストレージハートビートに問題が生じ、ネットワークハートビートに問題がない場合。この場合、各サーバーがネットワーク経由でほかのすべてのサーバーにアクセスできるかどうかを確認します。この状況が続く場合、ストレージハートビートサーバーがオフラインになったという想定の下で、各サーバーは動作を続けます。これにより仮想マシンの安全性が損なわれることはありませんが、ネットワーク障害の場合は両方のハートビートが消失するため、サーバーの隔離が発生します。

リソースプールの能力の評価

ハートビートによる信頼性の高いサーバー障害検出の次は、リソースプールの能力評価について説明します。

搭載されているメモリの量や実行中の仮想マシンの数が異なる複数のサーバーで構成されるリソースプールで、単一のサーバー障害によりそのサーバー上の仮想マシンをほかのサーバー上で再起動できないという状況にならないように、XenServerの高可用性機能ではフェイルオーバープランが動的に計算されます。このプランにより、サーバー障害が発生した場合にどのようなアクションを実行するかが決定されます。この機能では、単一サーバーの障害だけでなく、ネットワークの問題などによりプールの複数のサーバーが到達不能になった場合もXenServerの高可用性で対処できます。

フェイルオーバープランでは、障害発生時に実行すべきアクションの決定に加えて、プール内でフェイルオーバーできるサーバー障害数が考慮されます。フェイルオーバープランの計算には、以下の2つの項目が考慮されます。

  • 最大許容障害数 :保護対象のすべての仮想マシンに必要なリソースを維持したまま許容される最大サーバー障害数で、XenServerにより算出されます。このとき、プール内の仮想マシンの再起動優先度、およびプール構成(サーバー数およびCPUやメモリの条件)が考慮されます。
  • サーバー障害の制限 :そのプールで許可するサーバー障害数で、高可用性の設定時に管理者が設定します。たとえば、許可するサーバー障害の数として3を設定すると、そのリソースプール内の任意の3台のサーバー障害までは保護され、そのサーバー上の仮想マシンをほかのサーバー上で再起動するというフェイルオーバープランがXenServerで計算されます。管理者は、そのプールで許可するサーバー障害数として、XenServerにより算出される最大許容障害数よりも小さい値を設定します。これにより、プールがオーバーコミット状態になることを回避できます。役割ベースのアクセス制御(RBAC)が有効な環境では、サーバー障害の制限の設定により、特定の管理者が起動できる仮想マシンの数を制御できます。これにより、プールオペレータとしての権限を持たない管理者でも、フェイルオーバープランに影響しない範囲で仮想マシンを起動できるようになります。詳しくは、下記「高可用性と役割ベースのアクセス制御(RBAC)」を参照してください。

XenServerにより算出される最大許容障害数が、管理者により設定されたサーバー障害の制限よりも小さくなると、システムアラートが生成されます。

オーバーコミット保護

プールの高可用性を有効にすると、その時のリソースに基づいてフェイルオーバープランが計算されます。XenServerの高可用性機能により、新しい仮想マシンの起動など、プールに変化が生じると、新しいフェイルオーバープランが動的に計算されます。プール内のリソースの不足によりフェイルオーバープランを計算できない場合(空きメモリ領域が足りない場合や、どの仮想マシンをどのサーバーで再起動するかに影響する仮想ディスクとネットワークの変更が生じた場合など)は、プールが オーバーコミット 状態になります。

プールがオーバーコミット状態になったときにどの仮想マシンを起動するかを制御するには、高可用性再起動優先度を設定します。仮想マシンの再起動優先度を設定は、XenCenterの [高可用性設定] ダイアログボックスや [高可用性の設定] ウィザードで行います。このとき、プールの最大許容障害数が動的に再計算され表示されます。これにより、必要に応じてさまざまな再起動優先度設定を組み合わせたり、サーバー障害の制限の設定が適切かどうかを確認したりできます。

仮想マシンを起動または一時停止しようとしたときに、その操作によりプールがオーバーコミット状態になる場合は、XenCenterに警告が表示されます。この警告メッセージがメールで送信されるように設定することもできます。このとき、仮想マシンの起動や再開をキャンセルしたり、続行したりできます。操作を続行すると、プールがオーバーコミット状態になります。

高可用性が有効なプールの管理

リソースプールの高可用性を有効にしたまま、そのプールの構成を変更することは避けてください。XenServerの高可用性機能は「午前2時の保護手段」であり、管理者の勤務時間外の障害に対処して仮想マシンを再起動するためのものです。ソフトウェアアップデートの適用など、プール構成に変更を加える場合は、事前に高可用性を無効にします。

  • 保護された仮想マシンをXenCenterからシャットダウンしようとすると、その仮想マシンをフェイルオーバープランから削除してからシャットダウンするためのオプションがXenCenterで表示されます。これにより、保護された仮想マシンを過ってシャットダウンしてしまうことが避けられると同時に、必要な場合はプールの高可用性を無効にしなくても仮想マシンをシャットダウンできます。
  • 高可用性が有効なプールのサーバーをXenCenterから再起動しようとすると、各仮想マシンの再起動優先度を考慮して、フェイルオーバープランが影響を受けるかどうかが決定されます。フェイルオーバープランが影響を受けない場合、サーバーが通常どおりシャットダウンします。フェイルオーバープランが影響を受けても、最大許容障害数が1よりも大きい場合は、サーバー障害の制限を1つ減らすかどうかを確認するメッセージがXenCenterで表示されます。サーバー障害の制限を減らすとプールの全体的な耐障害性が低下しますが、少なくとも1台のサーバーの障害がフェイルオーバーされます。サーバーの再起動が完了すると、フェイルオーバープランが自動的に再計算され、サーバー障害の制限が元の値に戻ります。
  • ソフトウェアアップデート をインストールするために、[アップデートのインストール] ウィザードを使用する場合、[高可用性の無効化] オプションを選択して、アップデートのインストールが完了するまでプールで高可用性を無効にする必要があります。高可用性を無効にしないと、アップデートは停止します。ただし、アップデートをインストールしている間、プールでサーバー障害が発生していないかどうかを管理者自身が監視する必要があります。
  • 高可用性を有効にすると、プールからサーバーを削除するなど、仮想マシンのフェイルオーバープランを変更するような操作が無効になる場合があります。このような操作を実行するには、一時的に高可用性を無効にするか、保護された仮想マシンをシャットダウンしておく必要があります。

高可用性と役割ベースのアクセス制御(RBAC)

役割ベースのアクセス制御(RBAC)が実装されたXenServer環境では、一部の管理者ユーザーはプールの高可用性設定を変更できません。たとえば、仮想マシンの起動権限が付与された管理者(VMオペレータ)は、高可用性の許容障害数に影響するような操作を実行できません。このため、このような管理者は、現在の最大許容障害数の値を減少させるような仮想マシンの起動を行うことはできません。許可するサーバー障害の制限値を変更できるのは、プール管理者とプールオペレータレベルの管理者のみです。

プールの高可用性を有効にした管理者(つまりプール管理者とプールオペレータレベルの管理者)は、許可するサーバー障害の制限を(XenCenterにより算出された)最大許容障害数よりも少なく設定できます。これにより、低い権限を持つ管理者もフェイルオーバープランに影響を与えずに新しい仮想マシンを起動できるようになります。