使用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維護了一個集群。

         zookeeper集群由奇數個點組成,采用一主多從的結構,主節點稱為leader,從節點稱為flower。

 

3.Zookeeper實現數據一致性

         當某個服務注冊到zookeeper集群的某個節點時,為了實現zookeeper集群的數據一致性,需要將該服務也同時注冊到集群中的其他節點上,那我們應該怎樣去操作,將數據同步呢?

         我們知道zookeeper集群采用 一主多從 的結構,當我們將服務注冊到某個從節點時,該從節點向主節點發送消息(該消息中包含服務信息),主節點收到消息之后,會通過廣播(包含服務信息)通知所有從節點,收到消息之后,全部節點開始進行寫操作。實現的數據的一致性。

 

4.Zookeeper服務的崩潰恢復

          zookeeper集群中的節點也不是非常穩定的,也有可能因為網絡的原因或者高並發的原因而崩潰(一般而言都是主節點崩潰)。當主節點崩潰之后,zookeeper集群是怎樣實現恢復的呢?

          當zookeeper集群中的主節點崩潰之后,zookeeper采用 ZAB 協議,它可以有效的解決zookeeper集群的崩潰恢復以及數據同步問題。根據 ZAB協議,集群中的節點存在三種狀態:

                      ◉ Looking :選舉狀態;

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

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

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

          為了防止出現多主現象的出現,選舉出來的處於Leading狀態的節點,會向其他節點發送通知,告訴其他節點自己是主節點,當大於一般的節點去認同他時,他才能正式稱為主節點,否則繼續投票選舉。

                    

          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM