Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
Zookeeper是一種在分布式系統(tǒng)中被廣泛用來作為:分布式狀態(tài)管理、分布式協(xié)調(diào)管理、分布式配置管理、和分布式鎖服務(wù)的集群。kafka增加和減少服務(wù)器都會在Zookeeper節(jié)點上觸發(fā)相應(yīng)的事件kafka系統(tǒng)會捕獲這些事件,進行新一輪的負載均衡,客戶端也會捕獲這些事件來進行新一輪的處理。
Kafka集群是把狀態(tài)保存在Zookeeper中的,首先要搭建Zookeeper集群。
- Linux服務(wù)器一臺、三臺、五臺、(2*n+1),是否可以用偶數(shù),不一定,其實沒必要。假設(shè)集群中有3臺服務(wù)器在工作,根據(jù)zookeeper的工作原理,只要有半數(shù)以上存活,那么整個集群就能對外服務(wù),3臺中超過兩臺超過半數(shù),允許1臺掛掉。如果有4臺,那么不允許掛掉2臺,因為剩余2臺的話,也沒有超過半數(shù),也就是只允許掛掉1臺。
- Zookeeper是用java寫的所以他的需要JAVA環(huán)境,java是運行在java虛擬機上的,本博客http://www.cnblogs.com/wt645631686/p/8267239.html有安裝方法。
- Zookeeper的穩(wěn)定版本Zookeeper 3.4.6版本?
開始搭建
一、環(huán)境準備
環(huán)境:Centos6,三臺服務(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)建?
在每臺機器的/usr/local/創(chuàng)建zookeeper目錄,然后分別下載Zookeeper的tag包到/usr/local/zookeeper(項目目錄)目錄下,在/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 這個文件是官方給我們的zookeeper的樣板文件,給他復(fù)制一份命名為zoo.cfg,zoo.cfg是官方指定的文件命名規(guī)則。 //--------------------------------conf start------------------------ # The number of milliseconds of each tick tickTime=2000 //這個時間是作為 Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發(fā)送一個心跳。 # The number of ticks that the initial # synchronization phase can take initLimit=10 //這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務(wù)器的客戶端,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。當已經(jīng)超過 5個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒,10秒內(nèi)要啟動集群并出現(xiàn)leader和floower。 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 //這個配置項標識 Leader 與Follower 之間發(fā)送消息,請求和應(yīng)答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5*2000=10秒,超出時間認為是死機。 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/local/zookeeper/zkdata //快照日志的存儲路徑 dataLogDir=/usr/local/zookeeper/zkdataLog //事物日志的存儲路徑,如果不配置這個那么事物日志會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產(chǎn)生的事物日志、快照日志太多 # the port at which the clients will connect clientPort=12181 //這個端口就是客戶端連接 Zookeeper 服務(wù)器的端口,Zookeeper 會監(jiā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 這個1是服務(wù)器的標識也可以是其他的數(shù)字, 表示這個是第幾號服務(wù)器,用來標識服務(wù)器,這個標識要寫到快照目錄下面myid文件里 //192.168.244.131為集群里的IP地址,第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,集群剛啟動的時候選舉或者leader掛掉之后進行新的選舉的端口默認是3888?四、每臺服務(wù)器創(chuàng)建myid文件
既然在配置文件中設(shè)定了每臺機器的標識,標識要寫在快照目錄下面,需要進入zkdata目錄下創(chuàng)建,對應(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五、啟動三臺zookeeper
進入每臺zookeeper服務(wù)器的/usr/local/zookeeper/zookeeper-3.4.6/bin目錄,啟動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 //啟動 JMX enabled by default Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED下面查看每臺zookeeper的狀態(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)導,follower表示是屬下,zookeeper集群一般只有一個leader,多個follower,主(leader)一般是相應(yīng)客戶端的讀寫請求,向(follower)發(fā)送數(shù)據(jù),而從(follower)主要是同步數(shù)據(jù),當主掛掉之后就會從follower里重新選舉一個leader出來。
到此,zookeeper集群搭建完畢。
可以用“jps”查看zk的進程,這個是zk的整個工程的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集群啟動時配置環(huán)境變量的文件
三、事務(wù)日志文件的清理(zoo.cfg的dataLogDir配置項)
工作時會產(chǎn)生大量日志,不清理會沾滿自盤,所以需要清理。
官網(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
使用默認配置時,ZooKeeper服務(wù)器不會刪除舊的快照和日志文件(參見下面的自動清除),這是操作員的職責。
自動定時定期清理的腳本,每臺機器都需要設(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 #以上這個腳本定義了刪除對應(yīng)兩個目錄中的文件,保留最新的66個文件,可以將他寫到crontab中,設(shè)置為每天凌晨2點執(zhí)行一次就可以了。#zk log dir del the zookeeper log #logDir= #ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f舉例,讓每個星期天的0點0分執(zhí)行。
# crontab -e 0 0 * * 0 sh /usr/local/zookeeper/cleanup.sh //分時日月周,周是0-6,0表示周日 # crontab -l sh /usr/local/zookeeper/cleanup.sh其他方法:
①使用ZK的工具類PurgeTxnLog,它的實現(xiàn)了一種簡單的歷史文件清理策略,可以在這里看一下他的使用方法 http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html
②對于上面這個執(zhí)行,ZK自己已經(jīng)寫好了腳本,在bin/zkCleanup.sh中,所以直接使用這個腳本也是可以執(zhí)行清理工作的。
③從3.4.0開始,zookeeper提供了自動清理snapshot和事務(wù)日志的功能,通過配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 這兩個參數(shù)能夠?qū)崿F(xiàn)定時清理了。這兩個參數(shù)都是在zoo.cfg中配置的:
autopurge.purgeInterval 這個參數(shù)指定了清理頻率,單位是小時,需要填寫一個1或更大的整數(shù),默認是0,表示不開啟自己清理功能。
autopurge.snapRetainCount 這個參數(shù)和上面的參數(shù)搭配使用,這個參數(shù)指定了需要保留的文件數(shù)目。默認是保留3個。
推薦使用腳本清理,對于運維人員來說,將日志清理工作獨立出來,便于統(tǒng)一管理也更可控。
轉(zhuǎn)載于:https://www.cnblogs.com/wt645631686/p/8447942.html
總結(jié)
以上是生活随笔為你收集整理的Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Uva 11077 Find the P
- 下一篇: 假期(网络编程)