Zookeeper服務自身組成一個集羣(2n+1個服務容許n個失效)。Zookeeper服務有兩個角色,一個是leader,負責寫服務和數據同步,剩下的是follower,提供讀服務,leader失效後會在follower中從新選舉新的leader。java
Zookeeper邏輯圖以下,apache
客戶端能夠鏈接到每一個server,每一個server的數據徹底相同。服務器
每一個follower都和leader有鏈接,接受leader的數據更新操做。ide
Server記錄事務日誌和快照到持久存儲。測試
大多數server可用,總體服務就可用。ui
Zookeeper表現爲一個分層的文件系統目錄樹結構(不一樣於文件系統的是,節點能夠有本身的數據,而文件系統中的目錄節點只有子節點)。spa
數據模型結構圖以下,3d
圓形節點能夠含有子節點,多邊形節點不能含有子節點。一個節點對應一個應用,節點存儲的數據就是應用須要的配置信息。日誌
順序一致性:按照客戶端發送請求的順序更新數據。server
原子性:更新要麼成功,要麼失敗,不會出現部分更新。
單一性 :不管客戶端鏈接哪一個server,都會看到同一個視圖。
可靠性:一旦數據更新成功,將一直保持,直到新的更新。
及時性:客戶端會在一個肯定的時間內獲得最新的數據。
Zookeeper集羣的安裝,節點數2*n+1,
tickTime: zookeeper中使用的基本時間單位, 毫秒值.
dataDir: 數據目錄. 能夠是任意目錄.
dataLogDir: log目錄, 一樣能夠是任意目錄. 若是沒有設置該參數, 將使用和dataDir相同的設置.
clientPort: 監聽client鏈接的端口號.
1 、準備Zookeeper環境
配置java環境變量:
export JAVA_HOME=/usr/local/jdk1.7.0_45
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$ZOOKEEPER_HOME/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$ZOOKEEPER_HOME/bin
rpm安裝jdk路徑:export JAVA_HOME=/usr/java/jdk1.7.0_45
配置hostname:
vi /etc/profile
172.16.23.195zookeeper1
172.16.23.196zookeeper2
reboot
2、配置zookeeper
Wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/
tar –xvzf zookeeper-3.3.6.tar.gz
mv /zookeeper-3.3.6 /usr/local/zookeeper
cd /usr/local/zookeeper/conf
mv mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
添加如下內容zookeeper集羣:
server.1= zookeeper1:2888:3888
server.2= zookeeper1:2888:3888
標識Server ID:
touch myid
1
其它zookeeper服務器配置步驟相同,更改myid值。
啓動zookeeper:
/usr/local/zookeeper/bin/zkServer.sh start
查看啓動狀態:
/usr/local/zookeeper/bin/zkServer.sh status
啓動客戶端腳本:
zkCli.sh -server zookeeper1:2181
顯示根目錄下、文件:
ls /
建立文件,並設置初始內容:
create /test 1註釋:1爲賦值。
獲取文件內容:
get /test
測試集羣效果,登陸另外一臺zookeeper
zkCli.sh -server zookeeper2:2181
ls /
正確顯示新建節點test,集羣正常。
修改文件內容:
set /test 2
刪除文件:
delete /test
退出客戶端:
quit