zookeeper集羣的簡單搭建

zookeeper簡單介紹

zookeeper是一個爲分佈式應用提供一致性服務的軟件,它是開源的Hadoop項目的一個子項目,並根據google發表的一篇論文來實現的。zookeeper爲分佈式系統提供了高笑且易於使用的協同服務,它能夠爲分佈式應用提供至關多的服務,諸如統一命名服務,配置管理,狀態同步和組服務等。zookeeper接口簡單,咱們沒必要過多地糾結在分佈式系統編程難於處理的同步和一致性問題上,你可使用zookeeper提供的現成(off-the-shelf)服務來實現來實現分佈式系統額配置管理,組管理,Leader選舉等功能。html

zookeeper集羣搭建

首先須要安裝java環境(這裏不詳細寫)java

zookeeper集羣的安裝,準備三臺服務器server1:192.168.94.132,server2:192.168.94.131,server3:192.168.94.130linux

  • 下載zookeeper
     到http://zookeeper.apache.org/releases.html去下載最新版本
  • 解壓
    tar -zxvf zookeeper-3.4.12.tar.gz

解壓完成後在目錄~下會發現多出一個目錄zookeeper-3.4.12,從新命令爲zookeeperapache

  • 配置
    將conf/zoo_sample.cfg拷貝一份命名爲zoo.cfg,也放在conf目錄下。而後按照以下值修改其中的配置:
>zoo.cfg
 cat >zoo.cfg<<EOF
 tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/zkdata
dataLogDir=/data/zookeeper/zkdatalog
clientPort=12181
server.1=192.168.94.132:12888:13888
server.2=192.168.94.131:12888:13888
server.3=192.168.94.130:12888:13888
EOF
  • 解釋說明
    tickTime:這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。
        dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。
        clientPort:這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。默認是2181
        initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 52000=10 秒
        syncLimit:這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是2
    2000=4 秒
        server.A=B:C:D:編程

    • 其中 A 是一個數字,表示這個是第幾號服務器;
    • B 是這個服務器的 ip 地址;
    • C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;
    • D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號dataDir,dataLogDir目錄開始是不存在,須要使用mkdir命令建立相應的目錄。而且在該目錄下建立文件myid,該文件內容分別爲1,2,3。
  • 建立myid文件
    在三個linux機器上剛剛建立的data目錄下新建一個myid文件並打開服務器

132 上    echo "1" >myid   與server.1保持一致
131 上   echo "2" >myid    與server.2保持一致
130 上   echo "3" >myid    與server.3保持一致
  • 啓動

依次啓動server1,server2,server3的zookeepersession

/usr/local/zookeeper/bin/zkServer.sh start
輸出
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

檢查看是否啓動socket

ps -ef|grep zookeeper

查看狀態(在每一個服務器上執行0分佈式

/usr/local/zookeeper/bin/zkServer.sh status
輸出狀態是leader或者follower

測試zookeeper是否正常工做,在server1上執行如下命令oop

在其中一個server上執行
/usr/local/zookeeper/bin/zkCli.sh -server 192.168.94.132:12181

輸出

2019-04-06 05:44:31,475 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2019-04-06 05:44:31,475 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper/bin
2019-04-06 05:44:31,477 [myid:] - INFO  [main:ZooKeeper@441] - Initiating client connection, connectString=192.168.94.132:12181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@69d0a921
Welcome to ZooKeeper!
JLine support is enabled
2019-04-06 05:44:31,576 [myid:] - INFO  [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@1028] - Opening socket connection to server 192.168.94.132/192.168.94.132:12181. Will not attempt to authenticate using SASL (unknown error)
2019-04-06 05:44:31,866 [myid:] - INFO  [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@878] - Socket connection established to 192.168.94.132/192.168.94.132:12181, initiating session
[zk: 192.168.94.132:12181(CONNECTING) 0] 2019-04-06 05:44:31,938 [myid:] - INFO  [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@1302] - Session establishment complete on server 192.168.94.132/192.168.94.132:12181, sessionid = 0x1000004a7db0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

這裏集羣搭建完畢

能夠用「jps」查看zk的進程,這個是zk的整個工程的main

[root@localhost bin]# jps
1732 QuorumPeerMain
1881 Jps

參考:https://www.cnblogs.com/luotianshuai/p/5206662.html

相關文章
相關標籤/搜索