Azure HDInsight でサポートされる高可用性サービス

分析コンポーネントの最適なレベルの可用性を提供するために、HDInsight は重要なサービスの高可用性 (HA) を確保するための独自のアーキテクチャで開発されました。 Microsoft では、自動フェールオーバーを提供するために、このアーキテクチャの一部のコンポーネントを開発しました。 その他のコンポーネントは、特定のサービスをサポートするためにデプロイされる標準の Apache コンポーネントです。 この記事では、HDInsight の HA サービス モデルのアーキテクチャ、HDInsight が HA サービスのフェールオーバーをサポートする方法、および他のサービス中断から復旧するためのベスト プラクティスについて説明します。

この記事には、Microsoft が使用しなくなった "スレーブ" という用語への言及が含まれています。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。

高可用性インフラストラクチャ

HDInsight には、自動フェールオーバー機能を備えた 4 つのプライマリ サービスが高可用性を確保するためのカスタマイズされたインフラストラクチャが用意されています。

  • Apache Ambari サーバー
  • Apache YARN 用アプリケーション タイムライン サーバー
  • Hadoop MapReduce 用ジョブ履歴サーバー
  • Apache Livy

このインフラストラクチャは、多くのサービスとソフトウェア コンポーネントで構成され、その一部は Microsoft によって設計されています。 次のコンポーネントは、HDInsight プラットフォームに固有です。

  • スレーブ フェールオーバー コントローラー
  • メイン フェールオーバー コントローラー
  • スレーブ高可用性サービス
  • 高可用性サービスを習得する

高可用性インフラストラクチャ。

オープン ソースの Apache 信頼性コンポーネントでサポートされている他の高可用性サービスもあります。 これらのコンポーネントは、HDInsight クラスターにも存在します。

  • Hadoop ファイル システム (HDFS) ネームノード
  • YARN リソースマネージャー (YARN ResourceManager)
  • HBase Master

次のセクションでは、これらのサービスがどのように連携するかについて詳しく説明します。

HDInsight 高可用性サービス

Microsoft では、HDInsight クラスターの次の表に示す 4 つの Apache サービスのサポートを提供しています。 Apache のコンポーネントによってサポートされる高可用性サービスと区別するために、それらは HDInsight HA サービスと呼ばれます。

Service クラスター ノード クラスターの種類 Purpose
Apache Ambari サーバー アクティブなヘッドノード すべて クラスターを監視および管理します。
Apache YARN 用アプリケーション タイムライン サーバー アクティブなヘッドノード Kafka を除くすべて クラスターで実行されている YARN ジョブに関するデバッグ情報を保持します。
Hadoop MapReduce 用ジョブ履歴サーバー アクティブなヘッドノード Kafka を除くすべて MapReduce ジョブのデバッグ データを保持します。
Apache Livy アクティブなヘッドノード Spark REST インターフェイスを介した Spark クラスターとの簡単な対話が可能

現在、HDInsight Enterprise セキュリティ パッケージ (ESP) クラスターでは、Ambari サーバーの高可用性のみが提供されます。 アプリケーション タイムライン サーバー、ジョブ履歴サーバー、Livy はすべてヘッドノード0 でのみ実行されており、Ambari がフェールオーバーしても headnode1 にフェールオーバーされません。 アプリケーション タイムライン データベースもヘッドノード0 にあり、Ambari SQL サーバー上にありません。

アーキテクチャ

各 HDInsight クラスターには、それぞれアクティブ モードとスタンバイ モードの 2 つのヘッドノードがあります。 HDInsight HA サービスはヘッドノードでのみ実行されます。 これらのサービスは常にアクティブなヘッドノードで実行され、スタンバイ ヘッドノードで停止してメンテナンス モードにする必要があります。

HA サービスの正しい状態を維持し、高速フェールオーバーを提供するために、HDInsight では、分散アプリケーションの調整サービスである Apache ZooKeeper を利用して、アクティブなヘッドノードの選択を実行します。 また、HDInsight では、HDInsight HA サービスのフェールオーバー手順を調整するいくつかのバックグラウンド Java プロセスもプロビジョニングされます。 これらのサービスは、マスター フェールオーバー コントローラー、スレーブ フェールオーバー コントローラー、 master-ha サービス、スレーブ ha サービスです。

Apache ZooKeeper

Apache ZooKeeper は、分散アプリケーション向けの高パフォーマンスの調整サービスです。 運用環境では、ZooKeeper は通常、ZooKeeper サーバーのレプリケート されたグループがクォーラムを形成するレプリケート モードで実行されます。 各 HDInsight クラスターには、3 つの ZooKeeper サーバーがクォーラムを形成できる 3 つの ZooKeeper ノードがあります。 HDInsight には、2 つの ZooKeeper クォーラムが互いに並行稼働しています。 1 つのクォーラムは、HDInsight HA サービスを実行するクラスター内のアクティブなヘッドノードを決定します。 後のセクションで詳しく説明するように、Apache によって提供される HA サービスを調整するために、もう 1 つのクォーラムが使用されます。

スレーブ フェールオーバー コントローラー

スレーブ フェールオーバー コントローラーは、HDInsight クラスター内のすべてのノードで実行されます。 このコントローラーは、各ノードで Ambari エージェントと slave-ha-service を開始する役割を担います。 アクティブなヘッドノードに関して最初の ZooKeeper クォーラムが定期的に照会されます。 アクティブヘッドノードとスタンバイヘッドノードが変更されると、スレーブフェールオーバーコントローラは次の手順を実行します。

  1. ホスト構成ファイルを更新します。
  2. Ambari エージェントを再起動します。

スレーブ ha サービスは、スタンバイ ヘッドノード上の HDInsight HA サービス (Ambari サーバーを除く) を停止する役割を担います。

メイン フェールオーバー コントローラー

マスター フェールオーバー コントローラーは両方のヘッドノードで実行されます。 どちらのマスター フェイルオーバー コントローラーも、最初の ZooKeeper クォーラムと通信し、実行中のヘッドノードをアクティブなヘッドノードとして指名します。

たとえば、ヘッドノード 0 のマスター フェールオーバー コントローラーが選択に勝った場合、次の変更が行われます。

  1. ヘッドノード 0 がアクティブになります。
  2. マスター フェールオーバー コントローラーは、ヘッドノード 0 で Ambari サーバーと master-ha-service を起動します。
  3. もう 1 つのマスター フェールオーバー コントローラーは、ヘッドノード 1 で Ambari サーバーと master-ha-service を停止します。

master-ha-service はアクティブなヘッドノードでのみ実行され、スタンバイ ヘッドノード上の HDInsight HA サービス (Ambari サーバーを除く) が停止され、アクティブなヘッドノードで開始されます。

フェールオーバー プロセス

フェールオーバー プロセス。

正常性モニターは、マスター フェールオーバー コントローラーと共に各ヘッドノードで実行され、Zookeeper クォーラムにハートビート通知を送信します。 ヘッドノードは、このシナリオでは HA サービスと見なされます。 正常性モニターは、各高可用性サービスが正常かどうか、およびリーダーシップ選挙に参加する準備ができているかどうかを確認します。 "はい" の場合、このヘッドノードは選挙で競合します。 そうでない場合は、再び準備が整うまで選挙を終了します。

スタンバイ ヘッドノードがリーダーシップを達成し、アクティブになった場合 (前のアクティブ ノードで障害が発生した場合など)、マスター フェールオーバー コントローラーは、そのノード上のすべての HDInsight HA サービスを開始します。 マスター フェールオーバー コントローラーは、他のヘッドノードでこれらのサービスを停止します。

HDInsight HA サービスの障害 (サービスの停止や異常など) の場合、マスター フェールオーバー コントローラーはヘッドノードの状態に従ってサービスを自動的に再起動または停止する必要があります。 ユーザーは、両方のヘッド ノードで HDInsight HA サービスを手動で開始しないでください。 代わりに、サービスの復旧に役立つ自動フェールオーバーまたは手動フェールオーバーを許可します。

不注意による手動介入

HDInsight HA サービスは、アクティブなヘッドノードでのみ実行し、必要に応じて自動的に再起動します。 個々の HA サービスには独自の正常性モニターがないため、個々のサービスのレベルでフェールオーバーをトリガーすることはできません。 フェールオーバーは、サービス レベルではなくノード レベルで保証されます。

既知の問題

  • スタンバイ ヘッドノードで HA サービスを手動で開始する場合、次のフェールオーバーが発生するまで停止しません。 HA サービスが両方のヘッドノードで実行されている場合、Ambari UI にアクセスできない、Ambari がエラーをスローする、YARN、Spark、Oozie のジョブがスタックする可能性がある、などの潜在的な問題があります。

  • アクティブなヘッドノード上の HA サービスが停止すると、次のフェールオーバーが発生するか、マスター フェールオーバー コントローラー/master-ha-service が再起動されるまで再起動されません。 アクティブなヘッドノードで 1 つ以上の HA サービスが停止する場合 (特に Ambari サーバーが停止した場合)、Ambari UI にアクセスできません。YARN、Spark、Oozie ジョブのエラーなど、その他の潜在的な問題があります。

Apache 高可用性サービス

Apache では、HDFS NameNode、YARN ResourceManager、HBase Master の高可用性が提供されます。HDInsight クラスターでも使用できます。 HDInsight HA サービスとは異なり、ESP クラスターでサポートされています。 Apache HA サービスは、2 番目の ZooKeeper クォーラム (上記のセクションで説明) と通信して、アクティブ/スタンバイ状態を選択し、自動フェールオーバーを実行します。 次のセクションでは、これらのサービスのしくみについて詳しく説明します。

Hadoop 分散ファイルシステム (HDFS) NameNode

Apache Hadoop 2.0 以降に基づく HDInsight クラスターは、NameNode の高可用性を提供します。 ヘッドノードでは、自動フェールオーバー用に構成された 2 つの NameNode が実行されています。 NameNodes は ZKFailoverController を使用して Zookeeper と通信し、アクティブ/スタンバイ状態を選択します。 ZKFailoverController は両方のヘッドノードで実行され、マスター フェールオーバー コントローラーと同じ方法で動作します。

2 番目の Zookeeper クォーラムは最初のクォーラムから独立しているため、アクティブな NameNode がアクティブなヘッドノードで実行されない可能性があります。 アクティブな NameNode が停止しているか異常な場合、スタンバイの NameNode が選択に勝ち、アクティブになります。

YARN リソースマネージャー (YARN ResourceManager)

Apache Hadoop 2.4 以降に基づく HDInsight クラスターでは、YARN ResourceManager の高可用性がサポートされています。 それぞれ、ヘッドノード 0 とヘッドノード 1 で実行されている 2 つの ResourceManagers rm1 と rm2 があります。 NameNode と同様に、YARN ResourceManager も自動フェールオーバー用に構成されます。 別の ResourceManager は、現在アクティブな ResourceManager が停止または応答しないときに、アクティブに自動的に選択されます。

YARN ResourceManager は、埋め込まれた ActiveStandbyElector を障害検出機能およびリーダーエレクタとして使用します。 HDFS NameNode とは異なり、YARN ResourceManager には別の ZKFC デーモンは必要ありません。 アクティブな ResourceManager は、その状態を Apache Zookeeper に書き込みます。

YARN ResourceManager の高可用性は、NameNode やその他の HDInsight HA サービスとは無関係です。 アクティブな ResourceManager は、アクティブなヘッドノードまたはアクティブな NameNode が実行されているヘッドノードでは実行できません。 YARN ResourceManager の高可用性の詳細については、「 ResourceManager の高可用性」を参照してください。

HBase Master

HDInsight HBase クラスターでは、HBase Master の高可用性がサポートされます。 ヘッドノードで実行される他の HA サービスとは異なり、HBase マスターは 3 つの Zookeeper ノードで実行されます。そのうちの 1 つはアクティブ マスターで、残りの 2 つはスタンバイです。 NameNode と同様に、HBase マスターはリーダー選択のために Apache Zookeeper と連携し、現在アクティブなマスターに問題がある場合は自動フェールオーバーを実行します。 アクティブな HBase マスターは、いつでも 1 つだけです。

次のステップ