“ZooKeeper 集群”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的4个中间版本) | |||
第39行: | 第39行: | ||
=== 搭建 ZooKeeper 集群 === | === 搭建 ZooKeeper 集群 === | ||
− | <syntaxhighlight lang="yaml"> | + | |
+ | |||
+ | docker-compose.yml<syntaxhighlight lang="yaml"> | ||
version: "3.1" | version: "3.1" | ||
− | services: | + | services: |
zk1: | zk1: | ||
image: zookeeper | image: zookeeper | ||
restart: always | restart: always | ||
container_name: zk1 | container_name: zk1 | ||
− | + | ports: | |
− | - 2181: | + | - 2181:2181 |
environment: | environment: | ||
ZOO_MY_ID: 1 | 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: | zk2: | ||
image: zookeeper | image: zookeeper | ||
restart: always | restart: always | ||
container_name: zk2 | container_name: zk2 | ||
− | + | ports: | |
− | - 2181 | + | - 2182:2181 |
environment: | environment: | ||
ZOO_MY_ID: 2 | 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: | zk3: | ||
image: zookeeper | image: zookeeper | ||
restart: always | restart: always | ||
container_name: zk3 | container_name: zk3 | ||
− | + | ports: | |
− | - 2181 | + | - 2183:2181 |
environment: | environment: | ||
ZOO_MY_ID: 3 | 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> | </syntaxhighlight> |
2022年8月17日 (三) 00:27的最新版本
ZooKeeper 集群的特点
有主从之分
ZooKeeper 集群中必须有 master 节点,否则 ZooKeeper 无法正常工作
master:执行读写操作
slave:执行读操作
ZooKeeper 集群的投票机制,在没有 master 节点时,会重新选举
ZooKeeper 集群架构图
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]#