Zookeeper是一個(gè)高性能的分布式系統(tǒng)的協(xié)調(diào)服務(wù)。它在一個(gè)簡(jiǎn)單的接口里暴露公共服務(wù):像命名、配置管理、同步、和群組服務(wù),所以你沒有必要從頭開始實(shí)現(xiàn)它們。你可以使用現(xiàn)成的Zookeeper去實(shí)現(xiàn)共識(shí)、群組管理、領(lǐng)導(dǎo)人選舉和業(yè)務(wù)協(xié)議。并且你可以在它的基礎(chǔ)之上建立自己特定的需求。
創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),洮南網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:洮南等地區(qū)。洮南做網(wǎng)站價(jià)格咨詢:18982081108Zookeeper實(shí)現(xiàn)的方式為建立一個(gè)集群服務(wù)器, 并且集群服務(wù)器會(huì)自動(dòng)選擇leader, 當(dāng)leader掛掉以后再重新選舉。在zookeeper中可以創(chuàng)建節(jié)點(diǎn), 通過監(jiān)聽節(jié)點(diǎn)數(shù)據(jù)變化, 來達(dá)到客戶端執(zhí)行指定操作。
$ java -version
如果你的機(jī)器上安裝了java, 則直接跳過此步驟
$ cd ~/Downloads
$ tar -zxf jdk-8u60-linux-x64.gz # 解壓文件
$ mkdir /opt/jdk
$ mv jdk-1.8.0_60 /opt/jdk/
要設(shè)置路徑和JAVA_HOME變量,請(qǐng)將以下命令添加到?/.bashrc文件中。
export JAVA_HOME = /usr/jdk/jdk-1.8.0_60
export PATH=$PATH:$JAVA_HOME/bin
運(yùn)行更改以生效
$ source ~/.bashrc
要在你的計(jì)算機(jī)上安裝ZooKeeper框架,請(qǐng)?jiān)L問以下鏈接并下載最新版本的ZooKeeper。http://zookeeper.apache.org/releases.html
使用命令 vi conf/zoo.cfg 和所有以下參數(shù)設(shè)置為起點(diǎn),打開名為 conf/zoo.cfg 的配置文件.
$ vi conf/zoo.cfg
tickTime = 2000
dataDir = /path/to/zookeeper/data
clientPort = 2181
initLimit = 5
syncLimit = 2
執(zhí)行以下命令
$ bin/zkServer.sh start
$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg
$ Starting zookeeper ... STARTED
$ bin/zkCli.sh
成功以后會(huì)返回以下信息
Connecting to localhost:2181
................
................
................
Welcome to ZooKeeper!
................
................
WATCHER::
WatchedEvent state:SyncConnected type: None path:null
[zk: localhost:2181(CONNECTED) 0]
操作 | 說明 |
---|---|
start | 啟動(dòng) |
start-foreground | 查看啟動(dòng)不成功的原因 |
stop | 停止 |
restart | 重啟 |
status | 查看服務(wù)狀態(tài) |
upgrade | 升級(jí) |
print-cmd | 打印命令 |
配置項(xiàng) | 默認(rèn)值 | 說明 |
---|---|---|
clientPort | 2181 | 客戶端連接 |
dataDir | zookeeper安裝目錄/data | 存儲(chǔ)快照文件snapshot的目錄。默認(rèn)情況下,事務(wù)日志也會(huì)存儲(chǔ)在這里。建議同時(shí)配置參數(shù)dataLogDir, 事務(wù)日志的寫性能直接影響zk性能。 |
tickTime | 2000 | ZK中的一個(gè)時(shí)間單元。ZK中所有時(shí)間都是以這個(gè)時(shí)間單元為基礎(chǔ),進(jìn)行整數(shù)倍配置的。例如,session的最小超時(shí)時(shí)間是2*tickTime。 |
dataLogDir | 事務(wù)日志輸出目錄。盡量給事務(wù)日志的輸出配置單獨(dú)的磁盤或是掛載點(diǎn),這將極大的提升ZK性能。 | |
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ù)還是需要限制下的 | |
preAllocSize | 預(yù)先開辟磁盤空間,用于后續(xù)寫入事務(wù)日志。默認(rèn)是64M,每個(gè)事務(wù)日志大小就是64M。如果ZK的快照頻率較大的話,建議適當(dāng)減小這個(gè)參數(shù)。 | |
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)行快照而影響性能) | |
traceFile | 用于記錄所有請(qǐng)求的log,一般調(diào)試過程中可以使用,但是生產(chǎn)環(huán)境不建議使用,會(huì)嚴(yán)重影響性能 | |
maxClientCnxns | 60 | 單個(gè)客戶端與單臺(tái)服務(wù)器之間的連接數(shù)的限制,是ip級(jí)別的,如果設(shè)置為0,那么表明不作任何限制。請(qǐng)注意這個(gè)限制的使用范圍,僅僅是單臺(tái)客戶端機(jī)器與單臺(tái)ZK服務(wù)器之間的連接數(shù)限制,不是針對(duì)指定客戶端IP,也不是ZK集群的連接數(shù)限制,也不是單臺(tái)ZK對(duì)所有客戶端的連接數(shù)限制。 |
clientPortAddress | 對(duì)于多網(wǎng)卡的機(jī)器,可以為每個(gè)IP指定不同的監(jiān)聽端口。默認(rèn)情況是所有IP都監(jiān)聽 clientPort 指定的端口 | |
minSessionTimeoutmaxSessionTimeout | 2 tickTime ~ 20 tickTime | Session超時(shí)時(shí)間限制,如果客戶端設(shè)置的超時(shí)時(shí)間不在這個(gè)范圍,那么會(huì)被強(qiáng)制設(shè)置為大或最小時(shí)間。 |
fsync.warningthresholdms | 1000ms | 事務(wù)日志輸出時(shí),如果調(diào)用fsync方法超過指定的超時(shí)時(shí)間,那么會(huì)在日志中輸出警告信息。 |
autopurge.purgeInterval | 0 | 在上文中已經(jīng)提到,3.4.0及之后版本,ZK提供了自動(dòng)清理事務(wù)日志和快照文件的功能,這個(gè)參數(shù)指定了清理頻率,單位是小時(shí),需要配置一個(gè)1或更大的整數(shù),默認(rèn)是0,表示不開啟自動(dòng)清理功能。 |
autopurge.snapRetainCount | 3 | 這個(gè)參數(shù)和上面的參數(shù)搭配使用,這個(gè)參數(shù)指定了需要保留的文件數(shù)目。 |
initLimit | 10 | 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ù)了。 |
syncLimit | 5 | 在運(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ì)掩蓋一些問題。 |
leaderServes | 默認(rèn)情況下,Leader是會(huì)接受客戶端連接,并提供正常的讀寫服務(wù)。但是,如果你想讓Leader專注于集群中機(jī)器的協(xié)調(diào),那么可以將這個(gè)參數(shù)設(shè)置為no,這樣一來,會(huì)大大提高寫操作的性能。 | |
server.x=[hostname]:nnnnn[:nnnnn] | 這里的x是一個(gè)數(shù)字,與myid文件中的id是一致的。右邊可以配置兩個(gè)端口,第一個(gè)端口用于F和L之間的數(shù)據(jù)同步和其它通信,第二個(gè)端口用于Leader選舉過程中投票通信。 | |
group.x=nnnnn[:nnnnn]weight.x=nnnnn | 對(duì)機(jī)器分組和權(quán)重設(shè)置, http://zookeeper.apache.org/doc/r3.4.3/zookeeperHierarchicalQuorums.html | |
cnxTimeout | 5s | Leader選舉過程中,打開一次連接的超時(shí)時(shí)間 |
zookeeper.DigestAuthenticationProvider.superDigest | https://blog.51cto.com/nileader/930635 | |
skipACL | 對(duì)所有客戶端請(qǐng)求都不作ACL檢查。如果之前節(jié)點(diǎn)上設(shè)置有權(quán)限限制,一旦服務(wù)器上打開這個(gè)開頭,那么也將失效。 | |
forceSync | 這個(gè)參數(shù)確定了是否需要在事務(wù)日志提交的時(shí)候調(diào)用 FileChannel .force來保證數(shù)據(jù)完全同步到磁盤。 | |
jute.maxbuffer | 1M | 每個(gè)節(jié)點(diǎn)大數(shù)據(jù)量,是默認(rèn)是1M。這個(gè)限制必須在server和client端都進(jìn)行設(shè)置才會(huì)生效。 |
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。