1? Zookeeper基本框架
Zookeeper集群主要角色有Leader,Learner(Follower带猴,Observer(當(dāng)服務(wù)器增加到一定程度昔汉,由于投票的壓力增大從而使得吞吐量降低,所以增加了Observer拴清。)以及client:
Leader:領(lǐng)導(dǎo)者靶病,負(fù)責(zé)投票的發(fā)起和決議,以及更新系統(tǒng)狀態(tài)
Follower:接受客戶(hù)端的請(qǐng)求并返回結(jié)果給客戶(hù)端口予,并參與投票
Observer:接受客戶(hù)端的請(qǐng)求嫡秕,將寫(xiě)的請(qǐng)求轉(zhuǎn)發(fā)給leader,不參與投票苹威。Observer目的是擴(kuò)展系統(tǒng)昆咽,提高讀的速度。
Client:客戶(hù)端牙甫,想Zookeeper發(fā)起請(qǐng)求掷酗。
Zookeeper的基本框架圖如下
1.2 zookeeper集群節(jié)點(diǎn)個(gè)數(shù)
zookeeper節(jié)點(diǎn)部署的越多,服務(wù)的可靠性也就越高窟哺。當(dāng)然建議最好是部署奇數(shù)個(gè)泻轰,偶數(shù)個(gè)不是不可以。但是zookeeper集群是以宕機(jī)個(gè)數(shù)過(guò)半才會(huì)讓整個(gè)集群宕機(jī)的且轨,所以奇數(shù)個(gè)集群更佳浮声,最好部署3,5旋奢,7個(gè)zookeeper節(jié)點(diǎn)泳挥。本次實(shí)驗(yàn)我們是以3個(gè)節(jié)點(diǎn)進(jìn)行(centos6)。
二至朗、zookeeper安裝
2.1安裝jdk
2.2安裝zookeeper
[root@localhost ~]# cd /usr/local/
[root@localhost local]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
[root@localhost local]# tar -xf zookeeper-3.4.8.tar.gz && rm -rf zookeeper-3.4.8.tar.gz && mv zookeeper-3.4.8 zookeeper && cd zookeeper && cp conf/zoo_sample.cfg conf/zoo.cfg
把zookeeper加入到環(huán)境變量屉符,如下:
[root@localhost zookeeper]# vim /etc/profile
執(zhí)行source命令使剛剛修改的環(huán)境生效,如下:
[root@localhost zookeeper]# source /etc/profile
[root@localhost zookeeper]# env
2.3修改zookeeper配置文件
[root@localhost zookeeper]# vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
server.1= 192.168.1.2:2888:3888
server.2= 192.168.1.3:2888:3888
server.3= 192.168.1.4:2888:3888
clientPort=2181
配置文件參數(shù)說(shuō)明:
tickTime這個(gè)時(shí)間是作為zookeeper服務(wù)器之間或客戶(hù)端與服務(wù)器之間維持心跳的時(shí)間間隔,也就是說(shuō)每個(gè)tickTime時(shí)間就會(huì)發(fā)送一個(gè)心跳锹引。
initLimit這個(gè)配置項(xiàng)是用來(lái)配置zookeeper接受客戶(hù)端(這里所說(shuō)的客戶(hù)端不是用戶(hù)連接zookeeper服務(wù)器的客戶(hù)端,而是zookeeper服務(wù)器集群中連接到leader的follower 服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)矗钟。
當(dāng)已經(jīng)超過(guò)10個(gè)心跳的時(shí)間(也就是tickTime)長(zhǎng)度后 zookeeper 服務(wù)器還沒(méi)有收到客戶(hù)端的返回信息,那么表明這個(gè)客戶(hù)端連接失敗∠颖洌總的時(shí)間長(zhǎng)度就是 10*2000=20秒吨艇。
syncLimit這個(gè)配置項(xiàng)標(biāo)識(shí)leader與follower之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度,最長(zhǎng)不能超過(guò)多少個(gè)tickTime的時(shí)間長(zhǎng)度,總的時(shí)間長(zhǎng)度就是5*2000=10秒。
dataDir顧名思義就是zookeeper保存數(shù)據(jù)的目錄,默認(rèn)情況下zookeeper將寫(xiě)數(shù)據(jù)的日志文件也保存在這個(gè)目錄里腾啥;
clientPort這個(gè)端口就是客戶(hù)端連接Zookeeper服務(wù)器的端口,Zookeeper會(huì)監(jiān)聽(tīng)這個(gè)端口接受客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求东涡;
server.A=B:C:D中的A是一個(gè)數(shù)字,表示這個(gè)是第幾號(hào)服務(wù)器,B是這個(gè)服務(wù)器的IP地址冯吓,C第一個(gè)端口用來(lái)集群成員的信息交換,表示這個(gè)服務(wù)器與集群中的leader服務(wù)器交換信息的端口,D是在leader掛掉時(shí)專(zhuān)門(mén)用來(lái)進(jìn)行選舉leader所用的端口软啼。
2.4創(chuàng)建相關(guān)目錄
[root@localhost zookeeper]# mkdir -p /usr/local/zookeeper/{data,logs}
2.5創(chuàng)建ServerID標(biāo)識(shí)
除了修改zoo.cfg配置文件外,zookeeper集群模式下還要配置一個(gè)myid文件,這個(gè)文件需要放在dataDir目錄下桑谍。
這個(gè)文件里面有一個(gè)數(shù)據(jù)就是A的值(該A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路徑中創(chuàng)建myid文件延柠。
在192.168.1.2服務(wù)器上創(chuàng)建myid文件祸挪,并設(shè)置為1,同時(shí)與zoo.cfg文件里面的server.1對(duì)應(yīng)贞间,如下:
echo "1" > /usr/local/zookeeper/data/myid
在192.168.1.3服務(wù)器上創(chuàng)建myid文件贿条,并設(shè)置為2,同時(shí)與zoo.cfg文件里面的server.2對(duì)應(yīng)增热,如下:
echo "2" ?> /usr/local/zookeeper/data/myid
在192.168.1.4服務(wù)器上創(chuàng)建myid文件整以,并設(shè)置為2,同時(shí)與zoo.cfg文件里面的server.2對(duì)應(yīng)峻仇,如下:
echo "3" > /usr/local/zookeeper/data/myid
三公黑、啟動(dòng)zookeeper,查看集群
啟動(dòng):
[root@localhost zookeeper]# bin/zkServer.sh start
注意:在啟動(dòng)第一臺(tái)zookeeper的時(shí)候可能會(huì)報(bào)錯(cuò)摄咆,等三臺(tái)zookeeper全部啟動(dòng)完成之后就不會(huì)報(bào)錯(cuò)了凡蚜。
查看狀態(tài):
[root@localhost zookeeper]# bin/zkServer.sh status
四、連接zookeeper集群
[root@localhost zookeeper]# bin/zkCli.sh -server 192.168.1.3:2181
安裝完成吭从。朝蜘。。