Zookeeper 部署方式:
Zookeeper 部署有三种方式,单机模式、集群模式、伪集群模式。
- 单机模式:存在单点故障
- 集群模式:在多台机器上部署 Zookeeper 集群,适合线上环境使用。
- 伪集群模式:在一台机器同时运行多个 Zookeeper 实例,仍然有单点故障问题,当然,其中配置的端口号要错开的,适合实验环境模拟集群使用。
注意:
集群为大于等于3个奇数,如 3、5、7,不宜太多,集群机器多了选举和数据同步耗时长,不稳定
使用集群模式安装Zookeeper。
由于是docker,所以并不是伪集群
docker-compose.yml
version: '3.1'
services:
zoo1:
image: zookeeper:3.4.13
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:3.4.13
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:3.4.13
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
选举:根据最新事务 ID(ZXID)来选举,谁最大,谁当leader。理论上如此。so,直接测试一下第三个服务是不是leader?
启动
docker-compose up -d
交互式进入容器
docker exec -it zookeeper_zoo3_1 /bin/bash
./bin/zkServer.sh status
然后出问题了,这是个大坑。fuck。因为用的是最新版本,建议使用3.4.13或者3.4.14
尝试解决这个bug,最终选择了沉默。降版本号为3.4.14
猜想错误,服务3并不是leader,测试一下,其他两台
服务1也是follow,故服务2为leader