Zookeeper 系列(二)安裝配製

Zookeeper 系列(二)安裝配製

1、Zookeeper 的搭建方式

Zookeeper 安裝方式有三種,單機模式和集羣模式以及僞集羣模式。node

  • 單機模式 :Zookeeper 只運行在一臺服務器上,適合測試環境;
  • 集羣模式 :Zookeeper 運行於一個集羣上,適合生產環境,這個計算機集羣被稱爲一個 「集合體」(ensemble);
  • 僞集羣模式 :就是在一臺物理機上運行多個 Zookeeper 實例,測試使用。

Zookeeper 經過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就可以保證服務繼續。數據庫

爲何必定要超過半數呢? 這跟 Zookeeper 的複製策略有關:Zookeeper 確保對 znode 樹的每個修改都會被複制到集合體中超過半數的機器上。apache

(一) Zookeeper 單機模式搭建

(1) 下載 ZooKeeperhttp://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 服務啓動了,那麼總的 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,並且能夠在單機模擬集羣模式 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 服務器實例。

  • clientPort 端口 :若是在 1 臺機器上部署多個 server,那麼每臺機器都要不一樣的 clientPort。
  • dataDir 和 dataLogDir :dataDir 和 dataLogDir 也須要區分下,將數據文件和日誌文件分開存放。
  • server.X 和 myid : server.X 這個數字就是對應,data/myid 中的數字。在 3 個 server 的 myid 文件中分別寫入了 0,1,2,那麼每一個server 中的 zoo.cfg 都配 server.0 server.2,server.3就好了。由於在同一臺機器上,後面連着的2個端口,3 個 server 都不要同樣,不然端口衝突。

下面是我所配置的集羣僞分佈模式,分別經過 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

2、Zookeeper 配置

Zookeeper 的功能特性是經過 Zookeeper 配置文件來進行控制管理的(zoo.cfg)。這樣的設計其實有其自身的緣由,經過前面對 Zookeeper 的配置能夠看出,在對 Zookeeper 集羣進行配置的時候,它的配置文檔是徹底相同的。集羣僞分佈模式中,有少部分是不一樣的。這樣的配置方式使得在部署Zookeeper 服務的時候很是方便。若是服務器使用不一樣的配置文件,必須確保不一樣配置文件中的服務器列表相匹配。

在設置 Zookeeper 配置文檔時候,某些參數是可選的,某些是必須的。這些必須參數就構成了 Zookeeper 配置文檔的最低配置要求。另外,若要對 Zookeeper 進行更詳細的配置,能夠參考下面的內容。

2.1 基本配置

下面是在最低配置要求中必須配置的參數:

(1) client :監聽客戶端鏈接的端口。

(2) tickTime :基本事件單元,這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,每隔 tickTime 時間就會發送一個心跳;最小的 session 過時時間爲 2 倍 tickTime。

(3) dataDir :存儲內存中數據庫快照的位置,若是不設置參數,更新食物的日誌將被存儲到默認位置。

應該謹慎的選擇日誌存放的位置,使用專用的日誌存儲設備可以大大提升系統的性能,若是將日誌存儲在比較繁忙的存儲設備上,那麼將會很大程度上影像系統性能。

2.2 高級配置

下面是高級配置參數中可選配置參數,用戶可使用下面的參數來更好的規定 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。

2.3 集羣配置

(1) initLimit

此配置表示,容許 Follower(相對於 Leaderer 言的客戶端)鏈接並同步到 Leader 的初始化鏈接時間,以 tickTime 爲單位。當初始化鏈接時間超過該值,則表示鏈接失敗。

(2) syncLimit

此配置項表示 Leader 與 Follower 之間發送消息時,請求和應答時間長度。若是 Follower 在設置時間內不能與 Leader 通訊,那麼此 Follower 將會被丟棄。

(3) server.A=B:C:D

  • A :其中 A 是一個數字,表示這個是服務器的編號;
  • B :是這個服務器的 ip 地址;
  • C :Leader 選舉的端口;
  • D :Zookeeper 服務器之間的通訊端口。

(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
  • autopurge.purgeInterval :這個參數指定了持久化日誌清理頻率,單位是小時,默認是 0,表示不開啓自動清理功能。
  • autopurge.snapRetainCount :這個參數和上面的參數搭配使用,用於指定須要保留的持久化目志文件數目,默認是保留 3 個。
相關文章
相關標籤/搜索