zookeeper
簡(jiǎn)介
Apache ZooKeeper是一個(gè)開發(fā)和維護(hù)開源服務(wù)器的框架奕坟,它使高度可靠的分布式協(xié)調(diào)成為可能贰剥。
ZooKeeper可以提供集中服務(wù),用于維護(hù)配置信息溶其,命名筋粗,提供分布式同步和提供組服務(wù)策橘。 所有這些類型的服務(wù)都以某種形式被分布式應(yīng)用程序使用。 每次實(shí)施時(shí)娜亿,都有很多工作要解決一些不可避免的錯(cuò)誤和競(jìng)爭(zhēng)條件丽已。 由于實(shí)施這些服務(wù)是有困難的,最初的應(yīng)用程序通常會(huì)吝嗇买决,這使得它們變得脆弱沛婴,難以管理。 即使正確完成督赤,這些服務(wù)的不同實(shí)現(xiàn)會(huì)導(dǎo)致應(yīng)用程序部署時(shí)的管理復(fù)雜性嘁灯。
ZooKeeper是分布式應(yīng)用程序的高性能協(xié)調(diào)服務(wù)。 它在一個(gè)簡(jiǎn)單的界面中公開了常見的服務(wù)够挂,如命名旁仿,配置管理,同步和組服務(wù)孽糖,所以你不必從頭開始編寫它們枯冈。 您可以現(xiàn)成使用它來(lái)實(shí)現(xiàn)共識(shí),小組管理办悟,leader選舉和presence協(xié)議尘奏。 而且您可以根據(jù)自己的具體需求進(jìn)行構(gòu)建。
ZooKeeper提供的常見服務(wù)如下 :
- 命名服務(wù) - 按名稱標(biāo)識(shí)集群中的節(jié)點(diǎn)病蛉。它類似于DNS炫加,但僅對(duì)于節(jié)點(diǎn)瑰煎。
- 配置管理 - 加入節(jié)點(diǎn)的最近的和最新的系統(tǒng)配置信息。
- 集群管理 - 實(shí)時(shí)地在集群和節(jié)點(diǎn)狀態(tài)中加入/離開節(jié)點(diǎn)俗孝。
- 選舉算法 - 選舉一個(gè)節(jié)點(diǎn)作為協(xié)調(diào)目的的leader酒甸。
- 鎖定和同步服務(wù) - 在修改數(shù)據(jù)的同時(shí)鎖定數(shù)據(jù)。此機(jī)制可幫助你在連接其他分布式應(yīng)用程序(如Apache HBase)時(shí)進(jìn)行自動(dòng)故障恢復(fù)赋铝。
- 高度可靠的數(shù)據(jù)注冊(cè)表 - 即使在一個(gè)或幾個(gè)節(jié)點(diǎn)關(guān)閉時(shí)也可以獲得數(shù)據(jù)插勤。
ZooKeeper特性
- ZooKeeper是簡(jiǎn)單的:zookeeper的核心是一個(gè)精簡(jiǎn)的文件系統(tǒng),它提供一些簡(jiǎn)單的操作和一些額外的抽象操作革骨。
- ZooKeeper是富有表現(xiàn)力的:zookeeper的基本操作是一組豐富的“構(gòu)件”农尖,可用于實(shí)現(xiàn)多種協(xié)調(diào)數(shù)據(jù)結(jié)構(gòu)和協(xié)議。
- ZooKeeper具有高可用性:zookeeper運(yùn)行于一組機(jī)器之上良哲,并且在設(shè)計(jì)上具有高可用性盛卡,因此應(yīng)用程序可以完全依賴于它。
- ZooKeeper采用松耦合交互方式:在zookeeper支持的交互過(guò)程中筑凫,參與者不需要了解彼此滑沧。
- ZooKeeper是一個(gè)資源庫(kù):zookeeper提供了一個(gè)通用協(xié)調(diào)模式實(shí)現(xiàn)方法的開源共享庫(kù),使程序員免于編寫這類通用的協(xié)議漏健。
下載嚎货,安裝
wget http://mirrors.shuosc.org/apache/zookeeper/stable/zookeeper-3.4.10.tar.gz
tar -zxvf zookeeper-3.4.10.tar.gz
配置
單節(jié)點(diǎn)模式
cd zookeeper-3.4.10/conf
vim zoo.cfg #創(chuàng)建一個(gè)配置文件
在該文件中寫入下面幾項(xiàng):
tickTime=2000 #zookeeper中使用的基本時(shí)間單位, 毫秒值.
dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log #該參數(shù)若不配置橘霎,則日志目錄和dataDir配置相同
clientPort=2181 #監(jiān)聽client連接的端口號(hào).
參數(shù)配置可以在conf/zoo_sample.cfg
中看到蔫浆。
分布式模式
在該文件中寫入下面幾項(xiàng):
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log
clientPort=2181
server.130=192.168.213.130:2888:3888
server.131=192.168.213.131:2888:3888
server.132=192.168.213.132:2888:3888
server.X=A:B:C 其中X是一個(gè)數(shù)字, 表示這是第幾號(hào)server,可以隨意寫姐叁,但必須不相同. A是該server所在的IP地址. B配置該server和集群中的leader交換消息所使用的端口. C配置選舉leader時(shí)所使用的端口.
最后在dataDir目錄下新建一個(gè)myid文件瓦盛,并對(duì)應(yīng)著寫入 X 的值。
echo "130" > /tmp/zookeeper/data/myid #192.168.213.130服務(wù)器
echo "131" > /tmp/zookeeper/data/myid #192.168.213.131服務(wù)器
echo "132" > /tmp/zookeeper/data/myid #192.168.213.132服務(wù)器
啟動(dòng)
執(zhí)行命令(集群中每臺(tái)服務(wù)器都需要執(zhí)行下面命令):
bin/zkServer.sh start
通過(guò)命令netstat -tupln
查看這幾個(gè)端口是否啟動(dòng)成功外潜。
也可以通過(guò)命令jps
查看是否有ZooKeeper服務(wù)器進(jìn)程原环,名稱為QuorumPeerMain。
我們也可以使用nc
(telnet也可以)發(fā)送ruok命令(are you ok?)到監(jiān)聽端口处窥,檢查zookeeper是否正在運(yùn)行:
echo ruok | nc localhost 2181
imok
如果啟動(dòng)不成功嘱吗,可以查看日志zookeeper.out內(nèi)容,最常見的問(wèn)題可能是主機(jī)名與IP地址映射配置問(wèn)題
出現(xiàn)連接超時(shí)等錯(cuò)誤滔驾,可以通過(guò)修改/etc/hosts
文件中主機(jī)名對(duì)應(yīng)的ip谒麦,修改為127.0.0.1或者是ipv4靜態(tài)地址,重啟就可以解決問(wèn)題哆致。出現(xiàn)nohup: failed to run command ‘java’: No such file or directory錯(cuò)誤绕德,解決辦法是在bin/zkServer.sh文件中添加jdk的安裝路徑,例如:
export JAVA_HOME=/usr/lib/jdk
export PATH=$JAVA_HOME/bin:$PATH
在客戶端連接ZooKeeper服務(wù)器摊阀,執(zhí)行如下命令:
bin/zkCli.sh -server 192.168.213.130:2181
在光標(biāo)處可以輸入help
查看Zookeeper客戶端可以使用的基本操作命令耻蛇,輸入quit
退出踪蹬。
最后可以通過(guò)ZooKeeper的腳本來(lái)查看啟動(dòng)狀態(tài),包括集群中各個(gè)結(jié)點(diǎn)的角色(或是Leader臣咖,或是Follower)跃捣,命令如下:
bin/zkServer.sh status
zookeeper官方文檔http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
開機(jī)啟動(dòng)
cd /etc/rc.d/init.d/
touch zookeeper
chmod +x zookeeper
vim zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
case $1 in
start) su root /opt/zookeeper-3.4.14/bin/zkServer.sh start;;
stop) su root /opt/zookeeper-3.4.14/bin/zkServer.sh stop;;
status) su root /opt/zookeeper-3.4.14/bin/zkServer.sh status;;
restart) su root /opt/zookeeper-3.4.14/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
#保存退出
chkconfig --add zookeeper #把zookeeper添加到開機(jī)啟動(dòng)里面
chkconfig --list #查看添加的zookeeper是否在里面
service zookeeper start/stop/status #啟動(dòng)、停止夺蛇、查看服務(wù)狀態(tài)命令
END