目錄java
zookeeper是一個爲分佈式應用所設計的分佈式的、開源的協調服務。它提供了一項基本服務:分佈式鎖服務,同時也提供了分佈式應用數據的維護和管理機制,包括統一命名服務、狀態同步服務、集羣管理、分佈式消息隊列、分佈式應用配置項的管理等。zookeeper支持獨立安裝以及集羣部署。數據庫
zookeeper官方網站:http://zookeeper.apache.org/apache
zookeeper下載地址:https://www.apache.org/dyn/closer.cgi/zookeeper/vim
Zookeeper集羣主要角色有Server和Client,其中Server分爲Leader、Follower和Observer三個角色:服務器
zk集羣中每一個server在內存中存儲一份數據。在zk啓動時,將從實例中選舉一個server做爲leader,leader負責處理數據更新等操做,當且僅當大多數server在內存中成功修改數據,才認爲數據修改爲功。架構
zk寫的流程:併發
tar xf zookeeper-3.4.14.tar.gz -C /usr/local/ cd /usr/local/ ln -s zookeeper-3.4.14 zookeeper # 建立數據目錄和日誌目錄 mkdir /usr/local/zookeeper/{data,logs}
注: zk的安裝依賴java,因此須要先安裝jdkapp
cd /usr/local/zookeeper/conf cp zoo_sample.conf zoo.conf #vim zoo.conf tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181
配置項說明:分佈式
/usr/local/zookeeper/zkServer.sh start
[root@app conf]# telnet 127.0.0.1 2181 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stat Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT Clients: /127.0.0.1:42638[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0x0 Mode: standalone Node count: 4
[root@app conf]# /usr/local/zookeeper/bin/zkCli.sh -server localhost:2181 Connecting to localhost:2181 ... [zk: localhost:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port [zk: localhost:2181(CONNECTED) 1]
#vim /etc/hosts zk1 192.168.0.101 zk2 192.168.0.102 zk3 192.168.0.103
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 server.1=192.168.0.101:2888:3888 server.2=192.168.0.102:2888:3888 server.3=192.168.0.103:2888:3888
配置項說明:網站
server.id=host:port:port
,其中id即server id,用於標識服務器在集羣中的序號。每臺zk服務器上,都須要在數據目錄下建立一個myid文件,該文件中只有一行內容,即對應於每臺服務器的server id。# 每一個服務器上的myid內容都不一樣,且須要保證和本身的zoo.cfg配置文件中"server.id=host:port:port"的id值一致 # id的範圍是1~255 echo "1" > /usr/local/zookeeper/data/myid
/usr/local/zookeeper/zkServer.sh start
[root@app conf]# telnet 127.0.0.1 2181 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stat Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT Clients: /127.0.0.1:41142[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0x100000000 Mode: leader Node count: 4 Proposal sizes last/min/max: -1/-1/-1 Connection closed by foreign host.
[root@app conf]# ../bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader