使用docker搭建zookeeper集羣

1.建立 docker-cpmpose.yml

version: '3.1' services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo2: image: zookeeper restart: always hostname: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo3: image: zookeeper restart: always hostname: zoo3 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

 

2.Zookeeper集羣簡單介紹

         zookeeper身爲分佈式系統協調服務,爲了防止自身掛掉,導致整個系統崩潰,zookeeper維護了一個集羣。docker

         zookeeper集羣由奇數個點組成,採用一主多從的結構,主節點稱爲leader,從節點稱爲flower。網絡

 

3.Zookeeper實現數據一致性

         當某個服務註冊到zookeeper集羣的某個節點時,爲了實現zookeeper集羣的數據一致性,須要將該服務也同時註冊到集羣中的其餘節點上,那咱們應該怎樣去操做,將數據同步呢?併發

         咱們知道zookeeper集羣採用 一主多從 的結構,當咱們將服務註冊到某個從節點時,該從節點向主節點發送消息(該消息中包含服務信息),主節點收到消息以後,會經過廣播(包含服務信息)通知全部從節點,收到消息以後,所有節點開始進行寫操做。實現的數據的一致性。分佈式

 

4.Zookeeper服務的崩潰恢復

          zookeeper集羣中的節點也不是很是穩定的,也有可能由於網絡的緣由或者高併發的緣由而崩潰(通常而言都是主節點崩潰)。當主節點崩潰以後,zookeeper集羣是怎樣實現恢復的呢?高併發

          當zookeeper集羣中的主節點崩潰以後,zookeeper採用 ZAB 協議,它能夠有效的解決zookeeper集羣的崩潰恢復以及數據同步問題。根據 ZAB協議,集羣中的節點存在三種狀態:spa

                      ◉ Looking :選舉狀態;rest

                      ◉ Following :Follower節點(從節點)所處的狀態;code

                      ◉ LEading :Leader節點(主節點)所處狀態;server

          處於正常狀態的zookeeper集羣中的節點存在兩種狀態:主節點(leader) 與 從節點(flower);崩潰以後,zookeeper集羣中的節點都處於 Looking 狀態,集羣會根據ZAB協議投票選舉出擁有最大 ZXID 的節點,讓其處於 Leading狀態。blog

          爲了防止出現多主現象的出現,選舉出來的處於Leading狀態的節點,會向其餘節點發送通知,告訴其餘節點本身是主節點,當大於通常的節點去認同他時,他才能正式稱爲主節點,不然繼續投票選舉。

相關文章
相關標籤/搜索