ZooKeeper 集群

来自姬鸿昌的知识库
Jihongchang讨论 | 贡献2022年8月16日 (二) 10:57的版本
跳到导航 跳到搜索

ZooKeeper 集群的特点

有主从之分

ZooKeeper 集群中必须有 master 节点,否则 ZooKeeper 无法正常工作

master:执行读写操作

slave:执行读操作

ZooKeeper 集群的投票机制,在没有 master 节点时,会重新选举


ZooKeeper 集群架构图

ZooKeeper 集群架构图.png


ZooKeeper 集群中节点的角色

1、Leader:Master 主节点

2、Follower:从节点,参与选举全新的 Leader

3、Observer:从节点,不参与投票

4、Looking:正在找 Leader 节点的节点


ZooKeeper 投票策略

1、每一个 ZooKeeper 服务都会被分配一个全局唯一的 myid,myid 是一个数字。

2、ZooKeeper 在执行写数据时,每一个节点都有一个自己的 FIFO 的队列。保证写每一个数据的时候,顺序是不会乱的,ZooKeeper 还会给每一个数据分配一个全局唯一的 zxid,数据越新 zxid 越大。


选举 Leader:

1、选举出 zxid 最大的节点作为 Leader。

2、在 zxid 相同的节点中,选举出一个 myid 最大的节点,作为 Leader。


搭建 ZooKeeper 集群

docker-compose.yml

version: "3.1"
services: 
  zk1:
    image: zookeeper
    restart: always
    container_name: zk1
    ports:
      - 2181:2182
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVICES: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk2:
    image: zookeeper
    restart: always
    container_name: zk2
    ports:
      - 2181:2182
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVICES: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk3:
    image: zookeeper
    restart: always
    container_name: zk3
    ports:
      - 2181:2182
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVICES: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181