集羣模式的配置
爲了確保ZooKeeper服務的穩定與可靠性,一般是搭建成一個ZK集羣來對外提供服務。關於ZooKeeper,須要明確一個很重要的特性:集羣中只要有過半的機器是正常工做的,那麼整個集羣對外就是可用的(本文下面就用―過半存活便可用‖來代替這個特性吧^-^)。正是基於這個特性,建議是將ZK集羣的機器數量控制爲奇數較爲合適。爲何選擇奇數臺機器,咱們能夠來看一下,假如是4臺機器構成的ZK集羣,那麼只可以容許集羣中有一個機器down掉,由於若是down掉2臺,那麼只剩下2臺機器,顯然沒有過半。而若是是5臺機器的集羣,那麼就可以對2臺機器down掉的狀況進行容災了。
你能夠按照如下步驟來配置一個ZK機器,更多詳細步驟請查看《ZooKeeper快速搭建》: 1. 安裝JDK。相關連接:http://java.sun.com/javase/downloads/index.jsp
2. 設置Java heap 大小。避免內存與磁盤空間的交換,可以大大提高ZK的性能,設置合理的heap大小則能有效避免此類空間交換的觸發。在正式發佈上線以前,建議是針對使用場景進行一些壓力測試,確保正常運行後內存的使用不會觸發此類交換。一般在一個物理內存爲4G的機器上,最多設置-Xmx爲3G。
3. 下載安裝ZooKeeper,相關連接:http://zookeeper.apache.org/releases.html
4. 配置文件zoo.cfg。初次使用zookeeper,按照以下這個簡單配置便可:
1. tickTime=2000
2. dataDir=/var/lib/zookeeper/
3. clientPort=2181
4. initLimit=5
5. syncLimit=2 server.1=zoo1:2888:3888 6. server.2=zoo2:2888:3888 7. server.3=zoo3:2888:3888
本文後續章節會對這些參數進行詳細的介紹,這裏只是簡單說幾點:
A. 集羣中的每臺機器都須要感知整個集羣是由哪幾臺機器組成的,在配置文件中,能夠按照這樣的格式,每行寫一個機器配置:server.id=host:port:port. 關於這個id,咱們稱之爲Server ID,標識host機器在集羣中的機器序號,在每一個ZK機器上,咱們須要在數據目錄(數據目錄就是dataDir參數指定的那個目錄)下建立一個myid文件,myid中就是這個Server ID數字。
B. 在ZooKeeper的設計中,集羣中任意一臺機器上的zoo.cfg文件的內容都是一致的。所以最好是用SVN把這個文件管理起來,保證每一個機器都能共享到一份相同的配置。
5. 關於myid文件。myid文件中只有一個數字,即一個Server ID。例如,server.1 的myid文件內容就是―1‖。注意,請確保每一個server的myid文件中id數字不一樣,而且和server.id=host:port:port中的id一致。另外,id的範圍是1~255。 6. 至此,配置文件基本ok,能夠嘗試使用以下命令來啓動zookeeper了:
1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4
j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMainzoo.cfg
注意,不一樣的ZK版本,依賴的log4j和slf4j版本也是不同的,請看清楚本身的版本後,再執行上面這個命令。QuorumPeerMain類會啓動ZooKeeper Server,同時,JMX MB也會被啓動,方便管理員在JMX管理控制檯上進行ZK的控制。這裏有對ZK JMX的詳細介紹:http://zookeeper.apache.org/doc/r3.4.3/zookeeperJMX.html. 另外,徹底能夠有更簡便的方式,直接使用%ZK_HOME%/bin 中的腳本啓動便可。
1. ./zkServer.sh start
7. 鏈接ZK host來檢驗部署是否成功。
A. Java語言的話,能夠經過運行這個命令來檢測:
1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4
j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar \ org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181
B. 若是是C語言的話,方法以下:
1. $ make cli_st 2. $ make cli_mt
而後按照的這樣的方式鏈接ZK:$ cli_mt 127.0.0.1:2181。不管運行哪一種客戶端,最終都是一個相似於文件系統的命令行操做。
注意:除了上面這種檢測方法,其實%ZK_HOME%/bin也有其它腳本,下面這個命令執行後,就進入了zookeeper樹狀結構的文件系統中。
1. ./zkCli.sh
另外,還有一種方式,可以查看ZK服務器當前狀態,以下,這個可以很好的看出目前這個機器的運行狀況了:
1. $ echo stat|nc localhost 2181
2. Zookeeper version: 3.4.3-1240972, built on 02/06/2012 10:48 GMT
3. Clients:
4. /127.0.0.1:40293[0](queued=0,recved=1,sent=0) 5.
6. Latency min/avg/max: 1/2/3 7. Received: 4 8. Sent: 3
9. Outstanding: 0 10. Zxid: 0×200000006 11. Mode: leader 12. Node count: 4 html
更多精彩內容請關注:http://bbs.superwu.cn java
關注超人學院微信二維碼:web