zookeeper集群搭建
簡介
Zookeeper 分布式服務框架是Apache Hadoop的一個子項目它主要是用來解決分布式應用中經常遇到的一些數據管理問題如統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等等。zookeeper本身可以單節點狀態運行不過它的長處在於通過分布式zookeeper集群一個leader多個follower基於一定的策略來保證zookeeper集群的穩定性和可用性從而實現分布式應用的可靠性。
Zookeeper集群中主要有兩個角色leader和follower。
領導者leader,用於負責進行投票的發起和決議,更新系統狀態。
學習者learner,包括跟隨者follower和觀察者observer。
其中follower用於接受客戶端請求並想客戶端返回結果,在選主過程中參與投票。
而observer可以接受客戶端連接,將寫請求轉發給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴展系統,提高讀取速度。
Zookeeper集群個數一般設置為2n+1奇數個。這裏用三節點為例搭建一個zookeeper集群。
一、安裝Java
操作之前建議改下hostname
192.168.100.21 zookeeper-001
192.168.100.22 zookeeper-002
192.168.100.23 zookeeper-003
zookeeper依賴java環境首先安裝java三臺機器分別操作如下
# add-apt-repository ppa:webupd8team/java # apt-get update # apt-get install oracle-java8-installer # java -version //檢驗Java版本 java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
二、安裝zookeeper
截止目前17年5月zookeeper最新穩定版本是3.4.10可以選擇在官網的download連接上下載安裝。因為這裏Ubuntu自帶系統源的版本是3.4.5我這裏對版本號沒有特殊要求方便起見我直接使用了系統源安裝。
查看當前系統源版本號
[email protected]:~# aptitude show zookeeperd Package: zookeeperd New: yes State: installed Automatically installed: no Version: 3.4.5+dfsg-1 Priority: optional Section: universe/java Maintainer: Ubuntu Developers <[email protected]> Architecture: all
3臺機器上分別安裝
[email protected]:~# aptitude install zookeeperd
三、修改配置文件
安裝完成後默認位於/etc/zookeeper目錄下我的配置文件如下把所有zookeeper節點加到配置文件的server裏即可。所有節點的配置相同。
[email protected]:~# cat /etc/zookeeper/conf/zoo.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. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/data/zkdata # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 server.1=zookeeper-001:2888:3888 server.2=zookeeper-002:2888:3888 server.3=zookeeper-003:2888:3888 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1
配置參數說明
tickTime這個時間是作為zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發送一個心跳。
initLimit這個配置項是用來配置zookeeper接受客戶端這裏所說的客戶端不是用戶連接zookeeper服務器的客戶端,而是zookeeper服務器集群中連接到leader的follower 服務器初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳的時間也就是tickTime長度後 zookeeper服務器還沒有收到客戶端的返回信息,那麽表明這個客戶端連接失敗。總的時間長度就是 10*2000=20秒。
syncLimit這個配置項標識leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
dataDir:顧名思義就是zookeeper保存數據的目錄,默認情況下zookeeper將寫數據的日誌文件也保存在這個目錄裏
clientPort這個端口就是客戶端連接Zookeeper服務器的端口,Zookeeper會監聽這個端口接受客戶端的訪問請求
server.A=B:C:D中的A是一個數字,表示這個是第幾號服務器,B是這個服務器的IP地址C第一個端口用來集群成員的信息交換,表示這個服務器與集群中的leader服務器交換信息的端口D是在leader掛掉時專門用來進行選舉leader所用的端口。
四、集群初始化操作
1、由於之前在zookeeper的配置文件裏規定了data目錄如果沒有的話在啟動服務之前需要手動創建
# mkdir -p /data/zkdata/ # chown -R zookeeper. /data/zkdata/
2、創建serverID
zookeeper集群模式下需要配置myid文件,這個文件需要放在dataDir目錄下。這個文件裏面有一個數據就是A的值該A就是zoo.cfg文件中server.A=B:C:D中的A,在zoo.cfg文件中配置的dataDir路徑中創建myid文件。
在分別在zookeeper-001、002、003上執行
# echo 1 > /data/zkdata/myid # echo 2 > /data/zkdata/myid # echo 3 > /data/zkdata/myid
以上都配置完成之後分別在三個節點上啟動zookeeper服務
# service zookeeper start
五、zookeeper集群狀態檢測
1、查看當前集群狀態可以使用nc命令mode行顯示當前是leader還是follower
# echo state | nc 127.0.0.1 2181
2、也可以用自帶的zkCli.sh連接到zookeeper文件系統
# bin/zkCli.sh -server 127.0.0.1:2181
3、這裏推薦一個python的zookeeper命令行工具"zk-shell",pip安裝即可
# pip install zk-shell
使用幫助如下
usage: zk-shell [-h] [--connect-timeout CONNECT_TIMEOUT] [--run-once RUN_ONCE] [--run-from-stdin] [--sync-connect] [--readonly] [--tunnel TUNNEL] [--version] [hosts [hosts ...]] positional arguments: hosts ZK hosts to connect optional arguments: -h, --help show this help message and exit --connect-timeout CONNECT_TIMEOUT ZK connect timeout --run-once RUN_ONCE Run a command non-interactively and exit --run-from-stdin Read cmds from stdin, run them and exit --sync-connect Connect syncronously. --readonly Enable readonly. --tunnel TUNNEL Create a ssh tunnel via this host --version Display version and exit.
示例,執行‘ls /‘命令:
[email protected]:~# zk-shell host 127.0.0.1 --run-once ‘ls /‘ admin brokers cluster config consumers controller controller_epoch isr_change_notification zookeeper
zookeeper官方文檔https://zookeeper.apache.org/doc/trunk/
zookeeper下載連接http://mirrors.hust.edu.cn/apache/zookeeper/
本文出自 “xujpxm” 博客,請務必保留此出處http://xujpxm.blog.51cto.com/8614409/1928138
zookeeper集群搭建