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