1.簡単な概要
飼育係は、分散アプリケーションフレームワークのための協調的なサービスを提供するために、分散型のオープンソースです。
理解するための設計の観点から飼育係モード:すべての人への懸念のデータ保存と管理を担当し、サービスベースの分散管理フレームワークObserverパターンのデザインで、その後、観察者の登録が、これらのデータの状態の変化を受け入れ、それが飼育係彼は、同様のクラスタマスタ/スレーブの管理を達成するためには、それに応じて反応する飼育係に登録されているものをオブザーバーに通知する責任を負う
飼育係= +ファイルシステムの通知メカニズムを
2.特長
- 飼育係:クラスタからなるリーダー(指導者)、より多くのフォロワー(フォロワー)
- リーダーは、解像度に開始し、投票を担当し、システムのステータスを更新します
- 要求の結果がクライアントに返さクライアントを受信するためのフォロワーは、選挙プロセスのリーダーに投票する
クラスタノードの生存の半分以上ある限り)4、飼育係のクラスタは、通常のサービスのことができるようになります。
一貫した5)グローバルデータ:各sererはデータの同一コピーを保持し、それがどのserer、データが一貫しているように接続されているかどうかをクライアント。
6)更新要求を注文、同じクライアントからの更新要求は、彼らが送信された順序で実行するために
、7)アトミックデータ更新をデータ更新をどちらか成功するか失敗します。
8)リアルタイムでは、一定時間内に、クライアントが最新のデータを読み取ることができます。
3.データ構造
飼育係のデータモデルはジンとUnixファイルシステムは全体的に非常に似ている結び目裸の木として見ることができ、各ノードはのznodeと呼ばれ、飼育係のクラスタ自体は、データ構造のセットを守ることは明らかである。・ストレージ構造は、ツリー構造であります我々は「のznode」呼び出している各ノードは、それぞれ一意のznodeによって同定することができるデフォルトのznodeのIMBデータパスを格納する各可能なその
4.シナリオ
提供されるサービスには、オフライン動的サーバー・ノード上の分散型メッセージング同期と調整機構、統一構成管理の負荷分散、クラスタ管理
下1)分散環境、設定ファイル管理および同期が共通の問題であり
、クラスタ内のすべてのノードを構成は手紙は、Hadoopクラスタと、同じだと思います。
設定ファイルを変更した後、すぐに各ノードに同期させることを望んで。
2)構成管理を実現ZooKeeperのために引き渡さすることができます。
構成情報は、のznodeのZooKeeperの上で書き込むことができます。
各ノードは、こののznodeに耳を傾け。
データのznodeに変更された後、飼育係は、各ノードに通知します。
それを再度追加するシーンがたくさんありますフォローアップ調査
5.ダウンロードしてインストール
次のアドレスを開き
http://zookeeper.apache.org/releases.html
ダウンロードをクリックし
5.1アドレスのダウンロードを選択します
あなたはtar.gz形式が表示されますバージョン5.2を選択する場合にクリックします
私たちの102マシンにアップロードさ5.3
5.4は正常にアップロード見ることができます
[shaozhiqi@hadoop102 ~]$ cd /opt/software/
[shaozhiqi@hadoop102 software]$ ll
total 776464
-rw-rw-r--. 1 shaozhiqi shaozhiqi 332433589 Jun 23 19:59 hadoop-3.1.2.tar.gz -rw-rw-r--. 1 shaozhiqi shaozhiqi 194990602 Jun 23 19:59 jdk-8u211-linux-x64.tar.gz -rw-rw-r--. 1 shaozhiqi shaozhiqi 229988313 Jun 30 17:46 spark-2.4.3-bin-hadoop2.7.tgz -rw-rw-r--. 1 shaozhiqi shaozhiqi 37676320 Jul 2 21:50 zookeeper-3.4.14.tar.gz [shaozhiqi@hadoop102 software]$
5.5解凍ジャー
[shaozhiqi@hadoop102 software]$ tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/module/
設定を変更するディレクトリを入力します
[shaozhiqi@hadoop102 zookeeper-3.4.14]$ ll
total 1684
drwxr-xr-x. 2 shaozhiqi shaozhiqi 4096 Mar 7 01:09 bin //我们常用的命令 -rw-rw-r--. 1 shaozhiqi shaozhiqi 97426 Mar 7 00:50 build.xml drwxr-xr-x. 2 shaozhiqi shaozhiqi 74 Mar 7 01:09 conf //我们要配置配置文件 drwxr-xr-x. 2 shaozhiqi shaozhiqi 4096 Mar 7 01:10 dist-maven -rw-rw-r--. 1 shaozhiqi shaozhiqi 1709 Mar 7 00:50 ivysettings.xml -rw-rw-r--. 1 shaozhiqi shaozhiqi 10742 Mar 7 00:50 ivy.xml drwxr-xr-x. 4 shaozhiqi shaozhiqi 4096 Mar 7 01:09 lib //依赖的jar -rw-rw-r--. 1 shaozhiqi shaozhiqi 11970 Mar 7 00:50 LICENSE.txt -rw-rw-r--. 1 shaozhiqi shaozhiqi 3132 Mar 7 00:50 NOTICE.txt -rw-rw-r--. 1 shaozhiqi shaozhiqi 31622 Mar 7 00:50 pom.xml -rw-rw-r--. 1 shaozhiqi shaozhiqi 1765 Mar 7 00:50 README.md -rw-rw-r--. 1 shaozhiqi shaozhiqi 1770 Mar 7 00:50 README_packaging.txt drwxr-xr-x. 3 shaozhiqi shaozhiqi 21 Mar 7 00:50 src -rw-rw-r--. 1 shaozhiqi shaozhiqi 1515359 Mar 7 00:50 zookeeper-3.4.14.jar -rw-rw-r--. 1 shaozhiqi shaozhiqi 836 Mar 7 01:10 zookeeper-3.4.14.jar.asc -rw-rw-r--. 1 shaozhiqi shaozhiqi 33 Mar 7 00:50 zookeeper-3.4.14.jar.md5 -rw-rw-r--. 1 shaozhiqi shaozhiqi 41 Mar 7 00:50 zookeeper-3.4.14.jar.sha1 drwxr-xr-x. 3 shaozhiqi shaozhiqi 45 Mar 7 01:09 zookeeper-client drwxr-xr-x. 12 shaozhiqi shaozhiqi 4096 Mar 7 01:09 zookeeper-contrib drwxr-xr-x. 7 shaozhiqi shaozhiqi 4096 Mar 7 01:09 zookeeper-docs drwxr-xr-x. 3 shaozhiqi shaozhiqi 33 Mar 7 01:09 zookeeper-it drwxr-xr-x. 4 shaozhiqi shaozhiqi 43 Mar 7 01:09 zookeeper-jute drwxr-xr-x. 5 shaozhiqi shaozhiqi 4096 Mar 7 01:09 zookeeper-recipes drwxr-xr-x. 3 shaozhiqi shaozhiqi 30 Mar 7 01:09 zookeeper-server [shaozhiqi@hadoop102 zookeeper-3.4.14]$
5.6名前を変更zoo_sample.cfg
[shaozhiqi@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
DATADIR =は/ opt /モジュール/飼育係たちのアドレスにファイルの格納アドレスを変更し -3.4.14 / zkdata
他は変更しないために
[shaozhiqi@hadoop102 conf]$ vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/opt/module/zookeeper-3.4.14/zkdata # the port at which the clients will connect clientPort=2181 # the maximum number of client connections.
6.単一のノードを開始します
6.1サーバーを起動します。
[shaozhiqi@hadoop102 zookeeper-3.4.14]$ cd bin/
[shaozhiqi@hadoop102 bin]$ pwd
/opt/module/zookeeper-3.4.14/bin [shaozhiqi@hadoop102 bin]$ ll total 44 -rwxr-xr-x. 1 shaozhiqi shaozhiqi 232 Mar 7 00:50 README.txt -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1937 Mar 7 00:50 zkCleanup.sh -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1056 Mar 7 00:50 zkCli.cmd -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1534 Mar 7 00:50 zkCli.sh -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1759 Mar 7 00:50 zkEnv.cmd -rwxr-xr-x. 1 shaozhiqi shaozhiqi 2919 Mar 7 00:50 zkEnv.sh -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1089 Mar 7 00:50 zkServer.cmd -rwxr-xr-x. 1 shaozhiqi shaozhiqi 6773 Mar 7 00:50 zkServer.sh -rwxr-xr-x. 1 shaozhiqi shaozhiqi 996 Mar 7 00:50 zkTxnLogToolkit.cmd -rwxr-xr-x. 1 shaozhiqi shaozhiqi 1385 Mar 7 00:50 zkTxnLogToolkit.sh [shaozhiqi@hadoop102 bin]$ ./zkServer.sh start ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [shaozhiqi@hadoop102 bin]$
正常に開始されたことを確認します。QuorumPeerMainを
[shaozhiqi@hadoop102 bin]$ jps
20067 Jps
20036 QuorumPeerMain
[shaozhiqi@hadoop102 bin]$
6.2クライアントを起動し、あなたが2181年にログのリンクを見ることができます
[shaozhiqi@hadoop102 bin]$ ./zkCli.sh
Connecting to localhost:2181
2019-07-02 08:00:02,854 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
私たちの飼育係を証明するために開始することができ、単一のノードを使用するのは簡単です
7.クラスタ開始
飼育係のサーバーを停止:
shaozhiqi@hadoop102 bin]$ ./zkServer.sh stop
7.1改正zoo.cfgプロフィール
2888年、3888を交換したときにリーダーポート3888を代表して構成し、2888年の追加がハングアップしている
サーバーの次の構成に応じて決定され、2,3,4を指定されたトランキングモードでのid内MYIDを
[shaozhiqi@hadoop102 conf]$ vim zoo.cfg
server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
7.2配置102的myid
[shaozhiqi@hadoop102 zookeeper-3.4.14]$ cd zkdata/
[shaozhiqi@hadoop102 zkdata]$ ll
total 0
drwxrwxr-x. 2 shaozhiqi shaozhiqi 18 Jul 2 23:00 version-2 [shaozhiqi@hadoop102 zkdata]$ vim myid [shaozhiqi@hadoop102 zkdata]$ cat myid 2 [shaozhiqi@hadoop102 zkdata]$
7.3同步我们的zookeeper到我们的103 104机器
[shaozhiqi@hadoop102 module]$ testxsync zookeeper-3.4.14/
修改103和104的myid
[shaozhiqi@hadoop103 zookeeper-3.4.14]$ cd zkdata/
[shaozhiqi@hadoop103 zkdata]$ vim myid
[shaozhiqi@hadoop103 zkdata]$ cat myid
3
[shaozhiqi@hadoop103 zkdata]$
[shaozhiqi@hadoop104 zkdata]$ vim myid
[shaozhiqi@hadoop104 zkdata]$ cat myid
4
[shaozhiqi@hadoop104 zkdata]$
7.4启动集群
7.4.1 Zookeeper的选举机制
那么我们配置了三台机器,启动时他怎么选举leader呢个?
1)半数机制( Paxos协议):集群中半数以上机器存活,集群可用。所以zookeeper适合装在奇数位机器
2)Zookeeper虽然在配置文件中并没有指定 master和 slave。但是, zookeeper工作时是有一个节点为 leader.其他则为 follower. Leader是通过内部的选举机制临时产生的
3)以一个简单的例子来说明整个选举的过程,,假设有五台服务器组成的 zookeeper集群,它们的d从1-5,同时它们都是最新启动的也就是没有历史数据,在存放数据量这一点上,都是一样的,假设这些服务器依序启动,来看看发生什么。
leader产生说明
(1)服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是 LOOKING状态。
(2)服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果由于两者都没有历史数据,所以d 值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3,所以服务器1、2还是继铁保持LOOKING状态。
(3)服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的 leader,
(4)服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了
(5)服务器5启动,同个一样当小弟
按照这个理论我们的三台机器应该是103
7.4.2启动102
[shaozhiqi@hadoop102 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [shaozhiqi@hadoop102 bin]$
サービスは、サービスビューのステータスの値、エラー、サービスの半数以上を提供することができた場合
[shaozhiqi@hadoop102 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Error contacting service. It is probably not running. [shaozhiqi@hadoop102 bin]$
7.4.3スタート103、103はリーダーの状態を確認することが判明しています
[shaozhiqi@hadoop103 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [shaozhiqi@hadoop103 bin]$ ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Mode: leader [shaozhiqi@hadoop103 bin]$
7.4.4スタート104は、フォロワー104のステータスを表示するので、103はリーダーです
[shaozhiqi@hadoop104 zookeeper-3.4.14]$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [shaozhiqi@hadoop104 zookeeper-3.4.14]$ bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.4.14/bin/../conf/zoo.cfg Mode: follower [shaozhiqi@hadoop104 zookeeper-3.4.14]$
継続的に後で更新~~~