zookeeper
協同服務系統。
分佈式系統協同處理。
小集羣.
單機版
文件系統層級結構存儲。
path:/home/centos/xxx = znode ---> byte[] <= 1M
節點類型:1. 永久 2.臨時 3.序列節點。10遞增.
數據狀態:版本.
zkServer.sh start
zkServer.sh status
zkCli.sh -server s201:2181
[zkCli]ls /
[zkCli]create / ""
[zkCli]get /
[zkCli]set /
[zkCli]rmr /
api
ZooKeeper zk = new ZooKeeper("s201:2181,s202:2181,...");
zk架構
1.Client
從server獲取信息,週期性發送數據給server,表示自己還活着。
client連接時,server回傳ack信息。
如果client沒有收到reponse,自動重定向到另一個server.
2.Server
zk集羣中的一員,向client提供所有service,回傳ack信息給client,表示自己還活着。
3.ensemble
一組服務器。
最小節點數是3.
4.Leader
如果連接的節點失敗,自定恢復,zk服務啓動時,完成leader選舉。
5.Follower
追尋leader指令的節點。
znode
zk中的節點,維護了stat,由Version number, Action control list (ACL), Timestamp,Data length.構成.
data version //數據寫入的過程變化
ACL //action control list,
節點類型
1.持久節點
client結束,還存在。
2.臨時節點
在client活動時有效,斷開自動刪除。臨時節點不能有子節點。
leader推選是使用。
3.序列節點
在節點名之後附加10個數字,主要用於同步和鎖.
Session
Session中的請求以FIFO執行,一旦client連接到server,session就建立了。sessionid分配client.
client以固定間隔向server發送心跳,表示session是valid的,zk集羣如果在超時時候,沒有收到心跳,
判定爲client掛了,與此同時,臨時節點被刪除。
Watches
觀察。
client能夠通過watch機制在數據發生變化時收到通知。
client可以在read 節點時設置觀察者。watch機制會發送通知給註冊的客戶端。
觀察模式只觸發一次。
session過期,watch機制刪除了。
zk工作流程
zk集羣啓動後,client連接到其中的一個節點,這個節點可以leader,也可以follower。
連通後,node分配一個id給client,發送ack信息給client。
如果客戶端沒有收到ack,連接到另一個節點。
client週期性發送心跳信息給節點保證連接不會丟失。
如果client讀取數據,發送請求給node,node讀取自己數據庫,返回節點數據給client.
如果client存儲數據,將路徑和數據發送給server,server轉發給leader。
leader再補發請求給所有follower。只有大多數(超過半數)節點成功響應,則
寫操作成功。
leader推選過程(最小號選舉法)
1.所有節點在同一目錄下創建臨時序列節點。
2.節點下會生成/xxx/xx000000001等節點。
3.序號最小的節點就是leader,其餘就是follower.
4.每個節點觀察小於自己節點的主機。(註冊觀察者)
5.如果leader掛了,對應znode刪除了。
6.觀察者收到通知。
配置完全分佈式zk集羣
1.挑選3臺主機
s201 ~ s203
2.每臺機器都安裝zk
tar
環境變量
3.配置zk配置文件
s201 ~ s203
[/soft/zk/conf/zoo.cfg]
...
dataDir=/home/centos/zookeeper
server.1=s201:2888:3888
server.2=s202:2888:3888
server.3=s203:2888:3888
4.在每臺主機的/home/centos/zookeeper中添加myid,內容分別是1,2,3
[s201]
$>echo 1 > /home/centos/zookeeper/myid
[s202]
$>echo 2 > /home/centos/zookeeper/myid
[s203]
$>echo 3 > /home/centos/zookeeper/myid
5.啓動服務器集羣
$>zkServer.sh start
...
6.查看每臺服務器的狀態
$>zkServer.sh status
7.修改zk的log目錄