Zokeeper安裝配置及簡單使用
-
分散式:可以簡單的理解為任務拆分和節點分工;
分散式是解決高可用,高併發的。叢集解決的是高可用。叢集式從物理上進想定義,而分散式是一種工作方式;
例如:一個工作任務需要10個小時(單個節點);
分散式:10臺機器,任務只需要1個小時就能完成;
叢集:10臺機器,任務還是10個小時;
-
分散式的協作難點:
對於設計的分散式系統,所出現的問題也會有很多;
- 如何保證節點的高可用(節點故障);
- 如何保證資料的一致性;
- 通訊異常時如何處理;
- 網路分割槽;等等.....
而這些問題Zk都有對應的解決辦法;
-
Zookeeper簡介
分散式協作。zookeeper是google的chubby專案開源實現。最早是hadoop的子專案。
小米米聊、淘寶Taokeeper其實類zookeeper。
Kafka使用zookeeper。訊息釋出訂閱,其中zk就是用於檢測節點崩潰。實現主題的發現,並且保持主題的生產和消費狀態。
Hbase三段查詢,Root-Region=》Meta Region=》Region(Table)。hbase的元資料資訊放在HBase。HMaster掛掉,馬上 要節點恢復。
Hadoop。NameNode(SecondaryNameNode),HA Hadoop。一般情況下一個簡單的hadoop叢集,只有一個NameNode,如果NameNode掛掉,hadoop叢集不可用。HA Haoop裡面就要用到zk。
-
Zookeeper解決哪些問題
1. Master節點管理
解決的問題:Master高可用(主機掛掉以後,誰來負責工作),保證唯一;
2. 配置檔案管理
解決的問題:統一把配置檔案存放在Zookeeper,由Zookeeper統一發放
3. 釋出和訂閱
釋出者(producer)講資料釋出到zk節點上,供訂閱者(consumer)動態獲取
4. 分散式鎖
分散式環境訪問統一個資源,由第三方配鎖實現。
解決的問題:由zk統一進行協調,保證資料的一致性。
5.叢集的管理
Worker叢集監控。
-
Zookeeper安裝配置
1. 下載
2. 解壓
$ tar xvzf zookeeper-3.4.9.tar.gz
$ mv ./zookeeper-3.4.9 /usr/local/
- 修改配置檔案
${ZOOKEEPER_HOME}/conf/zoo_sample.cfg
(偽分散式)
dataDir指定當前伺服器資料存放的路徑(目錄)
clientPort 指定當前伺服器伺服器的埠
server.1/server.2/server.3 指定伺服器的叢集情況(有幾臺伺服器,master是伺服器地址)
myid必須手動建立且指定在zk資料目錄,也就是dataDir指定的路徑(不管真分佈還是偽分佈都需要指定)
$ echo 1 >> /home/hadoop/tmp/zookeeper/zk1/myid
$ echo 2 >> /home/hadoop/tmp/zookeeper/zk2/myid
$ echo 3 >> /home/hadoop/tmp/zookeeper/zk3/myid
Zookeeper偽分散式部署(server zookeeper只有一份)
/conf/zoo1.cfg zoo2.cfg zoo3.cfg
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk1(這個目錄可以自行指定)
clientPort=2181
server.1=master:2888(通訊埠):3888(選舉埠)
server.2=master:2889:3889
server.3=master:2890:3890
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk2
clientPort=2182
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk3
clientPort=2183
server.1=master:2888:3888
server.2=master:2889:3889
server.3=master:2890:3890
Zookeeper真分佈部署在master、slave1、slave2 三臺不同的伺服器上
server1..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server2..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
server3..../conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/tmp/zookeeper/zk
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
-
Zookeeper及其APi的使用
偽分散式:
停止Zookeeper
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh stop /usr/local/zookeeper-3.4.6/conf/zoo3.cfg
啟動Zookeeper
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh start /usr/local/zookeeper-3.4.6/conf/zoo3.cfg
檢視zookeeper狀態
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo1.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo2.cfg
$ zkServer.sh status /usr/local/zookeeper-3.4.6/conf/zoo3.cfg