SA.03.1 フェイルオーバークラスタ (重要度: 3)

フェイルオーバークラスタの目的と基本構成, 及び動作原理

フェイルオーバークラスタの目的は、システムの信頼性を向上させることです。これは、アプリケーションやサービスが障害や故障時にも中断なく動作し続けることを可能にします。

基本構成としては、アクティブ・スタンバイ構成が一般的です。この構成では、複数のノードから構成され、アクティブノードとスタンバイノードの役割を担います。アクティブノードはリクエストを処理し、スタンバイノードはアクティブノードの代替として待機します。スタンバイノードは、アクティブノードの障害や故障時に自動的に引き継ぐことができます。

リソース制御は、アクティブノードとスタンバイノード間で共有されるリソースの管理です。例えば、データベースの場合、データベースのノードやディスクへのアクセス権限が共有されます。これにより、アクティブノードの障害や故障時には、スタンバイノードが正常にリソースにアクセスしてサービスを提供できます。

ハートビートは、アクティブノードとスタンバイノード間での通信メカニズムです。ハートビートは定期的に送信され、一定期間応答がない場合には障害や故障と見なされます。ハートビートの検知によって、フェイルオーバーのトリガーが発生し、スタンバイノードがアクティブに昇格してサービスを継続することができます。

これらの要素を組み合わせることで、フェイルオーバークラスタは障害や故障に対して高い可用性と信頼性を提供します。

スプリットブレインとその解消方法

スプリットブレインは、フェイルオーバークラスタにおいて、ノード間のコミュニケーションの問題が発生した場合に起こる状態のことを指します。

インターコネクト分断は、スプリットブレイン状態の一種であり、フェイルオーバークラスタ内のノード間の通信が途絶えることを意味します。この分断が発生した場合、ノードは互いにお互いの状態を把握することができず、それぞれが独自のアクティブとスタンバイのリソースを持つことになります。これにより、データの不整合やサービスの停止などの問題が発生する可能性があります。

フェンシングは、スプリットブレイン状態を回避するためのメカニズムです。フェンシングでは、インターコネクト分断を検知し、正しいリソースの所有者を確定するための手段を提供します。一般的なフェンシング方法には、ストレージフェンス、ネットワークフェンス、クォーラムフェンスなどがあります。

クォーラムに基づくリーダー選出は、ノード間の信頼性を確保するために使用されるメカニズムです。クォーラムとは、ノードの集合のうち、過半数以上の承認が必要とされるものを指します。クォーラムに基づくリーダー選出では、フェイルオーバークラスタ内のノードが集合のうちの過半数以上である場合にのみリーダーを選出し、リソースの所有権を確実にします。これにより、スプリットブレインを回避し、データ整合性とサービスの正常性を確保します。

主要な冗長構成, 及びフェイルオーバーを実現する具体的な実装

VIP と VRRP による冗長構成

Keepalivedは、仮想IPアドレス(Virtual IP、VIP)と仮想ルーターレッドンメーションプロトコル(Virtual Router Redundancy Protocol、VRRP)を使用して冗長構成とフェイルオーバーを実現するためのツールです。

Keepalivedは、複数のノード間で仮想IPアドレスを共有することで、システムの可用性を高めます。仮想IPは、ユーザーやクライアントからの要求を受け付け、バックエンドの実際のサーバーに転送するために使用されます。Keepalivedは、仮想IPを維持し、フェイルオーバーが発生した場合に自動的に別のノードに移動させる役割を果たします。

VRRPは、複数のルーター(ホスト)が1つの仮想ルーターアドレスを提供するためのプロトコルです。VRRPでは、ホスト間で優先度(Priority)を設定し、同じ仮想ルーターアドレスを持つホストの中で最も高い優先度を持つホストがマスタールーター(Master Router)となり、他のホストはバックアップルーター(Backup Router)となります。マスタールーターが故障した場合、バックアップルーターの中から新たなマスタールーターが選出されます。

Keepalivedは、VRRPを使用して仮想IPアドレスを制御し、高可用性とフェイルオーバーを実現します。ノード間でVRRPパケットを交換し、マスターノードが正常に動作しているかを確認します。もしマスターノードが障害でダウンした場合、バックアップノードの中で次に優先度の高いノードが新たなマスターノードになり、仮想IPを引き継いでサービスを提供します。

Keepalivedは、高可用性が要求されるWebサーバー、リバースプロキシ、ファイアウォールなどのシステムで広く使用されています。

Pacemaker/Colosync によるプロセス監視, リソース制御

Pacemaker/Corosyncは、プロセス監視とリソース制御を使用して高可用性とフェイルオーバーを実現するためのツールです。一般的に、Pacemakerはリソースマネジャ、Corosyncはクラスタエンジン(ノード間通信や各ノードの状態制御を行う。メッセージングレイヤとも)としての役割を果たします。以下に、それぞれの要素について説明します。

  1. プロセス監視: Pacemakerは、ノード内の重要なプロセスの状態を監視するための機能を提供します。ノードが異常な状態になった場合(プロセスが停止した、応答しないなど)、Pacemakerはそのノードが利用できないと判断し、フェイルオーバーをトリガーします。
  2. リソース制御: Pacemakerは、ハードウェアリソースやソフトウェアサービスなどのリソースを制御するための機能も提供します。リソースはリソースエージェントと呼ばれるコンポーネントによって制御されます。リソースエージェントは、特定のリソースの起動、停止、監視などの操作を担当します。Pacemakerは、リソースの状態を監視し、必要に応じて異常なリソースを再起動したり、他のノードにフェイルオーバーさせたりすることができます。
  3. STONITH(Shoot The Other Node In The Head): STONITHは、特定のノードを強制的にシャットダウンするためのメカニズムです。リソース間の競合や問題を回避するために使用されます。STONITHは、リモート電力制御デバイスを介してノードの電源を切るなどの方法で実現されます。
  4. IPMI(Intelligent Platform Management Interface): IPMIは、ハードウェアリソースを監視・制御するためのインターフェースです。PacemakerはIPMIを使用して、ハードウェアの状態を監視し、特定のハードウェアリソース(ノード)が利用できなくなった場合にフェイルオーバーをトリガーします。

以上が、Pacemaker/Corosyncによるプロセス監視、リソース制御、STONITH、およびIPMIの要素の説明です。これらの機能を使用することで、高可用性を持つ冗長構成とフェイルオーバーを実現することができます。

分散ストレージにおけるフェイルオーバーと復旧

分散ストレージにおけるフェイルオーバーと復旧は、次のような役割を果たします。

  1. 可用性の向上:分散ストレージでは、データが複数のノードに分散して格納されます。これにより、各ノードが独立して処理を行うことができます。一方のノードが障害や故障しても、他のノードがリクエストを受け取り処理を継続します。フェイルオーバーによって自動的に処理が引き継がれるため、ユーザーはサービスの中断を最小限に抑えることができます。
  2. データの安全性:分散ストレージでは、データが複数のノードに複製されます。データの複製によって、一つのノードが故障した場合でも、他のノードからデータを取得することができます。フェイルオーバーによって別のノードに処理が引き継がれるため、データの可用性が高くなります。
  3. 高速な復旧:分散ストレージでは、障害やエラーが発生した場合には自動的にフェイルオーバーが発生します。フェイルオーバーによって別のノードに処理が引き継がれるため、サービスの復旧時間を短縮することができます。また、復旧後もデータが元の状態に戻るため、ユーザーは再びシステムを正常な状態で利用できます。
  4. 拡張性:分散ストレージでは、新たなノードをシステムに追加することで容量や処理能力を拡張することができます。フェイルオーバーや復旧の際にも、追加ノードに処理を引き継ぐことができるため、システムの将来的な成長や負荷増加に対応することができます。

以上のような役割を果たすフェイルオーバーと復旧は、分散ストレージシステムの信頼性や可用性を向上させるために不可欠な要素です。

個々のプロトコル・サービスに合わせた冗長設計

冗長設計は、ネットワークの可用性を向上させるための重要な要素です。具体的には、DHCP(Dynamic Host Configuration Protocol)などのプロトコルやサービスにおいても、冗長設計が行われることがあります。

DHCPは、ネットワーク上のデバイスにIPアドレスやその他のネットワーク設定情報を動的に割り当てるためのプロトコルです。DHCPサーバは、クライアントデバイスがネットワークに接続されると、自動的にIPアドレスを割り当てます。

冗長設計によって、DHCPサービスの可用性を確保できます。以下に、冗長設計の一例を紹介します。

  1. DHCPフェールオーバー:複数のDHCPサーバを設定し、各サーバが同じ範囲のIPアドレスを異なる割り当て方式で提供することで、自動的なフェールオーバーを実現します。一つのDHCPサーバがダウンした場合でも、他のサーバがその役割を引き継ぎ、ネットワーク上のデバイスへのIPアドレス割り当てを継続します。
  2. DHCPクラスタリング:複数のDHCPサーバをクラスタに組み込み、クラスタリングソフトウェアによって自動的なフェールオーバーを実現します。サーバの故障やメンテナンスによる停止時にも、別のサーバが機能を引き継ぎ、ネットワーク上のデバイスへのIPアドレス割り当てを継続します。
  3. DHCPリレーエージェントの使用:DHCPリレーエージェントを使用することで、冗長なDHCPサーバに対してクライアントのDHCPリクエストを中継することができます。リレーエージェントが動作する複数のネットワークデバイスを設置し、各デバイスが異なるDHCPサーバに対してリクエストを送信することで、サーバの冗長性を確保します。

これらの冗長設計によって、DHCPサービスの可用性が向上し、ネットワーク上のデバイスが正常にIPアドレスを取得できるようになります。故障やメンテナンスなどの際にも、ダウンタイムを最小限に抑えることができるため、ユーザーエクスペリエンスの向上に貢献します。