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我這裏對版本號沒有特殊要求方便起見我直接使用了系統源安裝。

  查看當前系統源版本號

root@zookeeper-001:~# 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臺機器上分別安裝

root@zookeeper-001:~# aptitude install zookeeperd

三、修改配置文件

安裝完成後默認位於/etc/zookeeper目錄下我的配置文件如下把所有zookeeper節點加到配置文件的server裏即可。所有節點的配置相同。

root@zookeeper-001:~# 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

wKiom1kiZ06RlnA7AAGZkAog-Iw987.png-wh_50

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 /'命令:

root@zookeeper-001:~# 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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章