アーキテクチャのZooKeeperの深い理解

前の記事で、私たちは始めるためのZooKeeperを説明し、この記事では、次のZooKeeperアーキテクチャに焦点を当て、ZooKeeperのアーキテクチャを理解することが私たちに、より良い設計コラボレーションサービスを助けることができます。

まず、ZooKeeperのの全体的なアーキテクチャ図を見てください。

ZooKeeperの全体的なアーキテクチャ

アップロード/ 2020_01 / 200118155149391.png

クラスタ内のサービスは、クライアントのセッションの確立とZooKeeperのノードを使用するのZooKeeperのZooKeeperクライアントライブラリを使用するアプリケーションは、ZooKeeperのクライアントは、相互作用とのZooKeeperクラスタを担当しています。スタンドアロンモードとクォーラムモード:ZooKeeperのクラスタは、2つのモードを持つことができます。ZooKeeperのZooKeeperのノードクラスタスタンドアロンモードと同様に、スタンドアロンで、スタンドアロン・モードは、典型的に開発するために使用されます。通常生産でのZooKeeperクォーラムモード、クラスタ・クォーラム・モードで置換ZooKeeperのZooKeeperのノードの複数の環境。

セッションは、クラスタ内のセッションのZooKeeperのZooKeeperクライアントライブラリとノードを作成し、重要なコンセプトのZooKeeperクライアントです。クライアントは、セッションを閉じるためのイニシアチブを取ることができます。ノードがセッションに関連付けられたタイムアウト時間内のZooKeeperクライアントのデータを受信しない場合も、その後、ノードは、ZooKeeperのセッションを閉じます。あなたが接続エラーを発見した場合は追加のZooKeeperのZooKeeperクライアントライブラリでは、自動的に他のZooKeeperのノードとの接続を確立します。

ZooKeeperのクライアントが再接続されている方法を示し、下図?

ZooKeeperの再接続

アップロード/ 2020_01 / 200118155134181.png

一定期間後に確立最初のZooKeeperのZooKeeperのセッションクライアントおよびクラスタノード1で、ZooKeeperのは、クライアントを自動的、1が故障したノードとのZooKeeperのZooKeeperクラスタノード3は、セッション接続を再確立します。

複数のノードを含むZooKeeperのZooKeeperのクラスタのクォーラムモード。図ZooKeeperのクラスタノードがリーダーノード1である3つのノード、ノード2とノード3は、ノードフォロワであるています。唯一つのクラスタのリーダー・ノード、ノードが複数存在フォロワであり得る、リーダーノードは、読み出しおよび書き込み要求を処理することができ、フォロワーのみ処理できる要求を読み取ります。書き込み要求フォロワー書き込み要求を受信するに対処するための指導者に転送されます。

クォーラムモード

アップロード/ 2020_01 / 200118155134182.png

ここでは、データの整合性を確保ZooKeeperの下です。

データの一貫性

    線形化(線形化)が書いている:最初の書き込み要求は、最初のリーダーに処理されます到着し、リーダーは、シーケンシャル書き込み要求を行うことを決定します。
    クライアントFIFO順:トランスミッションの特定のクライアントの実行順序からのリクエスト。

あなたのクォーラムモードをより良く理解していただくことを、次のような3ノードのクラスタのconfigureのZooKeeperクォーラムモードになります。

まず、我々は別の値を設定するには、3つのプロファイル、DATADIRとCLIENTPORT設定項目を必要としています。設定ファイルのserver.n部3は同じです。3333::server.1 = 127.0.0.1では3334、3333、定足数の間の通信のポート番号で、3334は、リーダー選挙のためのポート番号です。

DATADIRもに、番号が現在のホストを識別するために使用されたコンテンツファイルをMYID各ノードのディレクトリを作成するために、プロファイル設定server.nを必要Nなぜ次いで、この番号を入力するMYIDファイル番号です。

以下は、それぞれ、最下部3行が同じで、ディレクトリがnode1、ポート番号が2181で、ディレクトリさらにノード2つのノードのそれぞれおよびnode3、ポート番号2182および2183であり、最初のプロファイルのノードでありますの:

2秒の#ハートビートチェック時間
tickTime = 2000
#初期周波数に接続され、サーバ間隔、10×2 = 20秒の総時間
10 initLimit =
#ZKリーダーと従動、5×2 = 10秒の合計時間との間の周波数通信
= 5 syncLimit
#データベースのスナップショットを使用すると、パラメータを設定しない場合は、更新トランザクションログがデフォルトの場所に保存され、メモリ位置に格納されます。
= DATADIR /データ/ ZK /クォーラム/ノード1
#ZKサーバーのリスニングポート 
CLIENTPORT = 2181

server.1 = 127.0.0.1:3333:3334
server.2 = 127.0.0.1:4444:4445
server.3 = 127.0.0.1:5555:5556

レッツ・次のようにコマンドを起動し、このクラスタ、最初のノード最初のスタートを起動します。

zkServer.sh開始フォアグラウンド/usr/local/apache-zookeeper-3.5.6-bin/conf/zoo-quorum-node1.cfg

注:フォアグラウンドで実行開始 - フォアグラウンドオプションzkServer.shは、ログには、コンソールを直接打ちます。我々は、ログファイルをヒットした場合、ログには、以下の3つzkServer.sh同じファイルにヒットします。

次のようにログノードの後の最初の起動で表示されます。

彼と他の二つの他のノードが接続を確立することはできません現時点では3つのノードの構成ファイルの設定の理由が、唯一、一つのノードを開始したが、それがこの問題を報告しています。

次に、2番目のノードを起動し、次のコマンドを実行します。

zkServer.sh開始フォアグラウンド/usr/local/apache-zookeeper-3.5.6-bin/conf/zoo-quorum-node2.cfg

スタート後、我々は、このようなAラインのログノード2で見つけることができます。

2019年12月29日13:15:13699 [MYID:2] - INFO [QuorumPeer [MYID = 2](プレーン= / 0.0.0.0:2182)(セキュア=無効):464 @リーダー] - リーディング - リーダー選挙がかかりました - 41のMS

これは、ノード1がノードフォロワ記載されるようになった、ログノード1におけるログの次の行に見出すことができ、ノード2は、リーダーノードになることを示しています。

2019年12月29日13:15:13713 [MYID:1] - INFO [QuorumPeer [MYID = 1](プレーン= / 0.0.0.0:2181)(セキュア=無効):69 @フォロワ] - FOLLOWING - リーダー選挙がかかりました - 61のMS

それは多くても2つを表しているので、3つのノードクラスタの場合、定足数のパターンが形成され、第3のノードの次の開始は、次のコマンドを実行します。

zkServer.sh開始フォアグラウンド/usr/local/apache-zookeeper-3.5.6-bin/conf/zoo-quorum-node3.cfg

ログに起動すると、次の行をした後、第3のノードは、クラスタに参加し、そしてノードがフォロワとして添加されます。

2019年12月29日13:15:52440 [MYID:3] - INFO [QuorumPeer [MYID = 3](プレーン= / 0.0.0.0:2183)(セキュア=無効):69 @フォロワ] - FOLLOWING - リーダー選挙がかかりました - 15のMS

レッツ・次のように指定したホスト名とポート番号の3つのノードが続き、コマンドで-serverオプションを追加し、この3ノードクラスタを使用するようにクライアントを起動し、コマンドは次のとおりです。

zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

2019年12月29日13:45:44982 [MYID:127.0.0.1:2181] - INFO [メインSendThread(127.0.0.1:2181):ClientCnxn $ SendThread @ 1394] - サーバー上のセッション確立完全なローカルホスト/ 127.0.0.1 :2181、セッションID = 0x101fff740830000、ネゴシエートされたタイムアウト= 30000

ログは、最初のノードで、接続が確立された接続ノードを、確立するために、クライアントとポート番号2181を起動して見ることができます。

私たちは、LS -R /コマンドデータルックのznodeこのクラスタを実行します。

[ZK:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED)1] LS -R /
/
/飼育係
/飼育係/設定
/飼育係/クォータ

のは、クライアントが再接続できるかどうかを確認するために、ZooKeeperのノードを殺してみましょう。今、私たちも、ノード1、ノード1キル私たちは、あなたがクライアントとのノードのポート番号2183で、クライアントのログに接続ノード3を確立した接続を再確立見つけることができます。

2019年12月29日14:03:31392 [MYID:127.0.0.1:2183] - INFO [メインSendThread(127.0.0.1:2183):ClientCnxn $ SendThread @ 1394] - サーバー上のセッション確立完全なローカルホスト/ 127.0.0.1 :2183、セッションID = 0x101fff740830000、ネゴシエートされたタイムアウト= 30000

我々は、通常の使用かどうかクライアントを見て、実行LSは、-R /データに見出すことができ、クライアントは、通常の使用が可能であることを示し、正常に戻すことができます。

[ZK:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED)4] LS -R /
/
/飼育係
/飼育係/設定
/飼育係/クォータ


この記事では、ZooKeeperのアーキテクチャを説明し、3ノードクラスタのZooKeeperを構成する方法。

おすすめ

転載: www.linuxidc.com/Linux/2020-01/162065.htm