三臺(tái)服務(wù)器分別是
192.1682.158
192.1682.152
192.1682.150
然后在三臺(tái)服務(wù)器分別安裝zookeeper
官網(wǎng)下載地址:http://mirrors.hust.edu.cn/apache/zookeeper/
wget http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
解壓到user/local下
tar -zxvf zookeeper-3.4.12.tar.gz -C /usr/local
mv /usr/local/zookeeper-3.4.12 /usr/local/zookeeper
修改配置文件
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
vim /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
server.1=192.168.2.158:2888:3888
server.2=192.168.2.152:2888:3888
server.3=192.168.2.150:2888:3888
創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄
mkdir -p /usr/local/zookeeper/data
創(chuàng)建myid文件, id 與 zoo.cfg 中的序號(hào)對(duì)應(yīng)
#在192.168.2.158機(jī)器上執(zhí)行
echo 1 > /usr/local/zookeeper/data/zookeeper_server.pid
#在192.168.2.152機(jī)器上執(zhí)行
echo 2 > /usr/local/zookeeper/data/zookeeper_server.pid
#在192.168.2.150機(jī)器上執(zhí)行
echo 3 > /usr/local/zookeeper/data/zookeeper_server.pid
配置環(huán)境變量
vim /etc/profile
在最后加上
export ZK_HOME=/usr/local/zookeeper
export PATH=$ZK_HOME/bin:$PATH
分別啟動(dòng)
zkServer.sh start
查看狀態(tài)
zkServer.sh status
ZooKeeper角色
配置說明
參數(shù) | 說明 |
---|---|
tickTime | 這個(gè)時(shí)間是作為Zookeeper服務(wù)器之間或者客戶端與服務(wù)器之間維持心跳的時(shí)間間隔眶明,也就是每個(gè)tickTime時(shí)間就會(huì)發(fā)送一下心跳醇滥。 |
initLimit | 這個(gè)配置項(xiàng)是用來配置zookeeper接受客戶端的(這里所說的客戶端不是用戶連接Zookeeper服務(wù)器的客戶端而是Zookeeper服務(wù)器集群中連接到Leader的Follower服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)嗦董。當(dāng)已經(jīng)超過10個(gè)心跳的時(shí)間(也就是tickTime)長(zhǎng)度后Zookeeper服務(wù)器還沒有接到客戶端的返回信息峰尝,那么表明這個(gè)客戶端連接失敗狐援」北兀總時(shí)間長(zhǎng)度就是10*2000=20秒俱恶。 |
syncLimit | 這個(gè)配置項(xiàng)標(biāo)示Leader與Follower之間發(fā)送消息雹嗦、請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度范舀,最長(zhǎng)不能超過多少個(gè)tickTime的時(shí)間長(zhǎng)度,總的時(shí)間長(zhǎng)度就是5*2000=10秒了罪。 |
dataDir | Zookeeper保存數(shù)據(jù)的目錄锭环,默認(rèn)情況下,Zookeeper將數(shù)據(jù)的日志文件也保存在這里泊藕。 |
dataLogDir | 短文本 |
clientPort | 這個(gè)端口就是客戶端連接Zookeeper服務(wù)器的端口辅辩。Zookeeper會(huì)監(jiān)聽這個(gè)端口,接受客戶端的訪問請(qǐng)求娃圆。 |
server.A=B:C:D | 其中A是一個(gè)數(shù)字玫锋,標(biāo)示這是第幾號(hào)服務(wù)器;B是這個(gè)服務(wù)器的ip地址踊餐;C標(biāo)示的是這個(gè)服務(wù)器與集群中的Leader服務(wù)器交換信息的端口景醇;D標(biāo)示的是萬一集群中Leader服務(wù)器掛了臀稚,需要一個(gè)端口來進(jìn)行選舉吝岭,選出一個(gè)新的Leader,而這個(gè)端口就是用來執(zhí)行選舉時(shí)服務(wù)器相互通信的端口吧寺。如果是偽集群的配置方式窜管,由于B都是一樣,所以不同的Zookeeper實(shí)例通信端口號(hào)不能一樣稚机,所以要給他們分配不同的端口號(hào)幕帆。 |
myid | 集群模式下配置一個(gè)文件myid,這個(gè)文件在daraDir目錄下赖条,這個(gè)文件里面就有一個(gè)數(shù)據(jù)就是A的值失乾,Zookeeper啟動(dòng)時(shí)讀取此文件,拿到里面的數(shù)據(jù)與zoo.cfg里面的配置信息比較從而判斷到底是哪個(gè)server纬乍。 |
清理文件
注意:zookeeper不會(huì)主動(dòng)的清除舊的快照和日志文件
第一種:我們可以通過命令去定期的清理碱茁。
#!/bin/bash
#snapshot file dir
dataDir=/usr/local/zookeeper/data/version-2
#Leave 66 files
count=66
count=$[$count+1]
ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
#以上這個(gè)腳本定義了刪除對(duì)應(yīng)目錄中的文件,保留最新的66個(gè)文件仿贬,可以將他寫到crontab中纽竣,設(shè)置為每天凌晨2點(diǎn)執(zhí)行一次就可以了。
其他方法:
第二種:使用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)一管理也更可控徽缚。畢竟zk自帶的一些工具并不怎么給力。
幾個(gè)zNode節(jié)點(diǎn)操作的api簡(jiǎn)單介紹:
create /parh data 創(chuàng)建一個(gè)名為/path的zNode節(jié)點(diǎn)革屠,并包含數(shù)據(jù)data
delete /path 刪除名為/path的zNode節(jié)點(diǎn)
exists /path 檢查是否存在名為/path的zNode節(jié)點(diǎn)
setData /path data 設(shè)置名為/path的zNode的數(shù)據(jù)為data
getData /path 返回名為/path的zNode節(jié)點(diǎn)的數(shù)據(jù)信息
getChildren /path 返回所有/path節(jié)點(diǎn)的所有子節(jié)點(diǎn)列表
zNode節(jié)點(diǎn)還有不同的類型凿试,持久(persistent)節(jié)點(diǎn)和臨時(shí)(ephemeral)節(jié)點(diǎn)。持久的zNode似芝,如/path那婉,只能通過調(diào)用delete來進(jìn)行刪除,而臨時(shí)的zNode則與之相反党瓮,當(dāng)創(chuàng)建該節(jié)點(diǎn)的客戶端崩潰或者關(guān)閉了與ZooKeeper服務(wù)器的連接時(shí)候详炬,這個(gè)臨時(shí)zNode節(jié)點(diǎn)就會(huì)被刪除了。其中臨時(shí)節(jié)點(diǎn)可用于實(shí)現(xiàn)分布式鎖寞奸。