Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
Zookeeper是一種在分布式系統(tǒng)中被廣泛用來作為:分布式狀態(tài)管理、分布式協(xié)調(diào)管理、分布式配置管理、和分布式鎖服務(wù)的集群。kafka增加和減少服務(wù)器都會(huì)在Zookeeper節(jié)點(diǎn)上觸發(fā)相應(yīng)的事件kafka系統(tǒng)會(huì)捕獲這些事件,進(jìn)行新一輪的負(fù)載均衡,客戶端也會(huì)捕獲這些事件來進(jìn)行新一輪的處理。
Kafka集群是把狀態(tài)保存在Zookeeper中的,首先要搭建Zookeeper集群。
- Linux服務(wù)器一臺(tái)、三臺(tái)、五臺(tái)、(2*n+1),是否可以用偶數(shù),不一定,其實(shí)沒必要。假設(shè)集群中有3臺(tái)服務(wù)器在工作,根據(jù)zookeeper的工作原理,只要有半數(shù)以上存活,那么整個(gè)集群就能對(duì)外服務(wù),3臺(tái)中超過兩臺(tái)超過半數(shù),允許1臺(tái)掛掉。如果有4臺(tái),那么不允許掛掉2臺(tái),因?yàn)槭S?臺(tái)的話,也沒有超過半數(shù),也就是只允許掛掉1臺(tái)。
- Zookeeper是用java寫的所以他的需要JAVA環(huán)境,java是運(yùn)行在java虛擬機(jī)上的,本博客http://www.cnblogs.com/wt645631686/p/8267239.html有安裝方法。
- Zookeeper的穩(wěn)定版本Zookeeper 3.4.6版本?
開始搭建
一、環(huán)境準(zhǔn)備
環(huán)境:Centos6,三臺(tái)服務(wù)器,分別是192.168.244.131、192.168.244.133、192.168.244.134,Java版本1.8
Zookeeper3.6.4下載地址 鏈接:https://pan.baidu.com/s/1XlQ4viDo-q0J66geFyErvQ 提取碼:h7to二、目錄創(chuàng)建?
在每臺(tái)機(jī)器的/usr/local/創(chuàng)建zookeeper目錄,然后分別下載Zookeeper的tag包到/usr/local/zookeeper(項(xiàng)目目錄)目錄下,在/usr/local/zookeeper創(chuàng)建zkdata(存放快照日志)和zkdataLog(存放事務(wù)日志)目錄,用于zookeeper的配置。
三、解壓包,并復(fù)制、修改配置文件
# tar -zxvf zookeeper-3.4.6.tar.gz # cd zookeeper-3.4.6/conf/ # cp zoo_sample.cfg zoo.cfg //zoo_sample.cfg 這個(gè)文件是官方給我們的zookeeper的樣板文件,給他復(fù)制一份命名為zoo.cfg,zoo.cfg是官方指定的文件命名規(guī)則。 //--------------------------------conf start------------------------ # The number of milliseconds of each tick tickTime=2000 //這個(gè)時(shí)間是作為 Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔,也就是每個(gè) tickTime 時(shí)間就會(huì)發(fā)送一個(gè)心跳。 # The number of ticks that the initial # synchronization phase can take initLimit=10 //這個(gè)配置項(xiàng)是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務(wù)器的客戶端,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)。當(dāng)已經(jīng)超過 5個(gè)心跳的時(shí)間(也就是 tickTime)長(zhǎng)度后 Zookeeper 服務(wù)器還沒有收到客戶端的返回信息,那么表明這個(gè)客戶端連接失敗。總的時(shí)間長(zhǎng)度就是 5*2000=10 秒,10秒內(nèi)要啟動(dòng)集群并出現(xiàn)leader和floower。 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 //這個(gè)配置項(xiàng)標(biāo)識(shí) Leader 與Follower 之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度,最長(zhǎng)不能超過多少個(gè) tickTime 的時(shí)間長(zhǎng)度,總的時(shí)間長(zhǎng)度就是5*2000=10秒,超出時(shí)間認(rèn)為是死機(jī)。 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/local/zookeeper/zkdata //快照日志的存儲(chǔ)路徑 dataLogDir=/usr/local/zookeeper/zkdataLog //事物日志的存儲(chǔ)路徑,如果不配置這個(gè)那么事物日志會(huì)默認(rèn)存儲(chǔ)到dataDir制定的目錄,這樣會(huì)嚴(yán)重影響zk的性能,當(dāng)zk吞吐量較大的時(shí)候,產(chǎn)生的事物日志、快照日志太多 # the port at which the clients will connect clientPort=12181 //這個(gè)端口就是客戶端連接 Zookeeper 服務(wù)器的端口,Zookeeper 會(huì)監(jiān)聽這個(gè)端口,接受客戶端的訪問請(qǐng)求。修改他的端口改大點(diǎn) server.1=192.168.244.131:12888:13888 server.2=192.168.244.133:12888:13888 server.3=192.168.244.134:12888:13888 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 //-------------------------------conf end-----------------------------------//server.1 這個(gè)1是服務(wù)器的標(biāo)識(shí)也可以是其他的數(shù)字, 表示這個(gè)是第幾號(hào)服務(wù)器,用來標(biāo)識(shí)服務(wù)器,這個(gè)標(biāo)識(shí)要寫到快照目錄下面myid文件里 //192.168.244.131為集群里的IP地址,第一個(gè)端口是master和slave之間的通信端口,默認(rèn)是2888,第二個(gè)端口是leader選舉的端口,集群剛啟動(dòng)的時(shí)候選舉或者leader掛掉之后進(jìn)行新的選舉的端口默認(rèn)是3888?四、每臺(tái)服務(wù)器創(chuàng)建myid文件
既然在配置文件中設(shè)定了每臺(tái)機(jī)器的標(biāo)識(shí),標(biāo)識(shí)要寫在快照目錄下面,需要進(jìn)入zkdata目錄下創(chuàng)建,對(duì)應(yīng)好配置文件的ip,和server id。
//server1 192.168.244.131 #echo "1" > /usr/local/zookeeper/zkdata/myid //server2 192.168.244.133 # echo "2" > /usr/local/zookeeper/zkdata/myid //server3 192.168.244.134 # echo "3" > /usr/local/zookeeper/zkdata/myid五、啟動(dòng)三臺(tái)zookeeper
進(jìn)入每臺(tái)zookeeper服務(wù)器的/usr/local/zookeeper/zookeeper-3.4.6/bin目錄,啟動(dòng)zkServer
# ./zkServer.sh //查看有哪些命令 JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd} # ./zkServer.sh start //啟動(dòng) JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED下面查看每臺(tái)zookeeper的狀態(tài),這里可能會(huì)報(bào)錯(cuò),先把每臺(tái)的防火墻關(guān)掉再執(zhí)行查看命令
192.168.244.131
# ./zkServer.sh status //192.168.244.131 JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Mode: follower192.168.244.133
# ./zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Mode: leader192.168.244.134
# ./zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Mode: followerleader是表示領(lǐng)導(dǎo),follower表示是屬下,zookeeper集群一般只有一個(gè)leader,多個(gè)follower,主(leader)一般是相應(yīng)客戶端的讀寫請(qǐng)求,向(follower)發(fā)送數(shù)據(jù),而從(follower)主要是同步數(shù)據(jù),當(dāng)主掛掉之后就會(huì)從follower里重新選舉一個(gè)leader出來。
到此,zookeeper集群搭建完畢。
可以用“jps”查看zk的進(jìn)程,這個(gè)是zk的整個(gè)工程的main
# jps 4912 Jps 4064 QuorumPeerMain //zk工程的類?其他說明
一、log4j.properties配置文件
- https://www.cnblogs.com/30go/p/7200739.html
- https://www.cnblogs.com/likui360/p/7992982.html
- https://blog.csdn.net/damacheng/article/details/42393827
二、zkEnv.sh和zkServer.sh文件
- zkServer.sh 主的管理程序文件
- zkEnv.sh 是主要配置,zookeeper集群?jiǎn)?dòng)時(shí)配置環(huán)境變量的文件
三、事務(wù)日志文件的清理(zoo.cfg的dataLogDir配置項(xiàng))
工作時(shí)會(huì)產(chǎn)生大量日志,不清理會(huì)沾滿自盤,所以需要清理。
官網(wǎng)說明:http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_maintenance
ZooKeeper server?will not remove old snapshots and log files?when using the default configuration (see autopurge below), this is the responsibility of the operator
使用默認(rèn)配置時(shí),ZooKeeper服務(wù)器不會(huì)刪除舊的快照和日志文件(參見下面的自動(dòng)清除),這是操作員的職責(zé)。
自動(dòng)定時(shí)定期清理的腳本,每臺(tái)機(jī)器都需要設(shè)定同樣的定時(shí)任務(wù)
#!/bin/bash #snapshot file dir dataDir=/usr/local/zookeeper/zkdata/version-2 #tran log dir dataLogDir=/usr/local/zookeeper/zkdatalog/version-2#Leave 66 files count=66 count=$[$count+1] ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f #以上這個(gè)腳本定義了刪除對(duì)應(yīng)兩個(gè)目錄中的文件,保留最新的66個(gè)文件,可以將他寫到crontab中,設(shè)置為每天凌晨2點(diǎn)執(zhí)行一次就可以了。#zk log dir del the zookeeper log #logDir= #ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f舉例,讓每個(gè)星期天的0點(diǎn)0分執(zhí)行。
# crontab -e 0 0 * * 0 sh /usr/local/zookeeper/cleanup.sh //分時(shí)日月周,周是0-6,0表示周日 # crontab -l sh /usr/local/zookeeper/cleanup.sh其他方法:
①使用ZK的工具類PurgeTxnLog,它的實(shí)現(xiàn)了一種簡(jiǎn)單的歷史文件清理策略,可以在這里看一下他的使用方法 http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html
②對(duì)于上面這個(gè)執(zhí)行,ZK自己已經(jīng)寫好了腳本,在bin/zkCleanup.sh中,所以直接使用這個(gè)腳本也是可以執(zhí)行清理工作的。
③從3.4.0開始,zookeeper提供了自動(dòng)清理snapshot和事務(wù)日志的功能,通過配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 這兩個(gè)參數(shù)能夠?qū)崿F(xiàn)定時(shí)清理了。這兩個(gè)參數(shù)都是在zoo.cfg中配置的:
autopurge.purgeInterval 這個(gè)參數(shù)指定了清理頻率,單位是小時(shí),需要填寫一個(gè)1或更大的整數(shù),默認(rèn)是0,表示不開啟自己清理功能。
autopurge.snapRetainCount 這個(gè)參數(shù)和上面的參數(shù)搭配使用,這個(gè)參數(shù)指定了需要保留的文件數(shù)目。默認(rèn)是保留3個(gè)。
推薦使用腳本清理,對(duì)于運(yùn)維人員來說,將日志清理工作獨(dú)立出來,便于統(tǒng)一管理也更可控。
轉(zhuǎn)載于:https://www.cnblogs.com/wt645631686/p/8447942.html
總結(jié)
以上是生活随笔為你收集整理的Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Uva 11077 Find the P
- 下一篇: 假期(网络编程)