簡介:html
ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。linux
ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。算法
zookeeper模式:apache
Standalone獨立模式:centos
只有一個zookeeper服務實例,不可保證高可靠性和恢復性,可在測試環境中使用,生產環境不建議使用。服務器
Distributed集羣模式:分佈式
有多個zookeeper實例在運行,建議多個zk實例是在不一樣的服務器上。集羣中不一樣zookeeper實例之間數據不停的同步。有半數以上的實例保持正常運行,zk服務就能正常運行,例如:有5個zk實例,掛了2個,還剩3個,依然能夠正常工做;若有6個zk實例,掛了3個,則不能正常工做。ide
僞集羣模式:oop
簡單來講,集羣僞分佈模式就是在單機下模擬集羣的ZooKeeper服務。性能
本文主要講解集羣模式安裝部署
1、安裝環境
一、操做系統:Amazon Linux(目前版本基於centos6核心)
二、jdk-1.7.9
三、zookeeper-3.4.8
2、安裝JDK
安裝Zookeeper須要先安裝JDK,
安裝JDK參考本站博文http://linuxtech.blog.51cto.com/3670088/1706792
3、修改hosts文件
主機名稱到IP地址映射配置
ZooKeeper集羣中具備兩個關鍵的角色:Leader和Follower。集羣中全部的結點做爲一個總體對分佈式應用提供服務,集羣中每一個結點之間都互相鏈接,因此,在配置的ZooKeeper集羣的時候,每個結點的host到IP地址的映射都要配置上集羣中其它結點的映射信息。
例如,個人ZooKeeper集羣中每一個結點的配置,以slave-01爲例,/etc/hosts內容以下所示:
192.168.0.101 slave-1
192.168.0.102 slave-2
192.168.0.103 slave-3
ZooKeeper採用一種稱爲Leader election的選舉算法。在整個集羣運行過程當中,只有一個Leader,其餘的都是Follower,若是ZooKeeper集羣在運行過程當中Leader出了問題,系統會採用該算法從新選出一個Leader。所以,各個結點之間要可以保證互相鏈接,必須配置上述映射。
ZooKeeper集羣啓動的時候,會首先選出一個Leader,在Leader election過程當中,某一個知足選舉算的結點就能成爲Leader。
4、安裝並配置zookeeper
到http://zookeeper.apache.org/releases.html去下載Zookeeper,建議選擇穩定版,即stable的。
tar zxvf zookeeper-3.4.8.tar.gz -C /export/Server/
cd /export/Server/
mv zookeeper-3.4.8/ zookeeper
cd zookeeper/
cp conf/zoo_sample.cfg conf/zoo.cfg
mkdir -p /export/data/zookeeper/
修改zoo.cfg配置文件
sed -i 's/dataDir=\/tmp\/zookeeper/dataDir=\/export\/data\/zookeeper/' conf/zoo.cfg
echo '''
> server.1=slave-1:2888:3888
> server.2=slave-2:2888:3888
> server.3=slave-3:2888:3888
> ''' >> conf/zoo.cfg
5、配置zookeeper的環境變量
cat >> /etc/profile <<EOF
export ZOOKEEPER_HOME=/export/Server/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
EOF
使之生效
source /etc/profile
六:遠程複製分發安裝文件
上面已經在一臺機器slave-01上配置完成ZooKeeper,如今能夠將該配置好的安裝文件遠程拷貝到集羣中的各個結點對應的目錄下:
七:設置myid
在咱們zoo.cfg配置的dataDir指定的目錄下面,建立一個myid文件,裏面內容爲一個數字,用來標識當前主機,conf/zoo.cfg文件中配置的server.X中X是什麼數字,則myid文件中就輸入這個數字,例如:
[root@slave-1 /]echo "1" > /export/data/zookeeper/myid
[root@slave-2 /]echo "2" > /export/data/zookeeper/myid
[root@slave-3 /]echo "3" > /export/data/zookeeper/myid
8、啓動ZooKeeper集羣
在ZooKeeper集羣的每一個結點上,執行啓動ZooKeeper服務的腳本,以下所示:
chmod +x -R bin/
cd bin/
./zkServer.sh start
查看啓動日誌:
tail -500f zookeeper.out
9、查看狀態
查看zookeeper集羣是否啓動
./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/Server/zookeeper/bin/../conf/zoo.cfg
Mode: follower
leader的顯示是:
ZooKeeper JMX enabled by default
Using config: /export/Server/zookeeper/bin/../conf/zoo.cfg
Mode: leader
查看zookeeper的啓動狀態
echo ruok | nc 192.168.0.101 2181
控制檯輸出: imok
10、測試
經過zkCli.sh -server ip 就能夠鏈接到其中一臺server中,而後就能夠經過交互式命令來控制zk了
(完)