Zookeeper(4)---ZK集羣部署和選舉

1、集羣部署node

1.準備三臺機器,安裝好ZK。強烈建議奇數臺機器,由於zookeeper 經過判斷大多數節點的存活來判斷整個服務是否可用。3個節點,掛掉了2個表示整個集羣掛掉,而用偶數4個,掛掉了2個也表示其並非大部分存活,所以也會掛掉,這樣反而以爲多浪費了一臺機器資源。數據庫

2.修改配置文件服務器

  固定語法格式:server.節點ID=ip:數據同步端口:選舉端口運維

  節點ID:服務id手動指定1125之間的數字,並寫到對應服務節點的 {dataDir}/myid 文件中。工具

  IP地址:節點的遠程IP地址性能

  數據同步端口:主從同步數據複製端口。測試

  遠舉端口:主節點掛了,選舉新的主節點的通訊端口。spa

  如:3d

    server.1=192.168.0.67:28888:38888日誌

    server.2=192.168.0.68:28888:38888

    server.3=192.168.0.69:28888:38888

  三臺機器都是同樣的內容:

 

 3.配置文件中指定的dataDir目錄下面建立myid文件並寫入配置中的對應值

  個人dataDir目錄是/tmp/zookeeper

 

對應配置中的IP對應的節點ID寫入

192.168.0.67

 

 192.168.0.68

 

 192.168.0.69

 

 4.各自使用配置文件啓動服務

./zkServer.sh start ../conf/zoo.cfg

 

5.查看各自的節點的狀態

./zkServer.sh status

 

 

 

 

 咱們能夠看到有兩臺是follower 一臺是leader

 

6.鏈接集羣

鏈接任意一臺節點便可鏈接集羣,也能夠每一臺都去鏈接,使用,分割

zkCli.sh 後加參數-server 表示鏈接指定IP與端口

./zkCli.sh -server 192.168.0.67:2181

鏈接集羣67節點 寫入數據,而後再鏈接68同樣能夠看到寫入的數據,說明數據同步了

 

 

 若是咱們停掉一臺機器,集羣仍然可用,若是停掉的是leader,那麼集羣會選舉新的leader,選舉的時候整個集羣是不可用的。若是停掉兩臺機器,集羣就會不可用了。

 

2、集羣角色

前面經過./zkServer.sh status 指令咱們看到了集羣角色中的leaderfollower,還有一個observer

 

leader

主節點,又名領導者。用於寫入數據,經過選舉產生,若是宕機將會選舉新的主節點。

follower

子節點,又名追隨者。用於實現數據的讀取。同時他也是主節點的備選節點,並用擁有投票權。

observer

次級子節點,又名觀察者。用於讀取數據,與follower區別在於沒有投票權,不能選爲主節點。而且在計算集羣可用狀態時不會將observer計算入內。

 

observer配置:

只要在集羣配置中加上observer後綴便可,示例以下:

server.3=192.168.0.69:2889:3889:observer

 

3、集羣選舉

前面咱們經過./zkServer.sh status 指令已經看到68機器的leader6769follower

爲何68leader呢?集羣選舉的時候,第一輪所有投給本身,後面每次都遞增投給比本身myid大的相鄰結點。若是票數過半選舉結束。

 

 

假如是四個節點還會進行第三輪選舉,第三輪第一個節點會投給第三個節點,因此若是是4個節點那麼leader就會是第三個節點。

集羣節點中出現選舉有兩種狀況,一種是節點啓動,另外一種是半數以上節點沒法和leader創建鏈接。

當節點初始起動時會在集羣中尋找Leader節點,若是找到則與Leader創建鏈接,其自身狀態變化followerobserver。若是沒有找到Leader,當前節點狀態將變化LOOKING,進入選舉流程。

在集羣運行其間若是有followerobserver節點宕機只要不超過半數並不會影響整個集羣服務的正常運行。但若是leader宕機,將暫停對外服務,全部follower將進入LOOKING 狀態,進入選舉流程。

 

4、數據同步

zookeeper的數據同步是爲了保證各節點中數據的一致性。一個是正常客戶端數據提交,另外一個是服務宕機恢復以後的數據同步。以前的操做咱們也看見了在一臺機器上面寫入數據以後,在其餘的機器上面也是有數據的。

數據寫入時,請求多是發送給follower的,這個時候會將請求轉發給leader

1.clientzk中的server發送寫請求,若是該server不是leader,則會將該寫請求轉發給leader serverleader將請求事務以proposal形式分發給follower

2.follower收到收到leaderproposal時,根據接收的前後順序處理proposal

3.Leader收到follower針對某個proposal過半的ack後,則發起事務提交,從新發起一個commitproposal

4.Follower收到commitproposal後,記錄事務提交,並把數據更新到內存數據庫;當寫成功後,反饋給client

 在集羣運行過程中若是有一個follower節點宕機,因爲宕機節點沒過半,集羣仍然能正常服務。當leader 收到新的客戶端請求,此時沒法同步給宕機的節點。形成數據不一至。爲了解決這個問題,當節點啓動時,第一件事情就是找當前的Leader,比對數據是否一至。不一至則開始同步,同步完成以後在進行對外提供服務。

那麼zk是怎麼來確認數據版本呢,是經過前面介紹過的Zxid,來進行對比的。能參與leader選舉的節點也是zxid最新的節點(最新zxid數據是完整的)

 

Zxid是一個長度64位的數字,其中低32位是按照數字遞增,任何數據的變動都會致使,32位的數字簡單加1。高32位是leader週期編號,每當選舉出一個新的leader時,新的leader就從本地事物日誌中取出ZXID,而後解析出高32位的週期編號,進行加1,再將低32位的所有設置爲0。這樣就保證了每次新選舉的leader後,保證了ZXID的惟一性並且是保證遞增的。

簡單來講就是選舉會讓zxid的高32的數據加1,每次數據變動會讓zxid的低32位數據加1,因此zxid最大的節點數據永遠是最完整的一個。

 

5、集羣運維指令

Zk提供了一些運維相關的指令,能夠經過telnetnczk發出命令。這些命令都有4個字母組成又叫四字運維命令。

默認這些指令是關閉的,經過配置文件中配置4lw.commands.whitelist來開啓這些命令

部分開啓:4lw.commands.whitelist=stat, conf, isro,envi

所有開啓:4lw.commands.whitelist=*

 

可能須要安裝Netcat工具

yum install -y nc

查看服務器及客戶端鏈接狀態:

echo stat | nc localhost 2181

 

1.conf3.3.0中的新增功能:打印有關服務配置的詳細信息。

2.crst3.3.0中的新增功能:重置全部鏈接的鏈接/會話統計信息。

3.dump:列出未完成的會話和臨時節點。這僅適用於leader

4.envi:打印有關服務環境的詳細信息

6.ruok:測試服務器是否以非錯誤狀態運行。若是服務器正在運行,它將以imok響應。不然,它將徹底不響應。響應「 imok」不必定表示服務器已加入仲裁,只是服務器進程處於活動狀態並綁定到指定的客戶端端口。使用「 stat」獲取有關狀態仲裁和客戶端鏈接信息的詳細信息。

7.srst:重置服務器統計信息。

8.srvr3.3.0中的新功能:列出服務器的完整詳細信息。

9.stat:列出服務器和鏈接的客戶端的簡要詳細信息。

10.wchs3.3.0中的新增功能:列出有關服務器監視的簡要信息。

11.wchc3.3.0中的新增功能:按會話列出有關服務器監視的詳細信息。這將輸出具備相關監視(路徑)的會話(鏈接)列表。請注意,根據watch的數量,此操做可能會很昂貴(即影響服務器性能),請當心使用。

12.dirs3.5.1中的新增功能:以字節爲單位顯示快照和日誌文件的總大小

13.wchp3.3.0中的新增功能:按路徑列出有關服務器監視的詳細信息。這將輸出具備關聯會話的路徑(znode)列表。請注意,根據手錶的數量,此操做可能會很昂貴(即影響服務器性能),請當心使用。

14.mntr3.4.0中的新增功能:輸出可用於監視集羣運行情況的變量列表。

相關文章
相關標籤/搜索