ZooKeeper叢集安裝和部署

tangyunoracle發表於2018-03-12
0、ZooKeeper還可以用作其他用途,例如:

    資料釋出與訂閱(配置中心)
    負載均衡
    命名服務(Naming Service)
    分散式通知/協調
    叢集管理與Master選舉
    分散式鎖
    分散式佇列
1、介紹與系統要求
ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境。
系統             開發環境          生產環境
Linux           支援              支援
Solaris         支援              支援
FreeBSD         支援              支援
Windows         支援              不支援
MacOS           支援              不支援

Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。

■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境;
■ 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項;
■ 叢集模式:Zookeeper執行於一個叢集上,適合生產環境,這個計算機叢集被稱為一個“集合體”(ensemble)

Zookeeper透過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。為什麼一定要超過半數呢?這跟Zookeeper的複製策略有關:zookeeper確保對znode 樹的每一個修改都會被複制到集合體中超過半數的機器上。
所以ZooKeeper叢集模式的部署,3個ZooKeeper服務程式是建議的最小程式數量,而且不同的服務程式建議部署在不同的物理機器上面,以減少機器當機帶來的風險,以實現ZooKeeper叢集的高可用。
ZooKeeper是用Java編寫的,執行在Java環境上,因此,在部署zk的機器上需要安裝Java執行環境。為了正常執行zk,我們需要JRE1.6或者以上的版本。ZooKeeper對於機器的硬體配置沒有太大的要求。

2、下載安裝
可以從下載ZooKeeper,目前最新的穩定版本為 3.4.11 版本,我們今天選擇3.4.10版本。
# tar zvxf zookeeper-3.4.10.tar.gz
# mv zookeeper-3.4.10 ../zk
# cd ../zk
[root@galera01 zk]# ls -l
drwxr-xr-x  2 1001 1001    4096 Mar 23  2017 bin
-rw-rw-r--  1 1001 1001   84725 Mar 23  2017 build.xml
drwxr-xr-x  2 1001 1001    4096 Mar 23  2017 conf
drwxr-xr-x 10 1001 1001    4096 Mar 23  2017 contrib
drwxr-xr-x  2 1001 1001    4096 Mar 23  2017 dist-maven
drwxr-xr-x  6 1001 1001    4096 Mar 23  2017 docs
-rw-rw-r--  1 1001 1001    1709 Mar 23  2017 ivysettings.xml
-rw-rw-r--  1 1001 1001    5691 Mar 23  2017 ivy.xml
drwxr-xr-x  4 1001 1001    4096 Mar 23  2017 lib
-rw-rw-r--  1 1001 1001   11938 Mar 23  2017 LICENSE.txt
-rw-rw-r--  1 1001 1001    3132 Mar 23  2017 NOTICE.txt
-rw-rw-r--  1 1001 1001    1770 Mar 23  2017 README_packaging.txt
-rw-rw-r--  1 1001 1001    1585 Mar 23  2017 README.txt
drwxr-xr-x  5 1001 1001    4096 Mar 23  2017 recipes
drwxr-xr-x  8 1001 1001    4096 Mar 23  2017 src
-rw-rw-r--  1 1001 1001 1456729 Mar 23  2017 zookeeper-3.4.10.jar
-rw-rw-r--  1 1001 1001     819 Mar 23  2017 zookeeper-3.4.10.jar.asc
-rw-rw-r--  1 1001 1001      33 Mar 23  2017 zookeeper-3.4.10.jar.md5
-rw-rw-r--  1 1001 1001      41 Mar 23  2017 zookeeper-3.4.10.jar.sha1


bin目錄:zk的可執行指令碼目錄,包括zk服務程式,zk客戶端,等指令碼。
conf目錄:配置檔案目錄。zoo_sample.cfg為樣例配置檔案,log4j.properties為日誌配置檔案。
lib目錄:zk依賴的包。
contrib目錄:一些用於操作zk的工具包。
recipes目錄:zk某些用法的程式碼示例


3、叢集模式執行配置
單機模式的zk程式雖然便於開發與測試,但並不適合在生產環境使用。在生產環境下,我們需要使用叢集模式來對zk進行部署。在叢集模式下,建議至少部署3個zk程式,或者部署奇數個zk程式。
在叢集模式下,所有的zk程式可以使用相同的配置檔案(是指各個zk程式部署在不同的機器上面),例如如下配置:
# mkdir -p /opt/zkdata
# cd /opt/zk/conf
# cp zoo_sample.cfg zk.cfg
# vi zk.cfg
tickTime=2000
dataDir=/opt/zkdata
clientPort=2181
initLimit=5
syncLimit=2
server.0=192.168.56.111:2888:3888
server.1=192.168.56.112:2888:3888
server.3=192.168.56.113:2888:3888

設定選擇配置檔案的名字在zkEnv.sh檔案裡面,預設為zoo.cfg,這裡已修改為zk.cfg

tickTime引數:tickTime則是上述兩個超時配置的基本單位,例如對於initLimit,其配置值為5,說明其超時時間為 2000ms * 5 = 10秒。
initLimit引數:ZooKeeper叢集模式下包含多個zk程式,其中一個程式為leader,餘下的程式為follower。
當follower最初與leader建立連線時,它們之間會傳輸相當多的資料,尤其是follower的資料落後leader很多。
initLimit配置follower與leader之間建立連線後進行同步的最長時間。
syncLimit引數:配置follower和leader之間傳送訊息,請求和應答的最大時間長度。如果follower在設定時間內不能與leader通訊,那麼此follower將會被丟棄。
maxClientCnxns引數:
這個操作將限制連線到Zookeeper的客戶端數量,並限制併發連線的數量,透過IP來區分不同的客戶端。此配置選項可以阻止某些類別的Dos攻擊。將他設定為零或忽略不進行設定將會取消對併發連線的限制。
例如,此時我們將maxClientCnxns的值設為1,如下所示:
# set maxClientCnxns
   maxClientCnxns=1
啟動Zookeeper之後,首先用一個客戶端連線到Zookeeper伺服器上。之後如果有第二個客戶端嘗試對Zookeeper進行連線,或者有某些隱式的對客戶端的連線操作,將會觸發Zookeeper的上述配置。
minSessionTimeout和maxSessionTimeout引數:
即最小的會話超時和最大的會話超時時間。在預設情況下,minSession=2*tickTime;maxSession=20*tickTime。
server.id=host:port1:port2
其中id為一個數字,表示zk程式的id,這個id也是dataDir目錄下myid檔案的內容。
host是該zk程式所在的IP地址,port1表示follower和leader交換訊息所使用的埠,port2表示選舉leader所使用的埠。
dataDir引數:該引數沒有預設值,必須配置,其配置的含義跟單機模式下的含義類似,不同的是叢集模式下還有一個myid檔案。
myid檔案的內容只有一行,且內容只能為1~255之間的數字,這個數字亦即上面介紹server.id中的id,表示zk程式的id。

# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Starting zookeeper ... STARTED

./zkCli.sh -server 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181


# ./zkCli.sh -server 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181
Connecting to 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181
2018-03-12 14:20:23,468 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2018-03-12 14:20:23,473 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=galera02
2018-03-12 14:20:23,473 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_45
2018-03-12 14:20:23,474 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/opt/zk/bin/../build/classes:/opt/zk/bin/../build/lib/*.jar:/opt/zk/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zk/bin/../lib/slf4j-api-1.6.1.jar:/opt/zk/bin/../lib/netty-3.10.5.Final.jar:/opt/zk/bin/../lib/log4j-1.2.16.jar:/opt/zk/bin/../lib/jline-0.9.94.jar:/opt/zk/bin/../zookeeper-3.4.10.jar:/opt/zk/bin/../src/java/lib/*.jar:/opt/zk/bin/../conf:
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-431.el6.x86_64
2018-03-12 14:20:23,475 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2018-03-12 14:20:23,476 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2018-03-12 14:20:23,476 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/opt/zk/bin
2018-03-12 14:20:23,477 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@6c8d5190
2018-03-12 14:20:23,494 [myid:] - INFO  [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 192.168.56.113/192.168.56.113:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
2018-03-12 14:20:23,581 [myid:] - INFO  [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@876] - Socket connection established to 192.168.56.113/192.168.56.113:2181, initiating session
JLine support is enabled
2018-03-12 14:20:23,868 [myid:] - INFO  [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 192.168.56.113/192.168.56.113:2181, sessionid = 0x26218afe3bd0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181(CONNECTED) 0]

[zk: 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181(CONNECTED) 0] quit
Quitting...
2018-03-12 14:22:41,435 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x26218afe3bd0000
2018-03-12 14:22:41,436 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x26218afe3bd0000 closed


4、檢視目前zk叢集狀態
[root@galera01 bin]#  ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: follower

[root@galera02 bin]#  ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: leader

[root@galera03 bin]#  ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: follower
----------------------------------------------------------End------------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-2151738/,如需轉載,請註明出處,否則將追究法律責任。

相關文章