私たちの以前のブログでは、私たちが研究してきたの Hadoopの導入を そして、ののHadoopの機能を 今、このブログでは、我々は詳細にHDFS名前ノードの高可用性機能をカバーしようとしている。
まず第一に、我々は次のクォーラム・ジャーナルノードと共有ストレージを使用してHadoopの高可用性アーキテクチャの実装と、HDFS NemNode高可用性アーキテクチャについて説明します。
HDFS名前ノード高可用性
ではHDFS のの 、データは、ハードウェア障害にもかかわらず、高可用性、アクセス可能です。 HDFSは非常に大きなファイルを格納するために設計された最も信頼性の高いストレージ・システムです。
HDFSはマスタ/スレーブトポロジに従っています。マスターはの名前ノードのされています そして奴隷はのデータノードのです 。名前ノードを格納するメタデータ。メタデータは、ブロックの数、それらの位置、複製、およびその他の詳細を含みます。データの高速検索のために、メタデータは、マスタで利用可能です。名前ノードは、スレーブノードにタスクを維持し、割り当てる。
名前ノードは、を単一障害点(SPOF)のでした Hadoopの2.0の前に。 HDFSクラスタは、単一の名前ノードを持っていました。名前ノードに障害が発生した場合、クラスタ全体がダウンします。
単一障害点は、以下の方法で高可用性を制限します。
- オペレータが新しい名前ノードを再起動しない限り、
- すべての計画外のイベントトリガの場合は、ノードがクラッシュしたように、クラスタが使用できなくなります。 名前ノード上のハードウェアのアップグレードなどの
- また、計画的なメンテナンス作業は、Hadoopクラスタのダウンタイムが発生します。
HDFS名前ノードの高可用性アーキテクチャ
Hadoopの2.0の導入は、これを克服SPOF のの 複数の名前ノードへのサポートを提供することもできます。 HDFS名前ノード高可用性アーキテクチャは、ホットスタンバイとアクティブ/パッシブ構成では、同じクラスタ内の2つの冗長NameNodesを実行するオプションを提供する。
- のアクティブ名前ノードの - それは、HDFSクラスタ内のすべてのHDFSクライアントの操作を処理します。 。
- のパッシブ名前ノードを - それは、スタンバイ名前ノードです。これは、アクティブな名前ノードと同様のデータを持っています。
だから、アクティブな名前ノードに障害が発生したときに、受動的な名前ノードは、アクティブノードのすべての責任を負います。したがって、HDFSクラスタが動作し続け。
次のようにHDFS高可用性クラスタ内で一貫性を維持する上での問題点は以下のとおりです。
- アクティブおよびスタンバイ名前ノードは、常に彼らは同じメタデータを持っている必要があり、すなわち、相互に同期しなければなりません。これは、それがクラッシュしてしまった同じ名前空間の状態にHadoopクラスタを回復することが可能。そして、これは高速フェイルオーバーを持っているために私たちを提供します。
- 一度にアクティブに一つだけ名前ノードがあるはずです。それ以外の場合は、2名前ノードはデータの破損につながります。私たちは、「をスプリットブレインシナリオのように、このシナリオを呼び出します 」、クラスタは、より小さなクラスタに分け取得する場所。一人一人は、それが唯一のアクティブクラスタであると考えています。 「フェンシング」は、フェンシングが一つだけ名前ノードは、特定の時間にアクティブのままであることを確実にするプロセスである。 回避します
Hadoopの高可用性アーキテクチャ
の実装
二NameNodesはHDFS名前ノードの高可用性アーキテクチャで同時に実行されます。 HDFSクライアントは、次の2つの方法を以下にアクティブおよびスタンバイ名前ノード構成を実装することができます:
- クォーラム・ジャーナルノード使用します。
- 共有ストレージ使用します。
1。使用してクォーラム・ジャーナルノード
<強い>クォーラム・ジャーナルノードを HDFSの実装です。 QJNは、編集ログを提供します。これは、アクティブとスタンバイの名前ノード間のこれらの編集ログを共有することを可能にします。
スタンバイ名前ノードが通信し、高可用性を実現するためにアクティブ名前ノードと同期します。これは、「ジャーナル・ノード」と呼ばれるデーモンのグループによって起こります。クォーラムジャーナルノードは、ジャーナル・ノードのグループとして実行されます。少なくとも三つのジャーナルノードがあるはずです。
Nジャーナルノードに対して、システムは、最大で(N-1)/ 2の障害を許容することができます。システムは、このような作業を続けています。そう三個のジャーナル・ノードに対して、システムは、1つ、それらの{(3-1)/ 2}の故障を許容することができる。
アクティブノードは、任意の変更を行うたびに、それはすべてのジャーナルノードに変更を記録します。
スタンバイ・ノードは、ジャーナル・ノードから編集内容を読み取り、一定の方法で、独自の名前空間に適用されます。フェイルオーバーが発生した場合には、スタンバイは、それがアクティブな状態に自分自身を促進する前にジャーナル・ノードからすべての編集を読んでいることを保証します。障害が発生する前に、名前空間の状態が完全に同期していることをこれが保証されます。
高速フェイルオーバーを提供するために、スタンバイ・ノードは、クラスタ内のデータブロックの位置に関する最新の情報を持っている必要があります。これを実現するために、名前ノードの両方のIPアドレスはすべてdatanodesに利用可能であり、彼らは両方の名前ノードにブロック位置情報とハートビートを送信してください。
の名前ノードのフェンシングの
HAクラスタの正しい動作のために、一つだけNameNodesのは、一度にアクティブべきです。それ以外の場合は、名前空間の状態が2 NameNodes間外れます。だから、フェンシングは、クラスタ内でこのプロパティを確保するためのプロセスである。
- ジャーナルノードは一つだけ名前ノードが一度に作家にできるようにすることで、このフェンシングを行います。
- は、スタンバイの名前ノードには、ジャーナル・ノードへの書き込みの責任を取り、アクティブなままにする任意の他の名前ノードを禁止します。
- 最後に、新しいアクティブ名前ノードは、その活動を行うことができます。
2。
共有ストレージを使用しますスタンバイおよび「共有記憶装置」を用いて互いにアクティブ名前ノードの同期。この実現のために、活性名前ノードの両方と名前ノードは、共有記憶装置(.i.e。ネットワーク・ファイル・システム)上の特定のディレクトリにアクセスしなければならない。
スタンバイアクティブな名前ノードは、任意の名前空間の変更を実行すると、それが共有ディレクトリに保存された編集ログファイルへの変更の記録をログに記録します。スタンバイ名前ノードは、編集のために、このディレクトリを監視し、編集が発生した場合、スタンバイ名前ノードは、独自の名前空間に適用します。障害が発生した場合には、スタンバイの名前ノードは、それがアクティブな状態に自分自身を推進する前に、共有ストレージからすべての編集を読んでいることを保証します。フェイルオーバーが発生する前に、名前空間の状態が完全に同期していることをこれが保証されます。
「スプリット・ブレインのシナリオ」を防止するために、その中の2人の名前ノード、管理者必須の構成との間の名前空間の状態のずれ共有ストレージのための少なくとも1つのフェンシング方法。
結論
したがって、Hadoopの2.0 HDFS HAは、単一の活性名前ノードと単一のスタンバイ名前ノードを提供します。しかし、いくつかの展開では、をフォールトトレランスの高度を必要とします 。 Hadoopの新バージョン3.0は、ユーザーが多くのスタンバイNameNodesを実行することができます。
例えば、5 journalnodesと3名前ノードを設定します。結果Hadoopクラスタは、2つのノードの故障ではなく、いずれかを許容することができるように
以下のコメントセクションでHDFS名前ノード高可用性に関連して、あなたの経験や提案を共有してください。