一 .Zookeeper功能簡(jiǎn)介
ZooKeeper 是一個(gè)開源的分布式協(xié)調(diào)服務(wù),由雅虎創(chuàng)建,是 Google Chubby 的開源實(shí)現(xiàn)喷橙。分布式應(yīng)用程序可以基于 ZooKeeper 實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱扼劈、負(fù)載均衡、命名服務(wù)蝌矛、分布式協(xié)調(diào)/通知道批、集群管理、Master 選舉入撒、配置維護(hù)隆豹,名字服務(wù)、分布式同步茅逮、分布式鎖和分布式隊(duì)列等功能璃赡。
二.ZooKeeper 配置文件(zoo.cfg)詳解
配置文件目錄為:
/usr/local/zookeeper/zookeeper-3.4.10/conf
參數(shù)名 | 說明 |
---|---|
clientPort | 客戶端連接server的端口,即對(duì)外服務(wù)端口献雅,一般設(shè)置為2181吧碉考。 |
dataDir | 存儲(chǔ)快照文件snapshot的目錄。默認(rèn)情況下挺身,事務(wù)日志也會(huì)存儲(chǔ)在這里侯谁。建議同時(shí)配置參數(shù)dataLogDir, 事務(wù)日志的寫性能直接影響zk性能。 |
tickTime | ZK中的一個(gè)時(shí)間單元。ZK中所有時(shí)間都是以這個(gè)時(shí)間單元為基礎(chǔ)墙贱,進(jìn)行整數(shù)倍配置的热芹。例如,session的最小超時(shí)時(shí)間是2*tickTime惨撇。 |
dataLogDir | 事務(wù)日志輸出目錄伊脓。盡量給事務(wù)日志的輸出配置單獨(dú)的磁盤或是掛載點(diǎn),這將極大的提升ZK性能串纺。(No Java system property) |
globalOutstandingLimit | 最大請(qǐng)求堆積數(shù)丽旅。默認(rèn)是1000。ZK運(yùn)行的時(shí)候纺棺, 盡管server已經(jīng)沒有空閑來處理更多的客戶端請(qǐng)求了榄笙,但是還是允許客戶端將請(qǐng)求提交到服務(wù)器上來,以提高吞吐性能祷蝌。當(dāng)然茅撞,為了防止Server內(nèi)存溢出,這個(gè)請(qǐng)求堆積數(shù)還是需要限制下的巨朦。 (Java system property:zookeeper.globalOutstandingLimit. ) |
preAllocSize | 預(yù)先開辟磁盤空間米丘,用于后續(xù)寫入事務(wù)日志。默認(rèn)是64M糊啡,每個(gè)事務(wù)日志大小就是64M拄查。如果ZK的快照頻率較大的話,建議適當(dāng)減小這個(gè)參數(shù)棚蓄。(Java system property:zookeeper.preAllocSize ) |
snapCount | 每進(jìn)行snapCount次事務(wù)日志輸出后堕扶,觸發(fā)一次快照(snapshot), 此時(shí),ZK會(huì)生成一個(gè)snapshot.文件梭依,同時(shí)創(chuàng)建一個(gè)新的事務(wù)日志文件log.稍算。默認(rèn)是100000.(真正的代碼實(shí)現(xiàn)中,會(huì)進(jìn)行一定的隨機(jī)數(shù)處理役拴,以避免所有服務(wù)器在同一時(shí)間進(jìn)行快照而影響性能)(Java system property:zookeeper.snapCount ) |
traceFile | 用于記錄所有請(qǐng)求的log糊探,一般調(diào)試過程中可以使用,但是生產(chǎn)環(huán)境不建議使用河闰,會(huì)嚴(yán)重影響性能科平。(Java system property:? requestTraceFile ) |
maxClientCnxns | 單個(gè)客戶端與單臺(tái)服務(wù)器之間的連接數(shù)的限制,是ip級(jí)別的姜性,默認(rèn)是60匠抗,如果設(shè)置為0,那么表明不作任何限制污抬。請(qǐng)注意這個(gè)限制的使用范圍汞贸,僅僅是單臺(tái)客戶端機(jī)器與單臺(tái)ZK服務(wù)器之間的連接數(shù)限制绳军,不是針對(duì)指定客戶端IP,也不是ZK集群的連接數(shù)限制矢腻,也不是單臺(tái)ZK對(duì)所有客戶端的連接數(shù)限制门驾。指定客戶端IP的限制策略,這里有一個(gè)patch多柑,可以嘗試一下:http://rdc.taobao.com/team/jm/archives/1334(No Java system property) |
clientPortAddress | 對(duì)于多網(wǎng)卡的機(jī)器奶是,可以為每個(gè)IP指定不同的監(jiān)聽端口。默認(rèn)情況是所有IP都監(jiān)聽 clientPort 指定的端口竣灌。 New in 3.3.0 |
minSessionTimeoutmaxSessionTimeout | Session超時(shí)時(shí)間限制聂沙,如果客戶端設(shè)置的超時(shí)時(shí)間不在這個(gè)范圍,那么會(huì)被強(qiáng)制設(shè)置為最大或最小時(shí)間初嘹。默認(rèn)的Session超時(shí)時(shí)間是在2 * tickTime ~ 20 * tickTime 這個(gè)范圍 New in 3.3.0 |
fsync.warningthresholdms | 事務(wù)日志輸出時(shí)及汉,如果調(diào)用fsync方法超過指定的超時(shí)時(shí)間,那么會(huì)在日志中輸出警告信息屯烦。默認(rèn)是1000ms坷随。(Java system property: fsync.warningthresholdms )New in 3.3.4 |
autopurge.purgeInterval | 在上文中已經(jīng)提到,3.4.0及之后版本驻龟,ZK提供了自動(dòng)清理事務(wù)日志和快照文件的功能温眉,這個(gè)參數(shù)指定了清理頻率,單位是小時(shí)翁狐,需要配置一個(gè)1或更大的整數(shù)类溢,默認(rèn)是0,表示不開啟自動(dòng)清理功能露懒。(No Java system property) New in 3.4.0 |
autopurge.snapRetainCount | 這個(gè)參數(shù)和上面的參數(shù)搭配使用闯冷,這個(gè)參數(shù)指定了需要保留的文件數(shù)目。默認(rèn)是保留3個(gè)隐锭。(No Java system property) New in 3.4.0 |
electionAlg | 在之前的版本中窃躲, 這個(gè)參數(shù)配置是允許我們選擇leader選舉算法计贰,但是由于在以后的版本中钦睡,只會(huì)留下一種“TCP-based version of fast leader election”算法,所以這個(gè)參數(shù)目前看來沒有用了躁倒,這里也不詳細(xì)展開說了荞怒。(No Java system property) |
initLimit | Follower在啟動(dòng)過程中,會(huì)從Leader同步所有最新數(shù)據(jù)秧秉,然后確定自己能夠?qū)ν夥?wù)的起始狀態(tài)褐桌。Leader允許F在 initLimit 時(shí)間內(nèi)完成這個(gè)工作。通常情況下象迎,我們不用太在意這個(gè)參數(shù)的設(shè)置荧嵌。如果ZK集群的數(shù)據(jù)量確實(shí)很大了呛踊,F(xiàn)在啟動(dòng)的時(shí)候,從Leader上同步數(shù)據(jù)的時(shí)間也會(huì)相應(yīng)變長(zhǎng)啦撮,因此在這種情況下谭网,有必要適當(dāng)調(diào)大這個(gè)參數(shù)了。(No Java system property) |
syncLimit | 在運(yùn)行過程中赃春,Leader負(fù)責(zé)與ZK集群中所有機(jī)器進(jìn)行通信愉择,例如通過一些心跳檢測(cè)機(jī)制,來檢測(cè)機(jī)器的存活狀態(tài)织中。如果L發(fā)出心跳包在syncLimit之后锥涕,還沒有從F那里收到響應(yīng),那么就認(rèn)為這個(gè)F已經(jīng)不在線了狭吼。注意:不要把這個(gè)參數(shù)設(shè)置得過大层坠,否則可能會(huì)掩蓋一些問題。(No Java system property) |
leaderServes | 默認(rèn)情況下搏嗡,Leader是會(huì)接受客戶端連接窿春,并提供正常的讀寫服務(wù)。但是采盒,如果你想讓Leader專注于集群中機(jī)器的協(xié)調(diào)旧乞,那么可以將這個(gè)參數(shù)設(shè)置為no,這樣一來磅氨,會(huì)大大提高寫操作的性能尺栖。(Java system property: zookeeper. leaderServes )。 |
server.x=[hostname]:nnnnn[:nnnnn] | 這里的x是一個(gè)數(shù)字烦租,與myid文件中的id是一致的延赌。右邊可以配置兩個(gè)端口,第一個(gè)端口用于F和L之間的數(shù)據(jù)同步和其它通信叉橱,第二個(gè)端口用于Leader選舉過程中投票通信挫以。 (No Java system property) |
group.x=nnnnn[:nnnnn]weight.x=nnnnn | 對(duì)機(jī)器分組和權(quán)重設(shè)置,可以 參見這里(No Java system property) |
cnxTimeout | Leader選舉過程中窃祝,打開一次連接的超時(shí)時(shí)間掐松,默認(rèn)是5s。(Java system property: zookeeper. cnxTimeout ) |
zookeeper.DigestAuthenticationProvider.superDigest | ZK權(quán)限設(shè)置相關(guān)粪小,具體參見 《 使用super **身份對(duì)有權(quán)限的節(jié)點(diǎn)進(jìn)行操作 **》 和 《 ZooKeeper **權(quán)限控制 **》 |
skipACL | 對(duì)所有客戶端請(qǐng)求都不作ACL檢查大磺。如果之前節(jié)點(diǎn)上設(shè)置有權(quán)限限制,一旦服務(wù)器上打開這個(gè)開頭探膊,那么也將失效杠愧。(Java system property: zookeeper.skipACL ) |
forceSync | 這個(gè)參數(shù)確定了是否需要在事務(wù)日志提交的時(shí)候調(diào)用 [FileChannel ](http://rdc.taobao.com/team/%5C/java%5C/jdk1.6.0_22%5C/jre%5C/lib%5C/rt.jar%3Cjava.nio.channels(FileChannel.class%E2%98%83FileChannel).force來保證數(shù)據(jù)完全同步到磁盤。(Java system property: zookeeper.forceSync ) |
jute.maxbuffer | 每個(gè)節(jié)點(diǎn)最大數(shù)據(jù)量逞壁,是默認(rèn)是1M流济。這個(gè)限制必須在server和client端都進(jìn)行設(shè)置才會(huì)生效锐锣。(Java system property: jute.maxbuffer ) |
ZooKeeper 搭建集群
http://www.itoak.cn/archives/521
三.ZooKeeper 常用命令
常用命令
啟動(dòng)ZK服務(wù): bin/zkServer.sh start
查看ZK服務(wù)狀態(tài): bin/zkServer.sh status
停止ZK服務(wù): bin/zkServer.sh stop
重啟ZK服務(wù): bin/zkServer.sh restart
連接服務(wù)器 zkCli.sh -server 127.0.0.1:2181
查看根目錄 ls /
創(chuàng)建 testnode節(jié)點(diǎn),關(guān)聯(lián)字符串"zz" create /zk/testnode "zz"
查看節(jié)點(diǎn)內(nèi)容 get /zk/testnode
設(shè)置節(jié)點(diǎn)內(nèi)容 set /zk/testnode abc
刪除節(jié)點(diǎn) delete /zk/testnode