序文分散システムは、主にデータの一貫性を確保するためにマスタースレーブノードとして設計されています。マスタースレーブ設計は、最も直感的なデータ一貫性保証メカニズムです。 たとえば、マスタースレーブレプリケーションでは、マスターノードが書き込みを担当し、スレーブノードが読み取りを担当するため、読み取りパフォーマンスが向上します。スレーブ ノードはハートビートを通じてマスター ノードと定期的に通信します。マスターノードに障害が発生すると、スレーブノードが直ちにマスターノードのタスクを引き継ぎます。 しかし、瞬間的な過負荷、ネットワークの輻輳などの理由により、マスターノードが一時的に応答を失い、応答タイムアウト期間を超えてしまいます。このとき、スレーブ ノードが起動してリーダーの役割を引き継ぎますが、元のマスター ノードがサービスを再開します。この時点で、選出メカニズムがない場合 (自分自身をリーダーとして宣言するのではなく、他のサーバーまたはクライアントに自分がリーダーであることを知らせるために通知する必要がある)、リーダー ノードが 2 つ存在し、クラスターに混乱が生じる可能性があります。 これがビッグデータ フレームワークのマスター/スレーブ選出の概要です。今すぐ保存してください!うっかり使ってしまう瞬間が必ずあります。 飼育員選挙Zookeeper の紹介 デザイン パターンの観点から見ると、Zookeeper はオブザーバー パターンに基づいて設計された分散サービス管理フレームワークです。誰もが関心を持つデータを保存および管理し、オブザーバーからの登録を受け入れる役割を担います。このデータのステータスが変更されると、Zookeeper は Zookeeper に登録されているオブザーバーに通知して、それに応じて対応する責任があります。 飼育係の特徴 クラスター内のノードの半分以上が稼働している限り、Zookeeper クラスターは正常にサービスを提供できます。これが選挙メカニズムの奇数原則です (Zookeeper は奇数のサービスをインストールするのに適しています)。 クラスターはリーダーと複数のフォロワーで構成されます。 飼育員選挙の仕組み 新しいクラスター選挙 ID が Service1 から Service5 までの 5 台のサーバーで構成される Zookeeper クラスターがあるとします。同時に、それらはすべて新しく開始されたもの、つまり履歴データがなく、保存されているデータの量の点では同じです。これらのサーバーが順番に起動されると仮定して、何が起こるかを見てみましょう。
非フレッシュクラスタ選出 正常に動作している Zookeeper クラスターの場合、マシンがダウンして再選出が必要になった場合、選出プロセスにはデータ ID、サーバー ID、論理クロックが含まれている必要があります。 論理クロック: この値は 0 から始まり、各選択で一貫している必要があります。選挙結果が小さい場合は無視され、投票が再実行されます (選挙時間が不完全なサーバーは除きます)。 データ ID: 新しいバージョンのデータはより大きくなり、データが更新されるたびにバージョンも更新されます。最も大きなデータ ID を持つサーバーが勝ちます (最新のデータを持つサーバーが選択されます)。 サーバー ID: つまり、myid。データ ID が同じ場合、ID が大きいサーバーが勝ちます (データが同じ場合は、ID が最も大きいサーバー、つまり重みが最も大きいサーバーが選択されます)。 Kafka は Zookeeper の選出に依存していますKafka は ZK で何を行いますか?ZooKeeper は、分散システムの調整サービスを提供するツールとして Kafka によって使用されています。分散システムでは、コンシューマーはどのプロデューサーが利用可能かを知る必要があります。消費者が生産者との接続を確立し、その接続が成功するかどうかを毎回テストする必要がある場合、効率が低すぎて望ましくないのは明らかです。 ZooKeeper コーディネーション サービスを使用することで、Kafka はプロデューサー、コンシューマー、ブローカーなどを組み合わせることができます。同時に、ZooKeeper の助けを借りて、Kafka はステートレスな条件下ですべてのコンポーネントのプロデューサーとコンシューマー間のサブスクリプション関係を確立し、負荷分散を実現できます。 カフカ選挙リーダーは、動的な同期レプリカ セット (ISR) を維持します。これは、リーダーと同期されているフォロワーのセットを意味します。 ISR 内のフォロワーがデータ同期を完了すると、リーダーはフォロワーに ack を送信します。フォロワーが長時間リーダーとデータを同期できない場合、フォロワーは ISR から追い出されます。時間のしきい値は、replica.lag.time.max.ms パラメータによって設定されます。リーダーが失敗すると、ISR から新しいリーダーが選出されます。 したがって、このセット内の任意のノードはいつでもリーダーとして選出される可能性があります。 ISR は ZooKeeper で管理されます。 ISR には f+1 個のノード (フォロー + リーダー) があり、これにより f 個のノードがダウンしてもメッセージを失うことなくサーバーは正常にサービスを提供できます。 ISR のメンバーシップは動的です。ノードが削除された場合、そのノードは再び「同期」状態に達すると ISR に再参加できます。したがって、リーダーがダウンした場合は、ISR からフォロワーを選択するだけです。 全員が吊り下げられたらどうなるでしょうか? すべてのノードがダウンすると、Kafka はデータが失われないことを保証しません。したがって、すべてのレプリカがダウンした場合は、タイムリーに対応する必要があります。 ISR 内のいずれかのノードが回復し、リーダーとして機能するまで待機します。 付録: Kafka が ZK を放棄すべき理由それ自体は分散システムですが、それを管理するには別の分散システムが必要であり、間違いなく複雑さが増します。 導入時には 2 つのシステムを導入する必要があり、運用および保守担当者は運用および保守能力を備えている必要があります。 コントローラーの障害処理: 単一のノードとの対話に依存します。このノードに障害が発生した場合は、新しいノードを選択する必要があります。新しい選択が成功すると、メタデータは初期化のために再度取得され、他のすべての更新を通知する必要があります。古いものは、リスナー、イベント処理スレッド、およびスケジュールされたタスクをシャットダウンする必要があります。パーティションの数が非常に多い場合、このプロセスには非常に時間がかかり、このプロセス中にクラスターは動作できません。 パーティションの数が増えると、保存されるメタデータが増え、クラスターの負荷が増加します。 ZooKeeper に基づく Hadoop の高可用性HDFS 高可用性 導入 一般的な HA クラスターでは、NameNode は 2 台の独立したマシン上に構成されます。いつでも、1 つの NameNode がアクティブ状態になり、もう 1 つの NameNode がバックアップ状態になります。アクティブな NameNode はクラスター内のすべてのクライアントに応答し、バックアップ NameNode は必要に応じて高速転送を確保するためのレプリカとしてのみ機能します。したがって、HDFS の場合、高可用性は実際には NameNode の高可用性を指します。 NameNode はクラスターのメタデータ情報を保存するため、これが失われるとクラスター全体が存在しなくなります。 アクティブ/スタンバイ切り替えコントローラ ZKFailoverController: ZKFC は独立したプロセスとして実行され、NameNode のアクティブ/スタンバイ切り替えの全体的な制御を実行します。 ZKFailoverController は、NameNode のヘルス ステータスを適時に検出し、マスター NameNode に障害が発生した場合に Zookeeper を使用して自動マスター/スレーブ選択と切り替えを実装します。もちろん、NameNode は現在、Zookeeper に依存しない手動のマスター/スレーブ切り替えもサポートしています。 原理 HDFS の 2 つの NN が起動すると、ZKFC (Zookeeper FailoverController) も起動します。 ZKFC は、一時的にシリアル化されたノードを ZK に書き込み (デフォルトのノード名は /hadoop-ha)、ZK との接続を取得します。 NN に障害が発生すると、ZKFC にも障害が発生し、ノードは ZK によって自動的に削除されます。 ZKFC にはウォッチャー メカニズム (子ノードが変更されたときにトリガーされる) があります。 NN で開始された別の ZKFC は、子ノードが変更されたことを検出し、それが 1 位にランクされているかどうかを確認します。そうであれば、2 番目の NN に引き継ぎを開始するように通知し、データを JN に同期し (IDS ファイルをダウンロードして FImage とマージし、新しい FImage を生成)、すべてのメタデータを最新のものにします。障害が発生した NN が再起動されると、ZKFC も ZK にノードを書き込み、現在の NN に障害が発生した後にマスターとして引き継ぎます。 ZKFCとは何ですか?
内部操作と原理HealthMonitor は初期化された後、内部スレッドを開始し、NameNode に対応する HAServiceProtocol RPC インターフェースのメソッドを定期的に呼び出して、NameNode のヘルス状態を検出します。 HealthMonitor は、NameNode のヘルス ステータスが変化したことを検出すると、処理のために ZKFailoverController によって登録された対応するメソッドをコールバックします。 ZKFailoverController は、アクティブ/スタンバイの切り替えが必要であると判断した場合、まず ActiveStandbyElector を使用してアクティブ/スタンバイ ノードを自動的に選択します。 ActiveStandbyElector は Zookeeper と対話して、自動マスター/スレーブ選択を完了します。 マスター/スレーブの選出が完了すると、ActiveStandbyElector は ZKFailoverController の対応するメソッドをコールバックして、現在の NameNode がマスター NameNode またはスタンバイ NameNode になるように通知します。 ZKFailoverController は、対応する NameNode の HAServiceProtocol RPC インターフェースのメソッドを呼び出して、NameNode をアクティブ状態またはスタンバイ状態に変換します。 簡単に説明すると、ZooKeeper はアクティブ ノードの選択を実装するためのシンプルなメカニズムを提供します。現在のアクティブに障害が発生した場合、スタンバイは特定の排他ロックを取得し、ロックを取得したノードが次にアクティブになります。 Yarn の高可用性導入 YARN ResourceManager の高可用性は HDFS NameNode と似ていますが、NameNode とは異なり、ResourceManager には維持するメタデータ情報がそれほど多くないため、そのステータス情報は Zookeeper に直接書き込まれ、マスター/スレーブの選択は Zookeeper に依存できます。 内部操作と原理
その他と概要ビッグデータの分野では、Hbase クラスター、Kudu クラスター、Impala クラスターなど、マスターとスレーブの選択に Zookeeper を利用するフレームワークが多数あります。基本的な原理は基本的に同じです。 要約する選挙: Zookeeper はクラスター管理機能を簡単に実装できます。複数のサーバーがサービス クラスターを形成する場合、リーダーはクラスター内の各マシンのサービス ステータスを把握し、調整を行ってサービス戦略を再配布する必要があります。 1 つ以上のサーバーがクラスターに追加される場合、リーダーもそれを知る必要があります。 Zookeeper は、現在のクラスター内のマシンのサービス ステータスを維持できるだけでなく、クラスターを管理するリーダーを選択することもできます。 HA (分散ロックの適用): マスターに障害が発生すると、すぐにスレーブ ノードに切り替わります。 |
<<: Docker で Node Server を効率的にデプロイする方法
早速本題に入りましょう。ウェブサイトのタイトルとキーワードをどのように設定するかです。タイトルとは、...
Apache Kafka は、大手インターネット企業で広く使用されている分散型オープンソース ストリ...
2016年8月、設立からほぼ4年が経ったラッキンコーヒーは、北三環路の聯想橋にあった元のオフィスを離...
lunarpagesは、中高級の仮想ホストのランクに入れました。高品質、優れたアフターサービス、lu...
以前、私はある苗木のウェブサイトの運営を引き継ぎました。私は一日かけてウェブサイトのコンテンツを編集...
ウェブサイトが自社のブランドワードを守ることは非常に重要です。まずは、ウェブサイトのブランドワードと...
今後、ftlcloud(スーパークラウド)は新規ユーザーまたは未認証ユーザーに29元のクーポンを提供...
多くのウェブマスターの友人は、最適化に取り組み始めると、ユーザーフレンドリーなエクスペリエンスやペー...
1. 検索エンジンの発展方向1. 検索のパーソナライゼーションGoogle、Baidu、Yahooな...
[[409076]] Argo CD は、宣言型 GitOps コンセプトに従う Kubernete...
最近は相互リンクの交換をしています。リンク交換用のグループを 75 個、リンク交換用の QQ グルー...
先日の百度カンファレンスで、ロビン・リー氏は、アプリケーション開発の「クラウド開発時代」の到来に伴い...
ポップマートは株式を公開し、時価総額は1000億人民元を超えた。多くの人が理解できないと言います。原...
ウェブ ゲームの台頭は、重いゲームから軽いゲームへのトレンドが再び進んでいることを証明しています。軽...
Pacificrack は、5 つの VPS のプロモーションを開始しました。そのうち 3 つの特別...