7運(yùn)維指南及注意事項(xiàng)zook管理員_第1頁(yè)
7運(yùn)維指南及注意事項(xiàng)zook管理員_第2頁(yè)
7運(yùn)維指南及注意事項(xiàng)zook管理員_第3頁(yè)
7運(yùn)維指南及注意事項(xiàng)zook管理員_第4頁(yè)
7運(yùn)維指南及注意事項(xiàng)zook管理員_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1.部署本章節(jié)主要講述如何部署 ZooKeeper,包括以下三部分的內(nèi)容:1. 系統(tǒng)環(huán)境2. 集群模式的配置3. 單機(jī)模式的配置系統(tǒng)環(huán)境和集群模式配置這兩節(jié)內(nèi)容大體講述了如何部署一個(gè)能夠用于生產(chǎn)環(huán)境的 ZK 集群。如果僅僅是想在單機(jī)上將 ZK 運(yùn)行起來(lái),進(jìn)行一些開(kāi)發(fā)與測(cè)試,那么第三部分或許是你的菜。1.1 系統(tǒng)環(huán)境1.1.1 平臺(tái)支持注:運(yùn)行 client 是指作為客戶端,與 server 進(jìn)行數(shù)據(jù)通信,而運(yùn)行 server 是指將 ZK 作為服務(wù)器部署運(yùn)行。1.1.2 軟件環(huán)境ZooKeeper Server 是一個(gè) Java 語(yǔ)言實(shí)現(xiàn)的分布式協(xié)調(diào)服務(wù)框架,因此需要 6 或更高版本的 JDK

2、 支持。集群的數(shù)量方面,寬泛的講,其實(shí)是任意臺(tái)都可以部署運(yùn)行的,注意,這里并沒(méi)有說(shuō)一定要奇數(shù)臺(tái)哦!通常情況下,建議使用 31.2 集群模式的配置立的 Linux 服務(wù)器的一個(gè) ZK 集群。為了確保ZooKeeper 服務(wù)的穩(wěn)定與可靠性,通常是搭建成一個(gè)ZK 集群來(lái)對(duì)外提供服務(wù)。關(guān)于ZooKeeper,需要明確一個(gè)很重要的特性:集群中只要有過(guò)半的是正常工作的,那么整個(gè)集群對(duì)外就是可用的(本文下面就用過(guò)半存活即可用來(lái)代替這個(gè)特性吧-)。正是基于這個(gè)特性,建議是將 ZK 集群的數(shù)量為奇數(shù)較為合適。為什么選擇奇數(shù)臺(tái),我們可以來(lái)看一下,假如是 4 臺(tái)的 ZK 集群,那,顯然沒(méi)有過(guò)半。集群中有一個(gè)down

3、 掉,因?yàn)槿绻?down 掉 2 臺(tái),那么只剩下 2 臺(tái)么只能夠而如果是 5 臺(tái)的集群,那么就能夠?qū)?2 臺(tái)down 掉的情況進(jìn)行容災(zāi)了。你可以按照以下步驟來(lái)配置一個(gè) ZK,詳細(xì)步驟請(qǐng)查看ZooKeeper 快速搭建:1. 安裝 JDK。相關(guān):2. 設(shè)置 Java heap 大小。避免內(nèi)存與磁盤(pán)空間的交換,能夠大大提升 ZK 的性能,設(shè)置合理的 heap 大小則能有效避免此類(lèi)空間交換的觸發(fā)。在正式發(fā)布上線之前,建議是使用場(chǎng)景進(jìn)行一些測(cè)試,確保正常運(yùn)行后內(nèi)存的使用觸發(fā)此類(lèi)交換。通常在一個(gè)物理內(nèi)存為 4G 的上,最多設(shè)置-Xmx 為 3G。3.安裝 ZooKeeper,相關(guān):4. 配置文件 zoo

4、.cfg。初次使用 zookeeper,按照如下這個(gè)簡(jiǎn)單配置即可:平 臺(tái)運(yùn)行 client運(yùn)行server開(kāi)發(fā)環(huán)境生產(chǎn)環(huán)境GNU/LinuxSun SolarisFreeBSD,對(duì) nio 的支持不好Win32MacOSX本文后續(xù)章節(jié)會(huì)對(duì)這些參數(shù)進(jìn)行詳細(xì)的介紹,這里只是簡(jiǎn)單說(shuō)幾點(diǎn):A. 集群中的每臺(tái)都需要感知整個(gè)集群是由哪幾臺(tái)組成的,在配置文件中,可以按照這樣的格式,每行寫(xiě)一個(gè)配置:server.id=host:port:port. 關(guān)于這個(gè) id,我們稱之為 Server ID,標(biāo)識(shí) host在集群中的序號(hào),在每個(gè) ZK上,我們需要在數(shù)據(jù)目錄(數(shù)據(jù)目錄就是 dataDir 參數(shù)指定的那個(gè)目錄

5、)下創(chuàng)建一個(gè) myid 文件,myid 中就是這個(gè) Server ID 數(shù)字。B. 在 ZooKeeper 的設(shè)計(jì)中,集群中任意一臺(tái)上的 zoo.cfg 文件的內(nèi)容都是一致的。因此最好是用SVN 把這個(gè)文件管理起來(lái),保證每個(gè)都能共享到一份相同的配置。5. 關(guān)于 myid 文件。myid 文件中只有一個(gè)數(shù)字,即一個(gè) Server ID。例如,server.1 的 myid 文件內(nèi)容就是1。注意,請(qǐng)確保每個(gè)server 的 myid 文件中 id 數(shù)字不同,并且和 server.id=host:port:port 中的 id一致。另外,id 的范圍是 1255。6. 至此,配置文件基本 ok,可以

6、嘗試使用如下命令來(lái)啟動(dòng) zookeeper 了:注意,不同的 ZK 版本,依賴的 log4j 和 slf4j 版本也是不一樣的,請(qǐng)看清楚的版本后,再執(zhí)行上面這個(gè)命令。QuorumPeerMain 類(lèi)會(huì)啟動(dòng) ZooKeeper Server,同時(shí),JMX MB 也會(huì)被啟動(dòng),方便管理員在JMX 管理臺(tái)上進(jìn)行 ZK 的。這里有對(duì) ZK JMX 的詳細(xì)介紹:. 另外,完全可以有更簡(jiǎn)便的方式,直啟動(dòng)即可。接使用%ZK_HOME%/bin 中的7. 連接 ZK host 來(lái)檢驗(yàn)部署是否。A. Java 語(yǔ)言的話,可以通過(guò)運(yùn)行這個(gè)命令來(lái)檢測(cè):B. 如果是 C 語(yǔ)言的話,方法如下:1. $ make cli

7、st2. $ make cli_mt1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar org.apache.zookeeper.ZooKeep erMain -server :21811. ./zkServer.sh start1. $ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4

8、j12-1.6.1.jar:lib/l og4j-1.2.15.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMainzoo.cfg1. tickTime=20002. dataDir=/var/lib/zookeeper/3. clientPort=21814. initLimit=55. syncLimit=2 server.1=zoo1:2888:3888 6. server.2=zoo2:2888:38887. server.3=zoo3:2888:3888然后按照的這樣的方式連接 ZK:$ cli_mt

9、:2181。無(wú)論運(yùn)行哪種客戶端,最終都是一個(gè)類(lèi)似于文件系統(tǒng)令行操作。注意:除了上面這種檢測(cè)方法,其實(shí)%ZK_HOME%/bin 也有其它zookeeper 樹(shù)狀結(jié)構(gòu)的文件系統(tǒng)中。,下面這個(gè)命令執(zhí)行后,就進(jìn)入了式,能夠查看 ZK 服務(wù)器當(dāng)前狀態(tài),如下,這個(gè)能夠很好的看出目前這個(gè)另外,還有的運(yùn)行情況了:1.3 單機(jī)模式的配置如果你想安裝一個(gè) ZooKeeper 來(lái)進(jìn)行開(kāi)發(fā)測(cè)試,通??梢允褂脝螜C(jī)模式來(lái)啟動(dòng) ZK。大體的步驟和上面說(shuō)的是一樣了,除了配置文件會(huì)更加簡(jiǎn)單一些。詳細(xì)的配置方法可以查看這里:2. 運(yùn) 維本章節(jié)主要要講述如何更好地運(yùn)維 ZooKeepr,大致包含以下幾部分內(nèi)容:2.1. 部署方案

10、的設(shè)計(jì)2.2. 日常運(yùn)維2.3. Server 的自檢恢復(fù). 日志管理2.6. 數(shù)據(jù)加載出錯(cuò)2.7. 配置參數(shù)詳解2.8. 常用的四字命令2.9. 數(shù)據(jù)文件管理2.10. 注意事項(xiàng)1. $ echo stat|nc localhost 21812. Zookeeper version: 3.4.3-1240972, built on 02/06/2012 10:48 GMT3. Clients:4. /:402930(queued=0,recved=1,sent=0)5.6. Latency min/avg/max: 1/2/37. Received: 48.

11、Sent: 39. Outstanding: 0 10. Zxid: 020000000611. Mode: leader12. Node count: 41. ./zkCli.sh2.1 部署方案的設(shè)計(jì)我們常說(shuō)的 ZooKeeper 能夠提供高可用分布式協(xié)調(diào)服務(wù),是要基于以下兩個(gè)條件:1. 集群中只有少部分的不可用。這里說(shuō)的不可用是指這些或者是本身 down 掉了,或者是因?yàn)闊o(wú)法和集群中其它絕大部分的通信。例如,如果 ZK 集群是跨機(jī)房部署的,網(wǎng)絡(luò),有一部分那么有可能一些所在的機(jī)房被了。2. 正確部署 ZK server,有足夠的磁盤(pán)空間以及良好的網(wǎng)絡(luò)通信環(huán)境。下面將會(huì)從集群和單機(jī)兩個(gè)維度來(lái)

12、說(shuō)明,幫助 zookeeper 管理員盡可能地提高 ZK 集群的可用性。2.1.1 集群維度在上面提到的過(guò)半存活即可用特性中已經(jīng)講到過(guò),整個(gè)集群如果對(duì)外要可用的話,那么集群中必須要有F 臺(tái)機(jī)的過(guò)半的是正常工作并且彼此之間能夠正常通信?;谶@個(gè)特性,那么如果想搭建一個(gè)能夠器 down 掉的集群,那么就要部署一個(gè)由 2xF+1 臺(tái)的 ZK 集群。因此,一個(gè)由 3 臺(tái)ZK 集群,能夠在 down 掉一臺(tái)容災(zāi)。注意,如果是一個(gè) 6 臺(tái)后依然正常工作,而 5 臺(tái)的集群,能夠?qū)膳_(tái)down 掉的情況的 ZK 集群,同樣只能夠 down 掉兩臺(tái),因?yàn)槿绻?down 掉 3就沒(méi)有過(guò)半了?;谶@個(gè),ZK 集群通

13、常設(shè)計(jì)部署成奇數(shù)臺(tái)臺(tái),剩下的。所以,為了盡可能地提高 ZK 集群的可用性,應(yīng)該盡量避免一大批同時(shí) down 掉的風(fēng)險(xiǎn),換句話說(shuō),最好能夠?yàn)槊颗_(tái)配置互相的硬件環(huán)境。舉個(gè)例子,如果大部分的都掛在同一個(gè)交換機(jī)上,那么這個(gè)交換機(jī)一旦出現(xiàn)問(wèn)題,將會(huì)對(duì)整個(gè)集群的服務(wù)造成嚴(yán)重的影響。其它類(lèi)似的還有諸如:供電線路,散熱系統(tǒng)等。其實(shí)在真正的實(shí)踐過(guò)程中,如果條件,通常都建議嘗試跨機(jī)房部署。畢竟多個(gè)機(jī)房同時(shí)發(fā)生故障的機(jī)率還是挺小的。2.1.2 單機(jī)維度對(duì)于 ZK 來(lái)說(shuō),如果在運(yùn)行過(guò)程中,需要和其它應(yīng)用程序來(lái)競(jìng)爭(zhēng)磁盤(pán),CPU,網(wǎng)絡(luò)或是內(nèi)存么整體性能將會(huì)大打折扣。的話,那首先來(lái)看看磁盤(pán)對(duì)于 ZK 性能的影響。客戶端對(duì)

14、ZK 的更新操作都是的,不可回退的,也就是說(shuō),一旦客戶端收到一個(gè)來(lái)自 server 操作的響應(yīng),那么這個(gè)變更就生效了。為做到這點(diǎn),ZK 會(huì)將每次更新操作以事務(wù)日志的形式寫(xiě)入磁盤(pán),寫(xiě)入后才會(huì)給予客戶端響應(yīng)。明白這點(diǎn)之后,你就會(huì)明白磁盤(pán)的吞吐性能對(duì)于 ZK 的影響了,磁盤(pán)寫(xiě)入速度制約著 ZK 每個(gè)更新操作的響應(yīng)。為了盡量減少 ZK 在讀寫(xiě)磁盤(pán)上的性能損失,不仿試試下面說(shuō)的幾點(diǎn):A、使用單獨(dú)的磁盤(pán)作為事務(wù)日志的輸出(比如我們這里的 ZK 集群,使用單獨(dú)的掛載點(diǎn)用于事務(wù)日志的輸出)。事務(wù)日志的寫(xiě)性能確實(shí)對(duì) ZK 性能,尤其是更新操作的性能影響很大,所以想辦法搞到一個(gè)單獨(dú)的磁盤(pán)吧!ZK 的事務(wù)日志輸出是

15、一個(gè)順序?qū)懳募倪^(guò)程,本身性能是很高的,所以盡量保證不要和其它隨機(jī)寫(xiě)的應(yīng)用程序共享一塊磁盤(pán),盡量避免對(duì)磁盤(pán)的競(jìng)爭(zhēng)。B、盡量避免內(nèi)存與磁盤(pán)空間的交換。如果希望 ZK 能夠提供完全實(shí)時(shí)的服務(wù)的話,那么基本是不操作系統(tǒng)觸發(fā)此類(lèi) swap 的。因此在分配 JVM 堆大小的時(shí)候一定要非常章節(jié)中有講到。2.2 日常運(yùn)維,具體在本文最后的注意事項(xiàng)對(duì) zookeeper 運(yùn)維是一個(gè)長(zhǎng)期積累經(jīng)驗(yàn)的過(guò)程,希望以下幾點(diǎn)對(duì)廣大 ZK 運(yùn)維有一定的幫助:2.2.1數(shù)據(jù)目錄上文中提到 dataDir 目錄指定了 ZK 的數(shù)據(jù)目錄,用于ZK 的快照文件(snapshot)。另外,默認(rèn)情況下,ZK 的事務(wù)日志也會(huì)在這個(gè)目錄中

16、。在完成若干次事務(wù)日志之后(在 ZK 中,凡是對(duì)數(shù)據(jù)有更新的操作,比如創(chuàng)建節(jié)點(diǎn),刪除節(jié)點(diǎn)或是對(duì)節(jié)點(diǎn)數(shù)據(jù)內(nèi)容進(jìn)行更新等,都會(huì) 事務(wù)日志),ZK 會(huì)觸發(fā)一次快照(snapshot),將當(dāng)前 server 上所有節(jié)點(diǎn)的狀態(tài)以快照文件的形式 dump 到磁盤(pán)上去,即 snapshot 文件。這里的若干次事務(wù)日志是可以配置的,默認(rèn)是 100000,具體參看下文中關(guān)于配置參數(shù)snapCount的介紹??紤]到 ZK 運(yùn)行環(huán)境的差異性,以及對(duì)于這些歷史文件,不同的管理員可能有的用途(例如作為數(shù)據(jù)備份),因此默認(rèn) ZK 是自動(dòng)快照和事務(wù)日志,需要交給管理員來(lái)處理。這里是我們用的清理方法,保留最新的 66 個(gè)文件

17、,將它寫(xiě)到 crontab 中,每天凌晨 2 點(diǎn)觸發(fā)一次:其實(shí),僅管 ZK 沒(méi)有自動(dòng)幫我們歷史文件,但是它的還是提供了一個(gè)叫 PurgeTxnLog 的 工具類(lèi),實(shí)現(xiàn)了一種簡(jiǎn)單的歷史文件策略,可以在這里看一下他的使用方法:簡(jiǎn)單使用如下:1. java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log 4j-1.2.15.jar:conf org.apache.zookeeper.server.PurgeTxnLog -n 1. #!/bin/bash 2.3. #snapshot file

18、 dir4. dataDir=/home/yinshi.nc/test/zk data/version-25. #tran log dir6. dataLogDir=/home/yinshi.nc/test/zk log/version-27. #zk log dir8. logDir=/home/yinshi.nc/test/logs9. #Leave 66 files10. count=6611. count=$count+112. ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f13. ls -t $dataDir/snaps

19、hot.* | tail -n +$count | xargs rm -f14. ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f 15.16. #find /home/yinshi.nc/taokeeper/zk data/version-2 -name “snap*” -mtime +1 | xargs rm -f17. #find /home/yinshi.nc/taokeeper/zk_logs/version-2 -name “l(fā)og*” -mtime +1 | xargs r m -f18. #find /h

20、ome/yinshi.nc/taokeeper/logs/ -name “zookeeper.log.*” -mtime +1 | xargs rmf最后一個(gè)參數(shù)表示希望保留的歷史文件個(gè)數(shù),注意,count 必須是大于 3 的整數(shù)??梢园堰@句命令寫(xiě)成一個(gè)定時(shí)任務(wù),以便每天定時(shí)執(zhí)行。注意: 從 3.4.0 版本開(kāi)始, zookeeper 提供了歷史文件的功能了,相關(guān)的配置參數(shù)是autopurge.snapRetainCount 和 autopurge.purgeInterval,在本文后面會(huì)具體說(shuō)明。關(guān)于 zookeeper的日志,可以閱讀這個(gè)文章ZooKeeper 日志2.2.2 ZK 程序日

21、志這里說(shuō)兩點(diǎn),ZK 默認(rèn)是沒(méi)有向 ROLLINGFILE 文件輸出程序運(yùn)行時(shí)日志的,需要我們。在conf/perties 中配置日志路徑。另外,沒(méi)有特殊要求的話,日志級(jí)別設(shè)置為 INFO 或以上,我曾經(jīng)測(cè)試過(guò),日志級(jí)別設(shè)置為 DEBUG 的話,性能影響很大!2.3 Server 的自檢恢復(fù)ZK 運(yùn)行過(guò)程中,如果出現(xiàn)一些無(wú)法處理的異常,會(huì)直接進(jìn)程,也就是所謂的快速失?。╢ail fast)模式。在上文中有提到,過(guò)半存活即可用的特性使得集群中少數(shù)down 掉后,整個(gè)集群還是可以對(duì)外正常提供服務(wù)的。另外,這些 down 掉的重啟之后,能夠自動(dòng)加入到集群中,并且自動(dòng)和集群中其它機(jī)器進(jìn)

22、行狀態(tài)同步(主要就是從 Leader 那里同步最新的數(shù)據(jù)),從而達(dá)到自我恢復(fù)的目的。因此,我們很容易就可以想到,是否可以借助一些工具來(lái)自動(dòng)完成定的,這里推薦兩個(gè)工具: Daemontools(的狀態(tài)檢測(cè)與重啟工作?;卮鹗强? 和 SMF),能夠幫助你ZK 進(jìn)程,一旦進(jìn)程能夠重新加入到集群中去(后,能夠自動(dòng)重啟進(jìn)程,從而使 down 掉的2.4有幾種方法:1、 ZK 提供一些簡(jiǎn)單但是功能強(qiáng)大的 4 字命令,通過(guò)對(duì)這些 4 字命令的返回內(nèi)容進(jìn)行不少關(guān)于 ZK 運(yùn)行時(shí)的信息。2、用 jmx 也能夠獲取一些運(yùn)行時(shí)信息,詳細(xì)可以查看這里:,可以獲取3、淘寶網(wǎng)已經(jīng)實(shí)現(xiàn)的一個(gè) ZooKeeperTaoKee

23、per,已開(kāi)源,在這里:,主要功能如下:A、CPU/MEM/LOAD 的B、ZK 日志目錄所在磁盤(pán)空間C、單機(jī)連接數(shù)的峰值D、單機(jī) Watcher 數(shù)的峰值E、節(jié)點(diǎn)自檢F、ZK 運(yùn)行時(shí)信息展示2.5 日志管理ZK 使用 log4j 作為日志系統(tǒng),conf 目錄中有一份默認(rèn)的 log4j 配置文件,注意,這個(gè)配置文件中還沒(méi)有開(kāi)啟 ROLLINGFILE 文件輸出,配置下即可。其它關(guān)于 log4j 的詳細(xì)介紹,可以移步到 log4j 的官網(wǎng):2.6 加載數(shù)據(jù)出錯(cuò)ZK 在啟動(dòng)的過(guò)程中,首先會(huì)根據(jù)事務(wù)日志中的事務(wù)日志,從本地磁盤(pán)加載最后一次提交時(shí)候的快照數(shù)據(jù),如果事務(wù)日志出錯(cuò)或是其它問(wèn)題(通常在日志中

24、可以看到一些 IO 異常),將導(dǎo)致 server 將無(wú)法啟動(dòng)。碰到類(lèi)似于這種數(shù)據(jù)文件出錯(cuò)導(dǎo)致無(wú)法啟動(dòng)服務(wù)器的情況,一般按照如下順序來(lái)恢復(fù):1、確認(rèn)集群中其它是否正常工作,方法是使用stat這個(gè)命令來(lái)檢查:echo stat|nc ip 21812、如果確認(rèn)其它是正常工作的(這里要說(shuō)明下,所謂正常工作還是指集群中有過(guò)半可用),那么可以開(kāi)始刪除本機(jī)的一些數(shù)據(jù)了,刪除$dataDir/version-2 和$dataLogDir/version-2 兩個(gè)目錄下的所有文件。重啟 server。重啟之后,這個(gè)就會(huì)從 Leader 那里同步到最新數(shù)據(jù),然后重新加入到集群中提供服務(wù)。2.7 配置參數(shù)詳解(主

25、要是%ZOOKEEPER_HOME%/conf/zoo.cfg 文件)參數(shù)名說(shuō)明clientPort客戶端連接 server 的端口,即對(duì)外服務(wù)端口,一般設(shè)置為 2181 吧。dataDir快照文件snapshot 的目錄。默認(rèn)情況下,事務(wù)日志也會(huì)在這里。建議同時(shí)配置參數(shù) dataLogDir, 事務(wù)日志的寫(xiě)性能直接影響zk 性能。tickTimeZK 中的一個(gè)時(shí)間單元。ZK 中所有時(shí)間都是以這個(gè)時(shí)間單元為基礎(chǔ),進(jìn)行整數(shù)倍配置的。例如,session 的最小超時(shí)時(shí)間是 2*tickTime。dataLogDir事務(wù)日志輸出目錄。盡量給事務(wù)日志的輸出配置單獨(dú)的磁盤(pán)或是掛載點(diǎn),這將極大的提升 ZK

26、 性能。 (No Java system property)globalOutstandingLimit最大請(qǐng)求堆積數(shù)。默認(rèn)是 1000。ZK 運(yùn)行的時(shí)候, 盡管 server 已經(jīng)沒(méi)有空閑來(lái)處理的客戶端請(qǐng)求了,但是還是客戶端將請(qǐng)求提交到服務(wù)器上來(lái),以提高吞吐性能。當(dāng)然,為了防止 Server 內(nèi)存溢出,這個(gè)請(qǐng)求堆積數(shù)還是需要限制下的。 (Java system property:?zookeeper.globalOutstandingLimit.)preAllocSize預(yù)先開(kāi)辟磁盤(pán)空間,用于后續(xù)寫(xiě)入事務(wù)日志。默認(rèn)是 64M,每個(gè)事務(wù)日志大小就是64M。如果 ZK 的快照頻率較大的話,建議適

27、當(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)試過(guò)程中可以使用,但是生產(chǎn)環(huán)境不建議使用,會(huì)嚴(yán)重影響性能。(

28、Java system property:requestTraceFile)maxClientCnxns單個(gè)客戶端與單臺(tái)服務(wù)器之間的連接數(shù)的限制,是 ip 級(jí)別的,默認(rèn)是 60,如果設(shè)置為 0,那么表明不作任何限制。請(qǐng)注意這個(gè)限制的使用范圍,僅僅是單臺(tái)客戶端與單臺(tái) ZK 服務(wù)器之間的連接數(shù)限制,不是指定客戶端 IP,也不是 ZK 集群的連接數(shù)限制,也不是單臺(tái) ZK 對(duì)所有客戶端的連接數(shù)限制。指定客戶端 IP 的限制策略這里有一個(gè) patch,可以嘗試一下:(No Java system property)clientPortAddress對(duì)于多網(wǎng)卡的,可以為每個(gè) IP 指定不同的端口。默認(rèn)情況

29、是所有 IP 都監(jiān)聽(tīng) clientPort 指定的端口。New in 3.3.0minSessionTimeoutmaxSessionTimeoutSession 超時(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.0fsync.warningthresholdms事務(wù)日志輸出時(shí),如果調(diào)用 fsync 方法超過(guò)指定的超時(shí)時(shí)間,那么會(huì)在日志中輸出警告信息。默認(rèn)是 1000ms。(Java system property:fsync.warni

30、ngthresholdms) New in 3.3.4autopurge.purgeInterval在上文中已經(jīng)提到,3.4.0 及之后版本,ZK 提供了自動(dòng)事務(wù)日志和快照文件的功能,這個(gè)參數(shù)指定了頻率,是小時(shí),需要配置一個(gè) 1 或更大的整數(shù),默認(rèn)是 0,表示不開(kāi)啟自動(dòng)功能。(No Java system property) New in 3.4.0autopurge.snapRetainCount這個(gè)參數(shù)和上面的參數(shù)搭配使用,這個(gè)參數(shù)指定了需要保留的文件數(shù)目。默認(rèn)是保留3 個(gè)。(No Java system property) New in 3.4.0electionAlg在之前的版本中,

31、這個(gè)參數(shù)配置是我們選擇 leader算法,但是由于在以后的版本中,只會(huì)留下一種TCP-based version of fast leader election算法,所以這個(gè)參數(shù)目前看來(lái)沒(méi)有用了,這里也不詳細(xì)展開(kāi)說(shuō)了。(No Java system property)nitLimitFollower 在啟動(dòng)過(guò)程中,會(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),因此

32、在這種情況下,有必要適當(dāng)調(diào)大這個(gè)參數(shù)了。(No Java system property)syncLimit在運(yùn)行過(guò)程中,Leader 負(fù)責(zé)與 ZK 集群中所有進(jìn)行通信,例如通過(guò)一些心跳檢測(cè)機(jī)制,來(lái)檢測(cè)的存活狀態(tài)。如果L 發(fā)出心跳包在syncLimit 之后,還沒(méi)有從 F 那里收到響應(yīng),那么就認(rèn)為這個(gè)F 已經(jīng)不了。注意:不要把這個(gè)參數(shù)設(shè)置得過(guò)大,否則可能會(huì)掩蓋一些問(wèn)題。(No Java system property)eaderServes默認(rèn)情況下,Leader 是會(huì)接受客戶端連接,并提供正常的讀寫(xiě)服務(wù)。但是,如果你想讓Leader 專(zhuān)注于集群中的協(xié)調(diào),那么可以將這個(gè)參數(shù)設(shè)置為 no,這樣一

33、來(lái)會(huì)大大提高寫(xiě)操作的性能。(Java system property: zookeeper.leaderServes)。server.x=hostname:nnnnn:nnnnn這里的 x 是一個(gè)數(shù)字,與myid 文件中的 id 是一致的。右邊可以配置兩個(gè)端口,第一個(gè)端口用于F 和L 之間的數(shù)據(jù)同步和其它通信,第二個(gè)端口用于 Leader過(guò)程中投票通信。 (No Java system property)group x=nnnnn:nnnnnweight.x=nnnnn對(duì)分組和權(quán)重設(shè)置,可以 參見(jiàn)這里(No Java system property)cnxTimeoutLeader過(guò)程中,打開(kāi)

34、一次連接的超時(shí)時(shí)間,默認(rèn)是 5s。(Java system property: xTimeout)zookeeper.DigestAuthenticationProvider .superDigestZK 權(quán)限設(shè)置相關(guān),具體參見(jiàn)使用 super對(duì)限的節(jié)點(diǎn)進(jìn)行操作 和 ZooKeeper 權(quán)限skipACL對(duì)所有客戶端請(qǐng)求都不作ACL 檢查。如果之前節(jié)點(diǎn)上設(shè)置限限制,一旦服務(wù)器上打開(kāi)這個(gè)開(kāi)頭,那么也將失效。(Java system property:zookeeper.skipACL)forceSync這個(gè)參數(shù)確定了是否需要在事務(wù)日志提交的時(shí)候調(diào)用FileChannel.force 來(lái)保證數(shù)據(jù)完

35、全同步到磁盤(pán)。(Java system property:zookeeper.forceSync)jute.maxbuffer2.8 常用的四字命令參數(shù)名說(shuō)明conf輸出server 的詳細(xì)配置信息。New in 3.3.0cons輸出指定server 上所有客戶端連接的詳細(xì)信息,包括客戶端 IP,會(huì)話 ID 等。 New in 3.3.0 類(lèi)似于這樣的信息:crst功能性命令。重置所有連接的統(tǒng)計(jì)信息。New in 3.3.0dump這個(gè)命令Leader 執(zhí)行,用于輸出所有等待隊(duì)列中的會(huì)話和臨時(shí)節(jié)點(diǎn)的信息。envi用于輸出server 的環(huán)境變量。包括操作系統(tǒng)環(huán)境和 Java 環(huán)境。ruok用

36、于測(cè)試server 是否處于無(wú)錯(cuò)狀態(tài)。如果正常,則返回imok,否則沒(méi)有任何響應(yīng)。 注意:ruok 不是一個(gè)特別有用令,它不能反映一個(gè)serverstat輸出server 簡(jiǎn)要狀態(tài)和連接的客戶端信息。srvr和 stat 類(lèi)似,New in 3.3.01. $echo stat|nc localhost 21812. Zookeeper version: 3.3.5-1301095, built on 03/15/2012 19:48 GM3. Clients:1. $echo cons|nc localhost 2181 2. /:435271(queued=0,recved=

37、152802, 3. sent=152806,sid=0x2389e662b98c424,lop=PING, 4. est=1350385542196,to=6000,5. lcxid=0114,lzxid=0xffffffffffffffff,lresp=1350690663308,llat6. 1. $echo conf|nc localhost 21812. clientPort=21813. dataDir=/home/test/taokeeper/zk_data/version-24. dataLogDir=/test/admin/taokeeper/zk_log/version-2

38、5. tickTime=20006. maxClientCnxns=10007. minSessionTimeout=40008. maxSessionTimeout=400009. serverId=210. initLimit=1011. syncLimit=512. electionAlg=313. electionPort=388814. quorumPort=288815. peerType=0每個(gè)節(jié)點(diǎn)最大數(shù)據(jù)量,是默認(rèn)是 1M。這個(gè)限制必須在 server 和 client 端都進(jìn)行設(shè)置才會(huì)生效。(Java system property:jute.maxbuffer)srst重置

39、server 的統(tǒng)計(jì)信息。wchs列出所有 watcher 信息概要信息,數(shù)量等:New in 3.3.0wchc列出所有 watcher 信息,以 watcher 的session 為歸組單元排列,列出該會(huì)話訂閱了哪些path:New in 3.3.0wchp列出所有 watcher 信息,以 watcher 的path 為歸組單元排列,列出該path 被哪些會(huì)話訂閱著:New in 3.3.01. $echo wchp|nc localhost 21814. /:591791(queued=0,recved=44845,sent=44845)5.6. Latency min

40、/avg/max: 0/0/1036 7. Received: 22746022388. Sent: 22777956209. Outstanding: 010. Zxid: 0xa1b3503dd11. Mode: leader12. Node count: 374731. $echo wchc|nc localhost 2181 2. 0x2389e662b97917f3. /mytest/test/path1/node1 4. 0x3389e65c83cd7905. /mytest/test/path1/node2 6. 0x1389e65c7ef63137. /mytest/test/

41、path1/node38. /mytest/test/path1/node11. $echo wchs|nc localhost 21812. 3890 connections watching 537 paths3. Total watches:69091. $echo srvr|nc localhost 21812. Zookeeper version: 3.3.5-1301095, built on 03/15/2012 19:48 GM3. Latency min/avg/max: 0/0/980 4. Received: 2592698547 5. Sent: 25977139746

42、. Outstanding: 07. Zxid: 0xa1b356b5b8. Mode: follower9. Node count: 374732.9 數(shù)據(jù)文件管理默認(rèn)情況下,ZK 的數(shù)據(jù)文件和事務(wù)日志是保存在同一個(gè)目錄中,建議是將事務(wù)日志2.9.1 數(shù)據(jù)目錄ZK 的數(shù)據(jù)目錄包含兩類(lèi)文件:A、myid 這個(gè)文件只包含一個(gè)數(shù)字,和 server id 對(duì)應(yīng)。B、snapshot. - 按 zxid 先后順序的生成的數(shù)據(jù)快照。到單獨(dú)的磁盤(pán)上。集群中的每臺(tái) ZK server 都會(huì)有一個(gè)用于惟一標(biāo)識(shí)的 id,有兩個(gè)地方會(huì)使用到這個(gè) id:myid 文件和zoo.cfg 文件中。myid 文件在 d

43、ataDir 目錄中,指定了當(dāng)前 server 的 server id。在 zoo.cfg 文件中,注意,wchc 和 wchp 這兩個(gè)命令執(zhí)行的輸出結(jié)果都是session 的,對(duì)于運(yùn)維來(lái)說(shuō)可視化效果并不理想,可以嘗試將 cons 命令執(zhí)行輸出的信mntr輸出一些 ZK 運(yùn)行時(shí)信息,通過(guò)對(duì)這些返回結(jié)果的,可以達(dá)到的效果。New in 3.4.02. /mytest/test/path1/node 3. 0x1389e65c7eea4f5 4. 0x1389e65c7ee2f685. /mytest/test/path1/node2 6. 0x2389e662b967c297. /mytest/

44、test/path1/node3 8. 0x3389e65c83dd2e0 9. 0x1389e65c7f0c37c10.0x1389e65c7f0c3641. $ echo mntr | nc localhost 21852. zk_version 3.4.03. zk_avg_latency 04. zk_max_latency 05. zk_min_latency 06. zk packets received 707. zk_packets_sent 698. zk_outstanding_requests 09. zk_server_state leader10. zk_znode_count 411. zk watch count 012. zk_ephemerals_count 013. zk_approximate_data_size 2714. zk_followers 4 only exposed by the Leader15. zk_synced_followers 4 only exposed by the Leader16. zk pending syncs 0 on

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論