您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“ZooKeeper集群怎樣安裝和部署”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“ZooKeeper集群怎樣安裝和部署”這篇文章吧。
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、下載安裝
可以從https://zookeeper.apache.org/releases.html下載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------------------------------------------------
以上是“ZooKeeper集群怎樣安裝和部署”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。