1:zookeeper提供豐富的構件(building block)來實現不少協調數據結構和協議java
2:訪問原子性,客戶端要麼讀到全部數據,要麼讀取失敗,不會出現只讀取部分的狀況node
3:zookeeper運行在一組機器上,具備高可用性,幫助系統避免單點故障,同時刪掉故障服務器centos
4:順序一致性:任意客戶端的更新請求會被按照發送順序提交服務器
5:單一系統映像:當一臺服務器故障,致使它的客戶端須要鏈接其它服務器的時候,全部更新晚於故障服務器的服務器都不會接收請求,一直到更新遇上故障服務器網絡
6:及時性:任何客戶端能看到的滯後都是有限的,不會超過幾十秒,且提供sync操做強制客戶端所連的服務器與領導者同步數據結構
7:會話:每一個客戶端鏈接時會嘗試鏈接到配置列表中的一臺服務器,一旦失敗會自動鏈接另外一臺服務器依次類推,知道成功鏈接一臺服務器,從而建立一個會話,客戶端能夠位每一個會話設置超時時間,一旦會話過時,則全部短暫znode會丟失,由於zookeeper會自動發送心跳包,因此不多發生分佈式
8:約會機制(rendezvous),在交互的過程當中,被協調的各方不準要事先彼此瞭解,甚至沒必要同時存在性能
9:ACL:zookeeper提供了digest(經過用戶名密碼),host(經過主機名),ip(經過ip地址)3種身份驗證模式,依賴與 zookeeper的身份驗證機制每一個ACL都是一個身份對應一組權限,若是咱們要給demo.com的客戶端域一個讀權限在java語言中能夠這樣建立:new ACL(Perms.READ, new Id("host", "demo.com"));Ids.OPEN_ACL_UNSAFE是將全部ADMIN以外的權限授予每一個人;另zookeeper還能夠集成第三方的身份驗證系統。ui
10:提供關於通用協調模式的開源共享資源庫centos7
11:高性能的(官方數據)對以寫爲主的工做負載來講使用5臺不錯的機器基準吞吐量達到10000+
重啓網卡:service network restart
檢查本身ip是否於配置的同樣: ip addr
將當前已經配置好網絡的虛擬機保存一個快照,若是後面安裝失敗能夠還原回來。
2.關閉系統在克隆兩個一樣的虛擬機
完成克隆後要記得修改其ip地址,重複步驟1便可。
3.下載zooekeep並解壓到/usr/localhost 目錄,在conf文件下添加zoo.cfg文件,文件內容以下:
tickTime=2000
dataDir=/opt/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
initLimit:這個配置項是用來配置Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 5*2000=10 秒。
syncLimit:這個配置項標識Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒。
server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。
除了修改 zoo.cfg 配置文件,集羣模式下還要配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裏面就有一個數據就是 A 的值,Zookeeper 啓動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷究竟是那個 server。
完成配置以後分發給其餘兩個節點:
scp -r zookeeper-3.5.2-alpha/ root@192.168.1.12:/usr/local/
scp -r zookeeper-3.5.2-alpha/ root@192.168.1.13:/usr/local/
在每一個節點上依次啓動後,檢查集羣是否啓動成功
sh zkServer.sh status 返回結果可能爲leader或follower則表示成功啓動zk集羣。