XenServer

高可用性

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

概要

高可用性により、ホストが接続不能になったり不安定になったりしたときに、そのホストで実行されている仮想マシンが確実に別のホストで再起動されます。これにより、仮想マシンを手動で再起動する必要がなくなり、仮想マシンのダウンタイムが最小限に抑えられます。

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

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

警告:

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

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

オーバーコミット

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

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

オーバーコミットの警告

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

ホストを隔離する

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

注:

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

設定要件

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

  • XenServerのリソースプール。高可用性機能では、単一リソースプール内のホストレベルの障害に対する高可用性が提供されます。

    注:

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

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

    • 4MBハートビートボリューム:ハートビートの実行に使用されます。
    • 256MBメタデータボリューム:プールコーディネーターがフェイルオーバーした場合にプールコーディネーターメタデータの格納に使用されます。

    注:

    以前は、高可用性ハートビートディスクとして専用のNFSまたはiSCSIストレージリポジトリを使用することをお勧めしていました。ただし、これは、ストレージリポジトリが基盤となるストレージ アプライアンスでリソースを共有していない場合にのみ有効です。それ以外の場合は、ホストのコントロールドメイン(dom0)での複雑さとリソース使用量が増えるだけです。

    プールがクラスター化されている場合、ハートビートストレージリポジトリはGFS2ストレージリポジトリでなければなりません。

    CHAPで認証した場合、SMBまたはiSCSIを使用して接続されたストレージはハートビートストレージリポジトリとして使用できません。

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

    警告:

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

  • 信頼性を最大限に高めるために、専用のボンディングされたインターフェイスを高可用性管理ネットワークとして使用することをお勧めします。

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

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

  • ライブマイグレーションを使用可能。

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

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

注:

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

コマンドラインインターフェイスから仮想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が設定されているものとして処理されます。

起動順序

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

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

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

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

xe vm-param-set uuid=<vm uuid> order=<int>
<!--NeedCopy-->

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

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

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

警告:

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

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

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

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

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

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

    xe pool-ha-enable heartbeat-sr-uuids=<sr uuid> ha-config:timeout=<timeout in seconds>
    <!--NeedCopy-->
    

    または、プールのデフォルトのタイムアウトを設定できます。タイムアウトを設定する方法について詳しくは、「高可用性タイムアウトを構成する」を参照してください。

  4. コマンドpool-ha-compute-max-host-failures-to-tolerateを実行します。このコマンドは、保護対象のすべての仮想マシンに必要なリソースを維持したまま許容される最大ホスト障害数を返します。

    xe pool-ha-compute-max-host-failures-to-tolerate
    <!--NeedCopy-->
    

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

  5. ha-host-failures-to-tolerateパラメーターを指定します。値は計算された値以下でなければなりません:

    xe pool-param-set ha-host-failures-to-tolerate=2 uuid=<pool uuid>
    <!--NeedCopy-->
    

高可用性タイムアウトを構成する

タイムアウトは、プール内のホストがネットワークまたはストレージにアクセスできない期間です。タイムアウト期間内にすべてのXenServerホストがネットワークまたはストレージにアクセスできない場合は、自己隔離されて再起動されることがあります。デフォルトのタイムアウト値は60秒です。ただし、次のコマンドを使用してこの値を変更できます。

プールのデフォルトの高可用性タイムアウトを設定します:

xe pool-param-set uuid=<pool uuid> other-config:default_ha_timeout=<timeout in seconds>
<!--NeedCopy-->

xe CLIの代わりにXenCenterを使用して高可用性を有効にする場合でも、このデフォルトが適用されます。

または、高可用性を有効にするときにタイムアウトを設定できます:

xe pool-ha-enable heartbeat-sr-uuids=<sr uuid> ha-config:timeout=<timeout in seconds>
<!--NeedCopy-->

高可用性を有効にするときにタイムアウトを設定すると、その特定の有効化にのみ適用されることに注意してください。したがって、高可用性を無効にしてから後で再度有効にすると、高可用性機能はデフォルトのタイムアウトを使用する状態に戻ります。

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

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

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

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

xe host-emergency-ha-disable --force
<!--NeedCopy-->

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

  • ホストをプールコーディネーターとして強制的に再起動する(xe pool-emergency-transition-to-master

     xe pool-emergency-transition-to-master uuid=<host uuid>
     <!--NeedCopy-->
    
  • ホストに新しいプールコーディネーターの場所を伝える(xe pool-emergency-reset-master):

     xe pool-emergency-reset-master master-address=<new pool coordinator hostname>
     <!--NeedCopy-->
    

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

xe pool-ha-enable heartbeat-sr-uuid=<sr uuid>
<!--NeedCopy-->

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

ホストをシャットダウンまたは再起動するときは、ホストに障害が発生したと高可用性メカニズムに見なされないように特に注意してください。高可用性が有効なときにホストを完全にシャットダウンするには、XenCenterまたはCLIを使用して、ホストの無効化、ホストの退避、ホストのシャットダウンの順に実行する必要があります。高可用性が有効になっている環境でホストをシャットダウンするには、次のコマンドを実行します:

xe host-disable host=<host name>
xe host-evacuate uuid=<host uuid>
xe host-shutdown host=<host name>
<!--NeedCopy-->

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

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

注:

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

高可用性