“ZooKeeper 集群”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“=== ZooKeeper 集群的特点 === 有主从之分 ZooKeeper 集群中必须有 master 节点,否则 ZooKeeper 无法正常工作 master:执行读写操作…”的新页面)
 
 
(未显示同一用户的5个中间版本)
第10行: 第10行:
 
ZooKeeper 集群的投票机制,在没有 master 节点时,会重新选举
 
ZooKeeper 集群的投票机制,在没有 master 节点时,会重新选举
  
=== ZooKeeper 集群架构图 ===
+
 
 +
===ZooKeeper 集群架构图===
 
[[文件:ZooKeeper 集群架构图.png|无|缩略图|900x900像素]]
 
[[文件:ZooKeeper 集群架构图.png|无|缩略图|900x900像素]]
 +
 +
 +
===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<syntaxhighlight lang="yaml">
 +
version: "3.1"
 +
services:
 +
  zk1:
 +
    image: zookeeper
 +
    restart: always
 +
    container_name: zk1
 +
    ports:
 +
      - 2181:2181
 +
    environment:
 +
      ZOO_MY_ID: 1
 +
      ZOO_SERVERS: 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:
 +
      - 2182:2181
 +
    environment:
 +
      ZOO_MY_ID: 2
 +
      ZOO_SERVERS: 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:
 +
      - 2183:2181
 +
    environment:
 +
      ZOO_MY_ID: 3
 +
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
 +
 +
</syntaxhighlight><syntaxhighlight lang="shell-session">
 +
[root@bogon docker_zk]# docker-compose up -d
 +
Creating network "dockerzk_default" with the default driver
 +
Creating zk3 ... done
 +
Creating zk3 ...
 +
Creating zk2 ...
 +
[root@bogon docker_zk]# docker ps -a
 +
CONTAINER ID  IMAGE      COMMAND                  CREATED        STATUS        PORTS                                                                    NAMES
 +
03a5d98fbf6f  zookeeper  "/docker-entrypoint.…"  8 seconds ago  Up 5 seconds  2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp  zk2
 +
15cc59636d4e  zookeeper  "/docker-entrypoint.…"  8 seconds ago  Up 5 seconds  2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp  zk3
 +
5033aa3ffae0  zookeeper  "/docker-entrypoint.…"  8 seconds ago  Up 6 seconds  2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp  zk1
 +
[root@bogon docker_zk]#
 +
 +
</syntaxhighlight>

2022年8月17日 (三) 00:27的最新版本

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:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: 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:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: 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:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
[root@bogon docker_zk]# docker-compose up -d
Creating network "dockerzk_default" with the default driver
Creating zk3 ... done
Creating zk3 ... 
Creating zk2 ... 
[root@bogon docker_zk]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                                     NAMES
03a5d98fbf6f   zookeeper   "/docker-entrypoint.…"   8 seconds ago   Up 5 seconds   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp   zk2
15cc59636d4e   zookeeper   "/docker-entrypoint.…"   8 seconds ago   Up 5 seconds   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp   zk3
5033aa3ffae0   zookeeper   "/docker-entrypoint.…"   8 seconds ago   Up 6 seconds   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp   zk1
[root@bogon docker_zk]#