Zookeeper的介紹與基本部署

簡介

zookeeper是一個爲分佈式應用所設計的分佈式的、開源的協調服務。它提供了一項基本服務:分佈式鎖服務,同時也提供了分佈式應用數據的維護和管理機制,包括統一命名服務、狀態同步服務、集羣管理、分佈式消息隊列、分佈式應用配置項的管理等。zookeeper支持獨立安裝以及集羣部署。數據庫

zookeeper官方網站:http://zookeeper.apache.org/apache

zookeeper下載地址:https://www.apache.org/dyn/closer.cgi/zookeeper/vim

架構

zookeeper

Zookeeper集羣主要角色有Server和Client,其中Server分爲Leader、Follower和Observer三個角色:服務器

  • Leader:領導者角色,主要負責投票的發起和決議,以及更新系統狀態
  • Follower:跟隨者角色,用於接收客戶請求並向客戶端返回結果,在選主過程當中參與投票
  • Observer:Observer能夠接收客戶端鏈接,將寫請求轉發給leader。但observer不參加投票,只同步leader狀態。observer的目的是爲了擴展系統,提升讀取速度。
  • Client:客戶端,用於向zk發起請求。

zk集羣中每一個server在內存中存儲一份數據。在zk啓動時,將從實例中選舉一個server做爲leader,leader負責處理數據更新等操做,當且僅當大多數server在內存中成功修改數據,才認爲數據修改爲功。架構

zk寫的流程:併發

  1. 客戶端首先和一個server或者observer通訊,發起寫請求
  2. server將寫請求轉發給leader
  3. leader再將寫請求轉發給其餘server,其餘server在接收到寫請求後寫入數據並響應leader
  4. leader在接收到大多數寫成功迴應後,認爲數據寫成功
  5. server響應client,完成一次寫操做

安裝

StandAlone模式

1. 安裝

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

2. 修改配置

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

配置項說明:分佈式

  • tickTime: zk中使用的基本時間單元,單位爲毫秒,用於控制心跳和超時。更低的tickTime值能夠更快的發現超時問題
  • initLimit:zk集羣中follower初始化鏈接到leader時,最長能忍受多少個tickTime,默認值爲10,即爲20s
  • syncLimit:用於配置leader和follower間進行心跳檢測的最大超時時間。若是在設置的時間內followers沒法與leader進行通訊,那麼follower將會被丟棄。默認值爲5,即10s
  • dataDir:zk用於存儲內存數據庫快照的目錄。若是不指定dataLogDir參數,則數據庫更新的事務日誌也將會存儲在該目錄下
  • dataLogDir:指定zk事務日誌的存儲目錄
  • clientPort:服務器監聽客戶端鏈接的端口,默認值爲2181
  • maxClientCnxns:限制單個客戶端與單臺服務之間的併發鏈接數,默認值爲60,設置爲0則不限制
  • autopurge.snapRetainCount:配置zk在自動清理的時候須要保存的數據文件快照的數量和對應的事務日誌文件,默認爲3
  • autopurge.purgeInterval:和autopurge.snapRetainCount配置使用,用於配置zk自動清理文件的頻率,默認爲1小時,即默認開啓自動清理功能,設置爲0,則表示禁用清理功能

3. 啓動

/usr/local/zookeeper/zkServer.sh start

4. 驗證

[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

5. 基本用法

[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]

Distributed模式

1. 配置hosts

#vim /etc/hosts

zk1 192.168.0.101
zk2 192.168.0.102
zk3 192.168.0.103

2. 配置zoo.cfg

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

配置項說明:網站

  • 集羣模式中,集羣中的每臺機器都須要感知其它機器,在zoo.cfg配置文件中,能夠按照以下格式進行配置:server.id=host:port:port,其中id即server id,用於標識服務器在集羣中的序號。每臺zk服務器上,都須要在數據目錄下建立一個myid文件,該文件中只有一行內容,即對應於每臺服務器的server id。
  • zk集羣中,每臺服務器上的zoo.cfg配置文件內容一致

3. 建立myid文件

# 每一個服務器上的myid內容都不一樣,且須要保證和本身的zoo.cfg配置文件中"server.id=host:port:port"的id值一致
# id的範圍是1~255
echo "1" > /usr/local/zookeeper/data/myid

4. 啓動服務

/usr/local/zookeeper/zkServer.sh start

5. 驗證

[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.

6. 查詢狀態

[root@app conf]# ../bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
相關文章
相關標籤/搜索