高可用性の構成

ホストが接続不能になったり停止したりすることがあります。XenServerの高可用性機能には、これらの障害に備えたり、安全に回復したりするための一連の自動化オプションが用意されています。たとえば、ネットワークの物理的な切断やホストのハードウェア障害が考えられます。

概要

高可用性により、ホストが接続不能になったり不安定になったりしたときに、そのホストで実行されている仮想マシンが確実にシャットダウンされて別のホストで再起動されます。仮想マシンをシャットダウンして別のホストで再起動することで、その仮想マシンが(手作業または自動的に)新しいホストで起動されないようにします。その後いずれかの時点で、元のホストが回復されます。このシナリオでは、同じ仮想マシンの2つのインスタンスが異なるホスト上で動作する可能性があり、それに伴い仮想マシンディスクが破損してデータが失われる可能性が高くなります。

プールマスタが接続不能になったり不安定になったりしたときに、高可用性により、プールの管理機能を回復することもできます。高可用性によりプールの管理機能が自動的に復元されます。手動での介入は必要ありません。

オプションで、高可用性により、状態が良いと認識されているホストで手動での介入なしで仮想マシンを再起動するプロセスを自動化することもできます。複数の仮想マシンが特定の順番で起動して、特定の仮想マシン上のサービスが起動してからほかの仮想マシンが起動するようにスケジュールを設定することもできます。これにより、依存仮想マシン(依存SQLサーバーなど)よりもインフラストラクチャ仮想マシン(DHCPサーバーなど)が先に起動するように設定できます。

警告:

高可用性は、マルチパス化したストレージとボンディングしたネットワークと合わせて使用することができます。マルチパス化したストレージとボンディングしたネットワークは、高可用性を設定する前に構成してください。マルチパス化したストレージとネットワークボンディングを使用しない場合、インフラストラクチャでの問題発生時にホストが予期せず再起動されることがあります(自己隔離)。

注:

すべてのグラフィックソリューション(NVidia vGPU、Intel GVT-d、Intel GVT-G、AMD MxGPU、およびvGPUパススルー)は、高可用性を利用する環境で使用できます。ただし、これらのグラフィックソリューションを使用する仮想マシンは、高可用性で保護できません。これらの仮想マシンは、適切な空きリソースを持つホストがある間は、ベストエフォート方式で再起動できます。

オーバーコミット

ユーザー定義のホスト障害数の後に、いずれかの場所で現在実行中の仮想マシンを再起動できない場合、プールはオーバーコミットされます。

オーバーコミットは、プール全体に障害後の仮想マシンの実行に必要な十分な空きメモリがない場合に発生する可能性があります。また、軽微な設定変更により、意図したとおりに仮想マシンが保護されなくなる場合もあります:たとえば、仮想ブロックデバイス(VBD)とネットワークの設定を変更すると、どのホストでどの仮想マシンを再起動できるかが変更される可能性があります。ですべての要因を予測して、高可用性機能による保護が正しく反映されるかどうかをチェックすることはできません。ただし、高可用性を維持できなくなった場合は、非同期的なアラートが送信されます。

では、プール内の複数のホストに障害が発生した場合にどのような対処を行うかというフェイルオーバープランが動的に保持されます。理解するべき重要な概念は許容されるホスト障害数の値です。この値は高可用性構成の一部として定義されます。許容されるホスト障害数の値で、サービスを中断せずに許容される障害の回数が決まります。たとえば、64のホストで構成されるリソースプールで、許容される障害数が3に設定されているとします。この場合、プールでは、3台のホストの障害は許容し、他のホストで仮想マシンを再起動するフェイルオーバープランを計算します。フェイルオーバープランが見つからない場合は、プールがオーバーコミットしたとみなされます。フェイルオーバープランは、仮想マシンの追加や起動などのライフサイクル操作や移行に応じて動的に再計算されます。プールへの新しい仮想マシンの追加など、プールがオーバーコミット状態になるような変更を加えると、アラートが送信されます(経由またはメールで)。

オーバーコミットの警告

仮想マシンを起動または一時停止しようとしてプールがオーバーコミット状態になった場合は、警告アラートが表示されます。この警告はに表示されるほか、Xen APIではメッセージインスタンスとしても使用可能です。メールアドレスを構成してある場合は、そのメールアドレスにメッセージが送信されるように設定することもできます。その後、操作をキャンセルするか、そのまま続行することができます。処理を続行すると、リソースプールがオーバーコミット状態になります。さまざまな再起動優先度の仮想マシンで消費されているメモリ量が、プール全体およびホストごとに表示されます。

ホストを隔離する

サーバーの障害は、ネットワーク接続の損失により、または管理スタックの問題が発生したときに発生する可能性があります。このような場合、ホストは自己隔離を行って、仮想マシンが2台のサーバーで同時に実行されないようにします。隔離されたホストは直ちに再起動され、そのホスト上で実行中のすべての仮想マシンが停止します。リソースプール内のほかのホストは、これらの仮想マシンの停止を検出し、設定されている再起動優先度に従って仮想マシンを再起動します。隔離されたホストが再起動すると、リソースプールへの復帰を試行します。

注:

クラスター化プール内のホストは、リソースプール内の半分以上のほかのホストと通信できないときに、自己隔離を行うこともできます詳しくは、「クラスタ化されたプール」を参照してください。

設定要件

注:

では、高可用性は、3台以上のホストが動作するプールで使用することをお勧めします。詳しくは、「CTX129721 - High Availability Behavior When the Heartbeat is Lost in a XenServer Pool」を参照してください。

高可用性機能を使用するために必要な条件:

  • ハートビートストレージリポジトリとして、356MB以上のiSCSI、NFS、またはファイバチャネルLUNを少なくとも1つ含む共有ストレージ。高可用性メカニズムによりハートビートストレージリポジトリに次の2つのボリュームが作成されます:

    4MBハートビートボリューム:ハートビートに使用されます。

    256MBメタデータボリューム:マスタがフェールオーバーした場合にプールマスタメタデータの格納に使用されます。

    注:

    • 信頼性を向上させるため、は高可用性ハートビートディスクとして専用のNFSまたはiSCSIストレージリポジトリを使用することをお勧めします。このストレージリポジトリは、ほかの目的で使用しないでください。
    • プールがクラスター化されている場合、ハートビートストレージリポジトリはGFS2ストレージリポジトリでなければなりません。
    • CHAPで認証した場合、SMBまたはiSCSIを使用して接続されたストレージはハートビートストレージリポジトリとして使用できません。
    • NetAppまたはEqualLogicのストレージリポジトリを使用する場合は、ハートビートストレージリポジトリに使用するアレイにNFSまたはiSCSIの論理ユニット番号を手作業で準備する必要があります。
  • のリソースプール。高可用性機能では、単一リソースプール内のホストレベルの障害に対する高可用性が提供されます。

  • すべてのホストの静的IPアドレス。

警告:

高可用性を有効にしているときにサーバーのIPアドレスを変更すると、高可用性によりホストのネットワークに障害が発生したとみなされます。IPアドレスを変更したことでホストが隔離されて、起動できない状態になることがあります。この状況を改善するには、host-emergency-ha-disableコマンドを使用して高可用性を無効にし、pool-emergency-reset-masterを使用してプールマスタをリセットしてから、高可用性を再度有効にします。

高可用性で仮想マシンを保護するには、その仮想マシンがアジャイルである必要があります。仮想マシンの条件:

  • 仮想ディスクが共有ストレージ上にある。共有ストレージは種類を問いません。iSCSI、NFS、またはファイバチャネルの論理ユニット番号のみがストレージハートビートの必須条件ですが、仮想ディスクストレージとしても使用できます。

  • を使用できる。

  • ローカルDVDドライブへの接続が設定されていない。

  • 仮想ネットワークインターフェイスがプール全体にわたるネットワーク上にある。

では、高可用性を有効にする場合はプール内のサーバーで管理インターフェイスをボンディングし、ハートビートストレージリポジトリにはマルチパスストレージを使用することを強くお勧めします。

CLIを使用して仮想LANを作成してインターフェイスをボンディングした場合、作成された仮想LANが接続されておらず、アクティブになっていない場合があります。この場合、仮想マシンがアジャイルでないため、高可用性機能で保護されません。CLIのpif-plugコマンドを使用して、仮想LANとボンディングPIFをアクティブにすると仮想マシンがアジャイルになります。xe diagnostic-vm-statusCLIコマンドを使用して、仮想マシンがアジャイルではない正確な理由を判定することもできます。このコマンドは配置の制約を分析するので、必要に応じて対処することができます。

構成設定を再起動する

仮想マシンは、高可用性機能によって「保護する」、「ベストエフォート」、または「保護しない」と分類されます。ha-restart-priorityの値は、仮想マシンを保護する、ベストエフォート、または保護しないのうちのいずれに分類するかを定義します。これらの分類ごとに仮想マシンの再起動動作は異なります。

保護する

高可用性機能によって、オフラインになった保護する仮想マシン、またはオフラインになっているそのホストを確実に再起動できます。これは、プールがオーバーコミット状態ではなく、仮想マシンがアジャイルであることが前提です。

サーバー障害時に保護されている仮想マシンを再起動できない場合、高可用性機能は、プールに余分な容量があるときは仮想マシンの起動を試行します。余分な容量があるときは、仮想マシン起動の試行が成功する可能性があります。

ha-restart-priority値: restart

ベストエフォート

ベストエフォート仮想マシンのホストがオフラインになった場合、高可用性は、別のホストでベストエフォート仮想マシンの再起動を試行します。この試行は、保護されているすべての仮想マシンが正常に再起動された後にのみ行われます。高可用性は、ベストエフォート仮想マシンの再起動を1回のみ試行します。この試行が失敗すると、高可用性は仮想マシンの再起動をそれ以上試行しません。

ha-restart-priority値: best-effort

保護しない

保護しない仮想マシン、またはそれが実行されているホストが停止しても、高可用性は仮想マシンの再起動を試行しません。

ha-restart-priority値:値は空文字です

注:

高可用性は、保護する仮想マシン、またはベストエフォート仮想マシンの再起動に使用するリソースを解放するために、実行中の仮想マシンを停止したり、移行したりすることはありません。

リソースプールで複数回のサーバー障害が発生し、許容障害数がゼロになった場合、保護されている仮想マシンの再起動は保証されません。そのような場合、システムアラートが生成されます。これ以降のサーバー障害では、再起動優先度が設定されたすべての仮想マシンは、best-effortが設定されているものとして処理されます。

起動順序

起動順序は、障害が発生した場合、の高可用性機能が保護する仮想マシンを再起動しようとする順序です。各保護する仮想マシンのorderプロパティの値によって、起動順序が決定されます。

仮想マシンのorderプロパティは、高可用性、および仮想マシンを起動およびシャットダウンするほかの機能でも使用されます。保護する仮想マシンとして高可用性でマークされた仮想マシンだけでなく、すべての仮想マシンでorderプロパティを設定できます。ただし、高可用性がorderプロパティを使用するのは、保護する仮想マシンに対してのみです。

orderプロパティは整数値です。デフォルトの値は0(最優先)です。orderの値が0の保護する仮想マシンが、最初に高可用性によって再起動されます。orderプロパティの値が大きくなるほど、仮想マシンの再起動の順番は後になります。

仮想マシンのorderプロパティの値は、次のコマンドラインインターフェイスで設定できます:

xe vm-param-set uuid=VM_UUID order=int

では、仮想マシンの[高可用性オプション]パネルで[起動順序]を必要な値に設定することもできます。

プールの高可用性を有効にする

プールの高可用性を有効にするには、またはCLIを使用します。いずれの方法でも、仮想マシンに再起動優先度を設定して、プールがオーバーコミット状態になったときに優先的に再起動する仮想マシンを指定します。

警告:

  • 高可用性を有効にすると、プールからサーバーを削除するなど、仮想マシンのフェイルオーバープランを変更するような操作が無効になる場合があります。このような操作を行うために、一時的に高可用性を無効にするか、高可用性によって保護されている仮想マシンを保護しない状態にすることができます。

  • 高可用性が有効になっている場合、プールのクラスタリングは有効にできません。クラスタリングを有効にするには、一時的に高可用性を無効にします。クラスター化されたプールで高可用性を有効にすることができます。クラスター化されたプールでは、自己隔離などの一部の高可用性の動作が異なります。詳しくは、「クラスター化されたプール」を参照してください。

CLIを使用して高可用性を有効にする

  1. リソースプールに、高可用性機能をサポートするストレージリポジトリが接続されていることを確認します。この機能をサポートするストレージリポジトリは、iSCSI、NFS、およびファイバチャネルです。これらのストレージリポジトリをCLIを使用して構成する方法について詳しくは、「ストレージリポジトリ(SR)の管理」を参照してください。

  2. 保護する各仮想マシンに再起動優先度を設定します。再起動優先度は次のコマンドで設定できます:

    xe vm-param-set uuid=vm_uuid ha-restart-priority=restart order=1
    
  3. 次のコマンドを実行して、プールの高可用性を有効し、オプションでタイムアウトを指定します:

    xe pool-ha-enable heartbeat-sr-uuids=sr_uuid ha-config:timeout=timeout in seconds
    

    タイムアウトは、プール内のホストがネットワークまたはストレージにアクセスできない期間です。高可用性を有効にするときにタイムアウトを指定しない場合、ではデフォルトの30秒のタイムアウトが使用されます。タイムアウト期間内にすべてのホストがネットワークまたはストレージにアクセスできない場合は、自己隔離されて再起動されることがあります。

  4. pool-ha-compute-max-host-failures-to-tolerateコマンドを実行します。これにより、プールで許容される障害数(最大許容障害数)が返されます。つまり、この数を超えるホスト障害が発生すると、保護されているすべての仮想マシンを実行するために必要なリソースを確保できなくなることを意味します。

    xe pool-ha-compute-max-host-failures-to-tolerate
    

    許容障害数によってアラートが送信されるタイミングが決まります。プールの状態が変化したときに、フェイルオーバープランが再計算されます。この計算を使用して、プールの容量と、保護されている仮想マシンの稼働を保証しながら許容できる障害の回数が特定されます。この計算値がha-host-failures-to-tolerateの指定値を下回ると、システムアラートが生成されます。

  5. 次のコマンドを実行して、プールのフェイルオーバートレランス数(プールで許可するサーバー障害数)を設定します。値は計算された値以下でなければなりません:

    xe pool-param-set ha-host-failures-to-tolerate=2 uuid=pool-uuid
    

CLIを使用して仮想マシンから高可用性保護を削除する

特定の仮想マシンに対する高可用性機能を無効にするには、xe vm-param-setコマンドでha-restart-priorityパラメータに空文字列を指定します。ha-restart-priorityパラメータを設定しても、その仮想マシンに設定されている起動順序が変更されることはありません。ha-restart-priorityパラメータを適宜restartまたはbest-effortに設定することで、仮想マシンの高可用性を再度有効にすることができます。

到達不能なホストを復元する

何らかの理由でホストが高可用性ステートファイルにアクセスできない場合、そのホストは到達不可として認識されます。インストールを復元するには、host-emergency-ha-disableコマンドを使用して高可用性を無効にする必要があります:

xe host-emergency-ha-disable --force

プールマスタとして動作していたホストの場合、高可用性が無効になって起動します。プールメンバーが再接続すると、高可用性が自動的に無効になります。プールメンバーとして動作していたホストがマスタに接続できない場合、次のいずれかの操作を行う必要があります:

  • ホストをプールマスタとして強制的にリブートする(xe pool-emergency-transition-to-master

    xe pool-emergency-transition-to-master uuid=host_uuid
    
  • ホストに新しいマスタの位置を教える(xe pool-emergency-reset-master):

    xe pool-emergency-reset-master master-address=new_master_hostname
    

すべてのホストが正常に再起動したら、高可用性を再度有効にします:

xe pool-ha-enable heartbeat-sr-uuid=sr_uuid

高可用性が有効なときにホストをシャットダウンする

高可用性メカニズムにより、ホストのシャットダウンや再起動がホスト障害として認識されないように、正しい手順に従う必要があります。高可用性が有効なときにホストを完全にシャットダウンするには、またはCLIを使用して、ホストのdisable、ホストのevacuate、ホストのshutdownの順に実行する必要があります。高可用性が有効な環境でホストをシャットダウンするには、次のコマンドを実行します:

xe host-disable host=host_name
xe host-evacuate uuid=host_uuid
xe host-shutdown host=host_name

高可用性により保護されている仮想マシンをシャットダウンする

高可用性プランにより保護されている仮想マシンが自動的に再起動するように設定されている場合、その設定を有効にしたまま仮想マシンをシャットダウンすることはできません。このような仮想マシンをシャットダウンするには、仮想マシンの高可用性を無効にしてからシャットダウン用のCLIコマンドを実行します。を使用する場合は、保護されている仮想マシンの[シャットダウン]ボタンをクリックしたときに、高可用性による保護を無効にするためのダイアログボックスが開きます。

注:

ただし、保護されている仮想マシン上で実行されているオペレーティングシステム内でシャットダウンを実行すると、ホスト障害が発生したときと同じように、自動的に再起動されます。この自動再起動により、オペレーターが間違えても、保護されている仮想マシンがシャットダウンされない事態を防ぐことができます。この仮想マシンをシャットダウンする場合は、その仮想マシンに設定されている高可用性機能による保護を最初に無効にします。