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状态的节点,会向其他节点发送通知,告诉其他节点自己是主节点,当大于一般的节点去认同他时,他才能正式称为主节点,否则继续投票选举。

                    

          

posted on 2019-07-17 21:28  长发飘飘程序员  阅读(533)  评论(1编辑  收藏  举报