安裝環(huán)境:
創(chuàng)新互聯(lián)建站是一家專(zhuān)業(yè)提供樂(lè)都企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為樂(lè)都眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
CentOS 7 內(nèi)存1GB
JDK版本:1.8.0_112
為JDK配置如下環(huán)境變量:
編輯/etc/profile.d/jdk.sh
#!/bin/bash JAVA_HOME=/usr/local/jdk1.8.0_112 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
之后運(yùn)行下面的命令:
注意:在生產(chǎn)環(huán)境中為了避免內(nèi)存頻繁的換進(jìn)換出,建議將JAVA堆大小設(shè)置的更大一點(diǎn),這取決于你的物理內(nèi)存大小。
關(guān)于集群可用:如果能忍受N臺(tái)ZK宕機(jī),那么你的集群就需要有2N+1臺(tái)ZK服務(wù)器。3臺(tái)組成的集群則允許1臺(tái)失敗,5臺(tái)組成的集群則允許2臺(tái)失敗。集群中ZK數(shù)量要保持奇數(shù),當(dāng)然偶數(shù)也可以,只是3臺(tái)組成的ZK和4臺(tái)組成的允許失敗的臺(tái)數(shù)是一樣的。
單機(jī)安裝
下載穩(wěn)定版zookeeper,我這里使用的是3.4.11,我把它解壓在了/usr/local下面,其實(shí)任何路徑都可以
配置ZK的環(huán)境變量,編輯/etc/profile.d/zk.sh文件
#!/bin/bash ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11 export PATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$PATH
執(zhí)行下面的命令
準(zhǔn)備配置文件
在程序目錄中的conf目錄中創(chuàng)建zoo.cfg配置文件,zoo_sample.cfg是模板文件,直接復(fù)制一下修改名稱(chēng),然后再修改里面的內(nèi)容。
這個(gè)配置文件可以設(shè)置很多參數(shù),默認(rèn)只有最基本的。其他參數(shù)后面再說(shuō)
參數(shù) | 說(shuō)明 |
tickTime | 基本事件單元,單位毫秒。用來(lái)設(shè)置心跳,最小的session過(guò)期時(shí)間為tickTime的兩倍,ZK中的其他時(shí)間都是以這個(gè)為倍數(shù)的。 |
dataDir | 存儲(chǔ)內(nèi)存中數(shù)據(jù)庫(kù)快照的位置,默認(rèn)是/tmp/zookeeper,這個(gè)只是例子,我們修改為ZK家目錄下的data,這個(gè)data其實(shí)也沒(méi)有,我們需要手動(dòng)建立。快照文件并不是實(shí)時(shí)的,運(yùn)行一段時(shí)間才會(huì)有。 |
dataLogDir | 日志路徑,也就是事務(wù)日志。我們知道對(duì)ZK的讀和寫(xiě)都是在內(nèi)存中完成,所以速度非常快,但是如果停止ZK再啟動(dòng)數(shù)據(jù)還是需要保證的,所以就會(huì)有這樣一個(gè)路徑用來(lái)保存事務(wù)日志,當(dāng)ZK再次啟動(dòng)時(shí)加載到內(nèi)存重演過(guò)程來(lái)恢復(fù)數(shù)據(jù)。這個(gè)目錄會(huì)有一個(gè)叫做version-2的目錄,這個(gè)目錄確定了當(dāng)前事務(wù)日志的版本號(hào),當(dāng)下次某個(gè)版本的ZK對(duì)其進(jìn)行修改時(shí),版本號(hào)發(fā)生變化。日志文件大小為64M,如果數(shù)據(jù)比較多就會(huì)有多個(gè)這樣大小的文件。 建議將事物日志保存到單獨(dú)的磁盤(pán)而且是高速磁盤(pán)。因?yàn)闉榱艘恢滦裕琙K對(duì)于客戶端的寫(xiě)入請(qǐng)求在返回之前就要把本次操作寫(xiě)入到事物日志中。logDir |
logDir | zookeeper服務(wù)的日志路徑 |
clientPort | 監(jiān)聽(tīng)客戶端連接的端口 |
修改一下zkEnv.sh腳本,zk啟動(dòng)后會(huì)有一個(gè)zookeeper.out文件,這個(gè)文件隨著時(shí)間會(huì)越來(lái)越大,默認(rèn)會(huì)在執(zhí)行zkServer.sh的位置生成,所以我們要修改為指定路徑。
配置好上面的設(shè)置就可以啟動(dòng)了。
測(cè)試連接
nc是網(wǎng)絡(luò)命令,全稱(chēng)是netcat,其實(shí)使用telnet也一樣
ZK客戶端
zkCli.sh -server IP:PORT
也可以不輸入IP和端口,默認(rèn)就會(huì)連接127.0.0.1:2181
查看事務(wù)日志:
java -classpath /usr/local/zookeeper-3.4.11/zookeeper-3.4.11.jar:../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.1
集群安裝
集群配置和單機(jī)安裝一樣,只是配置文件內(nèi)容會(huì)多一部分內(nèi)容,內(nèi)容如下:
"server.id=host:port:port" 表示不同ZK服務(wù)器的配置。id表示不同服務(wù)器,在服務(wù)器配置文件的dataDir所設(shè)置的目錄里需要手動(dòng)創(chuàng)建一個(gè)叫做myid的文件,這個(gè)文件只有一行內(nèi)容,標(biāo)識(shí)自己的身份也就是自己的ID值,該值范圍可以是1-255之間。
echo 1 > /usr/local/zookeeper3.4.11/data/myid
host:主機(jī)名
第一個(gè)port:集群中從服務(wù)器(follower)連接到主服務(wù)器(leader)的端口,也就是作為leader時(shí)使用的,其他從服務(wù)器都連接到主服務(wù)器的這個(gè)端口
第二個(gè)port:進(jìn)行l(wèi)eader選舉時(shí)使用的端口
集群?jiǎn)?dòng)和單機(jī)啟動(dòng)一樣,使用同樣的命令,需要注意的是集群不可用那么你將無(wú)法連接到ZK服務(wù)器,也就是說(shuō)3臺(tái)你只啟動(dòng)1臺(tái)是無(wú)法Telnet到ZK的,至少你要啟動(dòng)2臺(tái)才行。
zkServer.sh start # 啟動(dòng)集群有可能需要運(yùn)行下面命令清理防火墻規(guī)則,有可能某種安全機(jī)制影響集群?jiǎn)?dòng),主要是選舉過(guò)程 iptables -F
集群?jiǎn)?dòng)日志說(shuō)明
Srv01的日志
如果對(duì)端沒(méi)有準(zhǔn)備好它會(huì)一直反復(fù)這樣的提示
Srv02的日志
Srv03的日志
服務(wù)器狀態(tài)
狀態(tài) | 說(shuō)明 |
LOOKING | 尋找Leader,當(dāng)服務(wù)器出現(xiàn)這個(gè)狀態(tài)時(shí),它會(huì)認(rèn)為當(dāng)前集群沒(méi)有Leader,因此需要進(jìn)入選舉 |
FOLLOWING | 跟隨者狀態(tài),表示當(dāng)前是Follower角色 |
LEADING | 領(lǐng)導(dǎo)者狀態(tài),表示當(dāng)前為L(zhǎng)eader角色 |
OBSERVING | 觀察者狀態(tài),表示當(dāng)前服務(wù)器是Observer角色 |
如下為選舉信息,其中 (my state) 為當(dāng)前服務(wù)器的狀態(tài),最后一次表示它的最終狀態(tài),通過(guò)看這個(gè)前后變化可以知道該服務(wù)器在狀態(tài)變化。
配置Zookeeper
基本配置:運(yùn)行ZK最少需要配置的內(nèi)容 | |
clientPort | 監(jiān)聽(tīng)客戶端連接的端口 |
dataDir | 數(shù)據(jù)庫(kù)快照存儲(chǔ)位置 |
tickTime | 客戶單到服務(wù)器之間的心跳頻率,也叫做基本時(shí)間單元,單位毫秒,客戶端連接ZK之后彼此要發(fā)送心跳信息,這個(gè)發(fā)送頻率就是這個(gè)時(shí)間。配置中所有用到時(shí)間地方都會(huì)以這個(gè)為基礎(chǔ),也就是它的倍數(shù),或者可以理解為能夠容忍多少個(gè)心跳時(shí)間。 |
高級(jí)配置 | |
dataLogDir | 事務(wù)日志保存路徑,生產(chǎn)環(huán)境中建議把日志路徑和快照路徑分別保存在獨(dú)立磁盤(pán)上,避免出現(xiàn)磁盤(pán)IO繁忙從而導(dǎo)致性能下降,必要時(shí)也可以關(guān)閉日志功能 |
maxClientCnxns | 限制連接到ZK上的客戶端數(shù)量,并且限制并發(fā)連接數(shù)量,它通過(guò)IP來(lái)區(qū)分不同客戶端。值為0表示不做任何限制。注意這里的限制是針對(duì)單臺(tái)客戶端到服務(wù)器的,并不是控制所有客戶端連接的。默認(rèn)60. |
minSessionTimeout | 最小會(huì)話超時(shí)時(shí)間,默認(rèn)為tickTime的2倍。不建議把這個(gè)值設(shè)置的比tickTime小。客戶端連接到ZK時(shí)如果在這個(gè)最小時(shí)間內(nèi)沒(méi)有和ZK聯(lián)系則標(biāo)記為超時(shí),也就是說(shuō)會(huì)斷開(kāi)。 |
maxSessionTimeout | 最大會(huì)話超時(shí)時(shí)間,默認(rèn)為20倍的最小會(huì)話超時(shí)時(shí)間。不建議把這個(gè)值設(shè)置的比tickTime小。客戶端連接到ZK時(shí)如果在這個(gè)最大時(shí)間內(nèi)沒(méi)有和ZK聯(lián)系則標(biāo)記為超時(shí)。所以上面的參數(shù)和這個(gè)參數(shù)組成了一個(gè)時(shí)間范圍,也就是客戶端連接ZK時(shí)如果在這個(gè)時(shí)間范圍內(nèi)沒(méi)有成功連接則會(huì)標(biāo)記為超時(shí)。如果客戶端設(shè)置的時(shí)間范圍不在這個(gè)服務(wù)器設(shè)置的范圍內(nèi),則會(huì)被強(qiáng)制應(yīng)用服務(wù)器設(shè)置的范圍。 |
autopurge.snapRetainCount | 自動(dòng)清理日志,該參數(shù)設(shè)置保留多少個(gè)快照文件和對(duì)應(yīng)的事務(wù)日志文件,默認(rèn)為3,如果你設(shè)置的小于3則會(huì)被自動(dòng)的調(diào)整為3. |
autopurge.purgeInterval | 自動(dòng)清理日志,該參數(shù)設(shè)置自動(dòng)清理頻率,上面的參數(shù)配套使用。客戶端在和ZK服務(wù)器交互中服務(wù)器會(huì)產(chǎn)生很多日志,而且ZK會(huì)將內(nèi)存中的數(shù)據(jù)作為快照保存起來(lái),而且這些數(shù)據(jù)不會(huì)自動(dòng)刪除,那么磁盤(pán)空間就會(huì)被占用,可以設(shè)置這2個(gè)參數(shù)來(lái)自動(dòng)清理,不過(guò)如果ZK服務(wù)器比較繁忙而且趕上刪除日志任務(wù)就會(huì)影響性能,所以一般不設(shè)置這個(gè)自動(dòng)清理,而是在ZK訪問(wèn)量少的時(shí)候通過(guò)Linux的定時(shí)任務(wù)來(lái)處理。0表示不開(kāi)啟自動(dòng)清理功能。 |
globalOutstandingLimit | ZK的最大請(qǐng)求堆積數(shù),客戶端請(qǐng)求比較多,為了防止客戶端資源過(guò)度消耗,服務(wù)器必須限制同時(shí)處理的請(qǐng)求數(shù)量。 |
preAllocSize | 用于配置ZK事務(wù)日志預(yù)先分配的空間,默認(rèn)是64M |
snapCount | 用于配置相鄰兩次快照之間的事物日志次數(shù),默認(rèn)是10萬(wàn)。也就是10萬(wàn)條事務(wù)之后做一次快照同時(shí)結(jié)轉(zhuǎn)事務(wù)日志。 |
clientPortAddres | 這個(gè)參數(shù)針對(duì)多網(wǎng)卡的ZK服務(wù)器,允許為每個(gè)IP地址指定不同的監(jiān)聽(tīng)端口。 |
fsync.warningthresholdms | 用于設(shè)置ZK服務(wù)器事物日志同步操作時(shí)消耗時(shí)間的報(bào)警閾值,如果實(shí)際消耗時(shí)長(zhǎng)超過(guò)這個(gè)時(shí)間日志就會(huì)記錄。 |
electionAlg | 用于配置Leader選舉算法,目前只有一種選舉算法,所以不用配置。 |
cnxTimeout | 用于Leader選舉時(shí)各個(gè)服務(wù)器之間進(jìn)行的TCP連接創(chuàng)建超時(shí)時(shí)間,默認(rèn)為5. |
forceSync | 這個(gè)參數(shù)用于配置ZK服務(wù)器是否在事物提交時(shí)是否強(qiáng)制寫(xiě)入磁盤(pán)(LINUX的延遲寫(xiě)入),默認(rèn)是YES。 |
jute.maxbuffer | 用于配置單個(gè)數(shù)據(jù)節(jié)點(diǎn)上最大數(shù)量,默認(rèn)是1MB。通常不需要改動(dòng)該參數(shù),但是因?yàn)閆ookeeper不適合存放太多數(shù)據(jù)所以有時(shí)候需要把值改小。 |
skipACL | 是否跳過(guò)ACL檢查,默認(rèn)是no,也就是會(huì)對(duì)所有客戶端連接進(jìn)行acl檢查。 |
集群配置 | |
initLimit | 表示允許從服務(wù)器(相對(duì)于leader來(lái)說(shuō)的客戶端)連接到leader并完成數(shù)據(jù)同步的時(shí)間,它是以tickTime的倍數(shù)來(lái)表示的,也就是從服務(wù)器與主服務(wù)器完成初始化連接和數(shù)據(jù)同步是能夠容忍多少個(gè)心跳時(shí)間,如果超過(guò)這個(gè)時(shí)間不能完成初始化連接的建立則表示連接失敗。默認(rèn)是10.如果你的數(shù)據(jù)量過(guò)大而且從服務(wù)器數(shù)量也多那么這個(gè)值可以設(shè)置大一點(diǎn)。 |
syncLimit | 表示主服務(wù)器(leader)和從服務(wù)器(follower)之間發(fā)送心跳請(qǐng)求和應(yīng)答的頻率,如果在這個(gè)時(shí)間內(nèi)從服務(wù)器不能與主服務(wù)器通信,則表示該從服務(wù)器失敗。默認(rèn)為5.如果集群環(huán)境網(wǎng)絡(luò)不佳可以調(diào)整大一點(diǎn)。 |
LeaderServes | 用于配置Leader服務(wù)器是否接受客戶端的連接,是否允許Leader向客戶端直接提供服務(wù),默認(rèn)是可以的。 |
server.x= | 用于配置集群服務(wù)器列表 |
Zookeeper服務(wù)狀態(tài)和配置等查詢(xún)命令
命令 | 說(shuō)明 |
conf | 顯示當(dāng)前加載的配置文件信息 |
cons | 列出當(dāng)前連接到服務(wù)器的客戶端會(huì)話信息,包括接收和發(fā)送的包數(shù)量、會(huì)話ID等 |
dump | 列出集群中所有會(huì)話信息,以及未經(jīng)處理的會(huì)話和每個(gè)會(huì)話創(chuàng)建臨時(shí)節(jié)點(diǎn) |
envi | 列出當(dāng)前環(huán)境信息,比如使用的JAVA版本、OS信息、主機(jī)名等 |
reqs | 列出未經(jīng)處理的請(qǐng)求 |
ruok | 測(cè)試服務(wù)器是否正常,正常則放回“imok”,不正常則什么也不現(xiàn)實(shí) |
stat | 顯示和性能以及客戶端列表,包括Zookeeper版本、運(yùn)行模式、最新ZXID,連接數(shù),節(jié)點(diǎn)數(shù)量 |
srvr | 和stat命令一樣,只是不會(huì)列出客戶端連接信息,而是僅列出服務(wù)器信息 |
mntr | 用于輸出比stat更加詳細(xì)的服務(wù)器統(tǒng)計(jì)信息,請(qǐng)求延遲、內(nèi)存數(shù)據(jù)庫(kù)大小、集群同步狀態(tài)等。 |
wchs | 列出服務(wù)器watch的詳細(xì)信息 |
wchc | 通過(guò)session列出服務(wù)器的watch的詳細(xì)信息,它的輸出是一個(gè)與watch相關(guān)的會(huì)話列表 |
wchp | 通過(guò)路徑列出服務(wù)器watch的詳細(xì)信息,它的輸出是一個(gè)與session相關(guān)的路徑 |
本文標(biāo)題:Zookeeper詳解(二):Zookeeper安裝和運(yùn)行
本文地址:http://vcdvsql.cn/article42/iipphc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、電子商務(wù)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)