Zookeeper 安裝方式有三種,單機模式和集羣模式以及僞集羣模式。node
Zookeeper 經過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就可以保證服務繼續。數據庫
爲何必定要超過半數呢? 這跟 Zookeeper 的複製策略有關:Zookeeper 確保對 znode 樹的每個修改都會被複制到集合體中超過半數的機器上。apache
(1) 下載 ZooKeeper :http://mirrors.hust.edu.cn/apache/zookeeper/服務器
(2) 解壓session
tar -zxvf zookeeper-3.4.5.tar.gz mv zookeeper-3.4.5 zookeeper
(3) 配置環境變量併發
vi /etc/profile export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH source /etc/profile
(4) 修改 Zookeeper 的配製文件 conf/zoo.cfg分佈式
tickTime=2000 dataDir=/usr/local/zk/data dataLogDir=/usr/local/zk/dataLog clientPort=2181
(5) 啓動 ZooKeeper性能
zkServer.sh start # 啓動 zkServer.sh stop # 中止 zkServer.sh status # 狀態 zkCli.sh -server localhost:2181
爲了得到可靠地 Zookeeper 服務,用戶應該在一個機羣上部署 Zookeeper。只要機羣上大多數的 Zookeeper 服務啓動了,那麼總的 Zookeeper 服務將是可用的。集羣的配置方式,和單機模式搭建相似,一樣須要進行環境變量的配置。在每臺機器上 conf/zoo.cf 配置文件的參數設置相同。學習
Zookeeper 集羣模式搭建方案:測試
主機IP | 消息端口 | 通訊端口 | myid | data目錄 |
---|---|---|---|---|
192.168.1.10 | 2181 | 2888:3888 | 0 | $ZOOKEEPER_HOME/data |
192.168.1.11 | 2181 | 2888:3888 | 1 | $ZOOKEEPER_HOME/data |
192.168.1.12 | 2181 | 2888:3888 | 2 | $ZOOKEEPER_HOME/data |
(1) 一共三個節點(zk服務器集羣規模不小於三個節點),要求服務器之間系統時間保持一致
(2) 修改 Zookeeper 的配製文件 conf/zoo.cfg
tickTime=2000 initLimit=10 syncLimit=5 clientPort=2181 # 修改目錄 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/log # 添加集羣配置 server.0=192.168.2.101:2888:3888 server.1=192.168.2.102:2888:3888 server.2=192.168.2.103:2888:3888
(3) 添加服務器標識配置 dataDir/myid
# 在 dataDir 目錄建立 myid 文件 mkdir data # 建立文件 myid,Server0 內容爲 0,Server1 內容爲 1,Server2 內容爲 2 vi myid
Zookeeper 不但能夠在單機上運行單機模式 Zookeeper,並且能夠在單機模擬集羣模式 Zookeeper 的運行,也就是將不一樣節點運行在同一臺機器。這種搭建方式,比較簡便,成本比較低,適合測試和學習,若是你的手頭機器不足,就能夠在一臺機器上部署了 3 個 server。
Zookeeper 僞集羣模式搭建方案,主要是注意端口衝突:
主機IP | 消息端口 | 通訊端口 | myid | data目錄 |
---|---|---|---|---|
127.0.0.1 | 2180 | 2880:3880 | 0 | $ZOOKEEPER_HOME/data_0 |
127.0.0.1 | 2181 | 2881:3881 | 1 | $ZOOKEEPER_HOME/data_1 |
127.0.0.1 | 2182 | 2882:3882 | 2 | $ZOOKEEPER_HOME/data_2 |
(1) 注意事項
在一臺機器上部署了 3 個 server,須要注意的是在集羣爲分佈式模式下咱們使用的每一個配置文檔模擬一臺機器,也就是說單臺機器及上運行多個 Zookeeper 實例。可是,必須保證每一個配置文檔的各個端口號不能衝突,除了 clientPort 不一樣以外,dataDir 也不一樣。另外,還要在 dataDir 所對應的目錄中建立 myid 文件來指定對應的 Zookeeper 服務器實例。
下面是我所配置的集羣僞分佈模式,分別經過 zoo1.cfg、zoo2.cfg、zoo3.cfg 來模擬由三臺機器的 Zookeeper 集羣:
(2) 代碼清單 zook1.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. dataDir=/usr/local/zookeeper/data_0 # the port at which the clients will connect clientPort=2180 #the location of the log file dataLogDir=/usr/local/zookeeper/logs_0 server.0=localhost:2880:3880 server.1=localhost:2881:3881 server.2=localhost:2882:3882
(3) 啓動
zkServer.sh start zoo1.sh zkServer.sh start zoo2.sh zkServer.sh start zoo3.sh
Zookeeper 的功能特性是經過 Zookeeper 配置文件來進行控制管理的(zoo.cfg)。這樣的設計其實有其自身的緣由,經過前面對 Zookeeper 的配置能夠看出,在對 Zookeeper 集羣進行配置的時候,它的配置文檔是徹底相同的。集羣僞分佈模式中,有少部分是不一樣的。這樣的配置方式使得在部署Zookeeper 服務的時候很是方便。若是服務器使用不一樣的配置文件,必須確保不一樣配置文件中的服務器列表相匹配。
在設置 Zookeeper 配置文檔時候,某些參數是可選的,某些是必須的。這些必須參數就構成了 Zookeeper 配置文檔的最低配置要求。另外,若要對 Zookeeper 進行更詳細的配置,能夠參考下面的內容。
下面是在最低配置要求中必須配置的參數:
(1) client :監聽客戶端鏈接的端口。
(2) tickTime :基本事件單元,這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,每隔 tickTime 時間就會發送一個心跳;最小的 session 過時時間爲 2 倍 tickTime。
(3) dataDir :存儲內存中數據庫快照的位置,若是不設置參數,更新食物的日誌將被存儲到默認位置。
應該謹慎的選擇日誌存放的位置,使用專用的日誌存儲設備可以大大提升系統的性能,若是將日誌存儲在比較繁忙的存儲設備上,那麼將會很大程度上影像系統性能。
下面是高級配置參數中可選配置參數,用戶可使用下面的參數來更好的規定 Zookeeper 的行爲:
(1) dataLogdDir
這個操做讓管理機器把事務日誌寫入 dataLogDir 所指定的目錄中,而不是 dataDir 所指定的目錄。這將容許使用一個專用的日誌設備,幫助咱們避免日誌和快照的競爭。配置以下:
# the directory where the snapshot is stored dataDir=/usr/local/zk/data
(2) maxClientCnxns
這個操做將限制鏈接到 Zookeeper 的客戶端數量,並限制併發鏈接的數量,經過 IP 來區分不一樣的客戶端。此配置選項能夠阻止某些類別的 Dos 攻擊。將他設置爲零或忽略不進行設置將會取消對併發鏈接的限制。
例如,此時咱們將 maxClientCnxns 的值設爲 1,以下所示:
# set maxClientCnxns maxClientCnxns=1
啓動 Zookeeper 以後,首先用一個客戶端鏈接到 Zookeeper 服務器上。以後若是有第二個客戶端嘗試對 Zookeeper 進行鏈接,或者有某些隱式的對客戶端的鏈接操做,將會觸發 Zookeeper 的上述配置。
(3) minSessionTimeout 和 maxSessionTimeout
即最小的會話超時和最大的會話超時時間。在默認狀況下,minSession=2tickTime;maxSession=20tickTime。
(1) initLimit
此配置表示,容許 Follower(相對於 Leaderer 言的客戶端)鏈接並同步到 Leader 的初始化鏈接時間,以 tickTime 爲單位。當初始化鏈接時間超過該值,則表示鏈接失敗。
(2) syncLimit
此配置項表示 Leader 與 Follower 之間發送消息時,請求和應答時間長度。若是 Follower 在設置時間內不能與 Leader 通訊,那麼此 Follower 將會被丟棄。
(3) server.A=B:C:D
(4) myid 和 zoo.cfg
除了修改 zoo.cfg 配置文件,集羣模式下還要配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裏面就有一個數據就是 A 的值,Zookeeper 啓動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷究竟是那個 server。
(5) 自動清理快照(snapshot)和事務日誌
從版本 3.4.0 開始, Zookeeper 提供了自動清理快照(snapshot)和事務日誌的功能,須要 在zoo.cfg 配置文件中設置。
autopurge.purgeInterval=1 autopurge.snapRetainCount=3