Ambari-HDFS高可用性構成NameNodeHAの原則とステップ(a)の操作
Ambari Hdfs High Availability Configuration Namenode Ha Principles
NameNodeHAの原則
一般的なHAクラスターでは、2つの別々のマシンがNameNodeで構成されます。クラスター作業では、マシンはNameNodeにあります アクティブ 州と他の 待機する 状態。
すべてのクライアント操作を担当するアクティブなNameNodeクラスター、およびスタンバイはサーバーからの役割を果たします。スタンバイステートマシンは、(必要に応じて)迅速なフェイルオーバーを提供するのに十分なままです。
ステータスを維持するために、アクティブノードとのスタンバイノードの同期では、両方のノードにグループの名前が付けられます JournalNodes(JNS) 通信する独立したデーモン。アクティブな名前空間ノードが変更を実行すると、アクティブノードはこれらのJNの大部分に記録されたログを永続的に変更します。スタンバイノードは、JN JNから読み取りおよび編集を行い、変更編集ログを継続的に監視します。スタンバイノードの編集が観察されると、これらの編集はそれ自体の名前空間に適用されます。 QJMの場合、JournalNodesは共有編集ログストレージの実装です。フェイルオーバーが発生した場合、スタンバイサーバーは、ステータスをアクティブにアップグレードする前に、JounalNodesからすべての編集を読み取ることを確認します。 (このメカニズムにより、フェイルオーバーが完了する前に名前空間の状態が完全に同期されます。)
注意 | |
---|---|
スタンバイノードはセカンダリNameNodeのタスクも実行するため、HA構成にはセカンダリNameNodeは必要ありません。 |
高速フェイルオーバーを提供するために、スタンバイノードはブロック位置が設定されたブロックのグループに関する最新情報を必要とします。ブロックの場所に関する正確な情報を取得するために、DataNodeは2つのNameNodeの場所を構成し、場所情報と心臓ブロックNameNode2台のマシンを送信します。
HAクラスターには適切な操作が不可欠であり、1つのNameNodeのみがアクティブ状態である必要があります。そうしないと、2つのNameNodeコンピューター間で名前空間の状態が急速に異なり、データが失われる可能性があります。 (この状態は、 スプリットブレインシナリオスプリットブレインシナリオ 。)
スプリットブレインの実施形態を防ぐために、JournalNodesはライターとして1つのNameNodeのみを許可します。フェイルオーバー中に、アクティブ状態になることを選択すると、NameNodeによって書き込まれたJournalNodesの役割が引き継がれます。この手順により、別のNameNodeが引き続きアクティブになるのを防ぎ、新しいアクティブノードのフェイルオーバーを安全に進めることができます。
HAクラスターでは、スタンバイNameNode名前空間もチェックポイント状態を実行します。したがって、HAグループ、CheckpointNode、またはBackupNodeでのセカンダリNameNodeの展開に焦点を当てないでください。
注意 |
---|
編集ログの変更はほとんどのJNに書き込む必要があるため、少なくとも3つのJournalNodeデーモンが必要です。これにより、システムは単一のマシンの障害に耐えることができます。 3つ以上のJournalNodeを実行することもできますが、システムが許容できる障害の数を増やすには、奇数のJN(つまり、3、5、7など)を実行する必要があります。 N個のJournalNodeを実行すると、システムは最大(N-1)/ 2倍の障害に耐え、正常に実行を継続できることに注意してください。 |
以下を展開することをお勧めします。
サービス | パッケージ | 管理ノードMN | データノードDN | |||
MN | MN | DN | DN | DN | ||
HDFS | NameNode | Y | Y | |||
ZKFailoverController | Y | Y | ||||
DataNode | Y | Y | Y | |||
JournalNode | Y | Y | Y |
ZKFailoverController(ZKFC)は、ZooKeeperクライアントであり、NameNodeのステータスの監視と管理を行います。各マシンはNameNodeサービスを実行し、ZKFCも実行します。ZKFCの責任:
-
ヘルスモニタリング: ZKFCは、定期的にヘルスチェックコマンドを使用してローカルのNameNodeにpingを実行します。
-
ZooKeeperセッション管理: ローカルのNameNodeが正常な場合、ZKFCはセッションをZooKeeper状態で開いたままにします。ローカルNameNodeがアクティブ状態、それはまた特別な 'が含まれていますロック「ZooKeeperDuiを使用してロックをZnodeします。」セッションが期限切れになった場合、一時的なノードをサポートします。ノードロックは自動的に削除されます。
-
ZooKeeperの選挙に基づく: ローカルのNameNodeヘルスおよび他のノードが現在ロックznodeでない場合、ZKFCはロックの取得を試みます。 ZKFCが成功した場合、「選挙に勝つ」ことでフェイルオーバーを実行し、ローカルのNameNodeに配置されます。アクティブ状態。フェイルオーバープロセス:最初に、必要に応じて、前者を分離しますアクティブそして、ローカルのNameNodeに変換されますアクティブ状態。
NameNodeHAデプロイメント
1.1前提条件
(1)少なくとも3つのホストのクラスターを確認し、少なくとも3つのApacheZooKeeperサーバーを実行します。
(2)Hadoop分散ファイルシステム(HDFS)とZooKeeperサービスがメンテナンスモードになっていないことを確認します。
HDFSまたはZooKeeperサービスがメンテナンスモードの場合、NameNodeHAウィザードは正常に完了しません。
注:HAで使用できないHDFSクラスター名には、アンダースコア(_)が含まれています。
個人的にHBaseを非アクティブ化して、背後での運用を継続します
1.2手順
(1)メインWebインターフェースで、「サービス」>「HDFS」を選択します。
(2)サービス操作をクリックし、[NameNodeHAを有効にする]をクリックします。
(3)HAウィザードの有効化が開始されます。このガイドでは、高可用性に必要なNameNodeシリーズの自動および手動の手順を設定する方法について説明します。
(4)[はじめに]ページで、名前サービスID(myclusterなどの独自の名前)を入力し、[次へ]をクリックします。
HAのセットアップが完了したら、NameNodeFQDNの代わりにこのNameserviceIDを使用します。
(5) ' ホストを選択 'ページをクリックし、他のNameNode JournalNodesホストを選択して、'をクリックします。 次 '、JournalNodes通常、番号は奇数であり、推奨ノードDataNodeに配置されます。
(6)[レビュー]ページで、ホストの選択を確認し、[次へ]をクリックします。
(7)による 必要な手動手順の説明:NameNode内 ページ チェックポイントで 、次にクリックします 次 :
現在のNameNodeホストにログオンしてから、セーフモードに設定されたコマンドNameNodeを実行し、チェックポイントを作成する必要があります。
(8) ' コンポーネントの構成 'ページ、監視プログレスバーを設定し、[次へ]をクリックします。
(9)必要な手動手順の説明に従って:JournalNodesページを初期化し、[次へ]をクリックします。
(10)必要な手動手順の説明に従って:JournalNodesページを初期化し、[次へ]をクリックします。
JournalNodesを初期化するためにこのコマンドを実行するには、現在のNameNodeホストにログオンする必要があります。
(11)検出されたAmbari成功メッセージとウィンドウの下部がJournalNodesの初期化になったら、[次へ]をクリックします
(12)で ' コンポーネントの開始 'ページで、ZooKeeperサーバーとしてのプログレスバーとNameNodeモニターを起動し、[次へ]をクリックします。
(13)必要な手動ステップ:初期化ページのメタデータNameNode HA:各ステップを完了するためのページ上の指示をクリックし、[次へ]をクリックします。
このステップでは、現在のNameNodeと追加のNameNodeにログオンする必要があります。各コマンドにログインしている適切なホストを確認してください。各コマンドが完了したら、[OK]をクリックして確認します。
(14)[HAセットアップのファイナライズ]ページで、ウィザードに従ってHAセットアップを完了し、進行状況バーを監視し、[完了]をクリックしてウィザードを完了します。
Web UIをリロードした後、いくつかのアラート通知が表示される場合があります。すべてのサービスが再起動するまで、数分待ちます。
(15)必要に応じて、Webを使用してコンポーネントを再起動します。
(16)Hiveを使用している場合は、NameNodeURIではなくNameserviceURIを指すように手動でHiveMetastoreFSルートディレクトリを作成する必要があります。ネームサービスIDは、「はじめに」の手順で作成します。
ステップ:
a、マウントされたハイブ メタストア ホスト上の現在のFSルートディレクトリを見つけます。
hive --config /etc/hive/conf/conf.server --service metatool -listFSRoot
出力は次のようになります
FSルーツのリスト... hdfs:/// apps / hive / Warehouse 。
b、ルートFSを変更します
$ hive --config /etc/hive/conf/conf.server --service metatool -updateLocation
たとえば、Nameservice IDがmyclusterの場合、次のように入力します。
$ hive --config /etc/hive/conf/conf.server --service metatool -updateLocation hdfs:// mycluster / apps / hive / Warehouse hdfs://132.bd:8020/ apps / hive / Warehouse
出力は次のようになります。
次の場所が正常に更新されました...SDSテーブルのXレコードを更新
(17)環境を調整または確認するにはZooKeeperフェイルオーバーコントローラーの再試行設定。
a、ここ:[サービス]> [HDFS]> [構成]> [高度なコアサイト]。
b、パラメータを設定します。
ha.failover-controller.active-standby-elector.zk.op.retries = 120
注:NameNode削除インターフェースに追加のような失敗をインストールした場合、インターフェースはRestfulによってのみ削除できます。例:
コマンドを実行しているAmbariサーバーホストで:
curl -u:-H'X-Requested-By:ambari '-i -X GET:// localhost:/ api / v1 / clusters // host_components?HostRoles / component_name = NAMENODE
ディスプレイに2つのNameNodeが含まれている場合は、次のいずれかを削除します。
curl -u:-H'X-Requested-By:ambari '-i -X DELETE:// localhost:/ api / v1 / clusters // hosts // host_components / NAMENODE