簡要
ZooKeeper的安裝模式分為三種夭苗,分別為:單機(jī)模式(stand-alone)缀遍、集群模式和集群偽分布模式筷弦。ZooKeeper 單機(jī)模式的安裝相對比較簡單,如果第一次接觸ZooKeeper的話术唬,建議安裝ZooKeeper單機(jī)模式或者集群偽分布模式薪伏。
安裝
- 首先去官網(wǎng)下載ZooKeeper穩(wěn)定版
- 自備JDK 6以上環(huán)境
- 解壓 tar xvzf zookeeper-x.x.x.tar
- 配置文件
在zookeeper x.x.x/conf 下,將zoo_sample.cfg 復(fù)制一份為zoo.cfg
配置項(xiàng)解析:tickTime=2000
基本事件單元,以毫秒為單位粗仓。它用來控制心跳和超時(shí)嫁怀,默認(rèn)情況下最小的會(huì)話超時(shí)時(shí)間為兩倍的 tickTimedataDir=/tmp/zookeeper
存儲內(nèi)存中數(shù)據(jù)庫快照的位置;
注意 應(yīng)該謹(jǐn)慎地選擇日志存放的位置借浊,使用專用的日志存儲設(shè)備能夠大大地提高系統(tǒng)的性能眶掌,如果將日志存儲在比較繁忙的存儲設(shè)備上,那么將會(huì)在很大程度上影響系統(tǒng)的性能巴碗。dataLogDir
這個(gè)操作將管理機(jī)器把事務(wù)日志寫入到“ dataLogDir ”所指定的目錄朴爬,而不是“ dataDir ”所指定的目錄。這將允許使用一個(gè)專用的日志設(shè)備并且?guī)椭覀儽苊馊罩竞涂煺罩g的競爭橡淆。clientPort=2181
** 監(jiān)聽客戶端連接的端口**maxClientCnxns=60
這個(gè)操作將限制連接到 ZooKeeper 的客戶端的數(shù)量召噩,限制并發(fā)連接的數(shù)量母赵,它通過 IP 來區(qū)分不同的客戶端。此配置選項(xiàng)可以用來阻止某些類別的 Dos 攻擊具滴。將它設(shè)置為 0 或者忽略而不進(jìn)行設(shè)置將會(huì)取消對并發(fā)連接的限制initLimit=10(集群配置)
此配置表示凹嘲,允許 follower (相對于 leader 而言的“客戶端”)連接并同步到 leader 的初始化連接時(shí)間,它以 tickTime 的倍數(shù)來表示构韵。當(dāng)超過設(shè)置倍數(shù)的 tickTime 時(shí)間周蹭,則連接失敗。syncLimit=5(集群配置)
此配置表示疲恢, leader 與 follower 之間發(fā)送消息凶朗,請求和應(yīng)答時(shí)間長度。如果 follower 在設(shè)置的時(shí)間內(nèi)不能與leader 進(jìn)行通信显拳,那么此 follower 將被丟棄棚愤。autopurge.snapRetainCount=3
這個(gè)參數(shù)和autopurge.purgeInterval搭配使用,這個(gè)參數(shù)指定了需要保留的文件數(shù)目杂数。默認(rèn)是保留3個(gè)宛畦。autopurge.purgeInterval=1
這個(gè)參數(shù)指定了清理頻率,單位是小時(shí)揍移,需要填寫一個(gè)1或更大的整數(shù)次和,默認(rèn)是0,表示不開啟自己清理功能那伐。
單機(jī)版
- 單機(jī)版zoo.cfg配置如下:
clientPort=2181 dataDir=/tmp/zookeeper tickTime=2000
- 啟動(dòng)方式
直接在bin目錄踏施,運(yùn)行 zkServer.sh start
成功啟動(dòng)
聯(lián)機(jī)版
- 聯(lián)機(jī)版每臺機(jī)器的zoo.cfg配置如下:
tickTime=2000 dataDir=/tmp/zookeeper clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=ip1:2887:3887 server.n=ip2:2888:3888 ... (實(shí)際上,有多少臺機(jī)器喧锦,這邊就要配多少個(gè)ip,聯(lián)機(jī)版下組成集群读规,端口可以一樣抓督,但是在單機(jī)多實(shí)例下燃少,端口必須不同,否則會(huì)有沖突,詳細(xì)見下方)
- 啟動(dòng)方式跟單機(jī)版一致(窮人只有一臺vps,請自行測試)
單機(jī)多實(shí)例版
一臺機(jī)器铃在,啟動(dòng)多個(gè)zooKeeper
- 單機(jī)多實(shí)例版每個(gè)實(shí)例的zoo.cfg配置如下:
- zoo1.cfg:
tickTime=2000 dataDir=/tmp/zookeeper/zk_data_1 clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888
- zoo2.cfg:
tickTime=2000 dataDir=/tmp/zookeeper/zk_data_2 clientPort=2182 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888
- zoo1.cfg:
注意dataDir的路徑是不一樣的阵具,clientPort也必須是不一樣
- 啟動(dòng)方式
直接./zkServer.sh start zooX.cfg
** 然并卵,當(dāng)查看輸出文件的時(shí)候定铜,你會(huì)發(fā)現(xiàn)根本就沒跑起來阳液,還拋異常了**
2017-06-05 02:44:07,009 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading configuration from: ./conf/zoo1.cfg 2017-06-05 02:44:07,448 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,449 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,459 [myid:] - WARN [main:QuorumPeerConfig@305] - No server failure will be tolerated. You need at least 3 servers. 2017-06-05 02:44:07,459 [myid:] - INFO [main:QuorumPeerConfig@352] - Defaulting to majority quorums 2017-06-05 02:44:07,462 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing ./conf/zoo1.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper/data1/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140) ... 2 more Invalid config, exiting abnormally
之前一直想,它是怎么在同一臺機(jī)器上揣炕,識別到自己就是server.1帘皿,并且使用對應(yīng)的端口,它報(bào)的就是這個(gè)問題.
解決方式: 在配置文件中的dataDir指定的目錄下畸陡,創(chuàng)建一個(gè)myid的文件鹰溜,里面的內(nèi)容只有一個(gè)數(shù)字虽填,就是server.x后面的x,例如zoo1.cfg,采用server.1的ip與端口,則在對應(yīng)的dataDir下創(chuàng)建一個(gè)myid,并把數(shù)字寫入
再重新跑起來,問題解決.
測試對應(yīng)的zooKeeper進(jìn)程是否有正常運(yùn)行曹动,使用命令
echo stat | nc yourZooKeeperIP yourZooKeeperPort
有返回即正常
ZooKeeper命令
表 1 : ZooKeeper 四字命令
ZooKeeper 四字命令 | 功能描述 |
---|---|
conf | 輸出相關(guān)服務(wù)配置的詳細(xì)信息斋日。 |
cons | 列出所有連接到服務(wù)器的客戶端的完全的連接 / 會(huì)話的詳細(xì)信息。包括“接受 / 發(fā)送”的包數(shù)量墓陈、會(huì)話 id 恶守、操作延遲、最后的操作執(zhí)行等等信息贡必。 |
dump | 列出未經(jīng)處理的會(huì)話和臨時(shí)節(jié)點(diǎn)兔港。 |
envi | 輸出關(guān)于服務(wù)環(huán)境的詳細(xì)信息(區(qū)別于 conf 命令)。 |
reqs | 列出未經(jīng)處理的請求 |
ruok | 測試服務(wù)是否處于正確狀態(tài)赊级。如果確實(shí)如此押框,那么服務(wù)返回“imok ”,否則不做任何相應(yīng)理逊。 |
stat | 輸出關(guān)于性能和連接的客戶端的列表橡伞。 |
wchs | 列出服務(wù)器 watch 的詳細(xì)信息。 |
wchc | 通過 session 列出服務(wù)器 watch 的詳細(xì)信息晋被,它的輸出是一個(gè)與watch 相關(guān)的會(huì)話的列表兑徘。 |
wchp | 通過路徑列出服務(wù)器 watch 的詳細(xì)信息。它輸出一個(gè)與 session相關(guān)的路徑羡洛。 |
下圖 1 是 ZooKeeper 四字命令的簡單用例: