ZooKeeper启动所有节点都是Mode: leader

本文介绍了一种常见的情况,在配置ZooKeeper集群时,由于myid设置不当导致所有节点都显示为Leader的状态。文章详细解释了正确的配置方法,并提供了如何修正这一问题的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

启动 ZooKeeper时,发现所有的节点都是leader


问题描述:

安装完ZooKeeper,启动ZooKeeper,所有节点都是Mode: leader

JMX enabled by default
Using config: /opt/cloudera/parcels/CDH-6.0.0/lib/zookeeper/bin/../conf/zoo.cfg
Mode: leader

原因分析:

组成ZooKeeper的成员服务器。server.x的x是服务器号,与对应服务器dataDir中myid文件内的号码一致。我这边的myid设定入下,但我却忘记设定server.x的x是服务器号,导致所有都是Mode: leader
在这里插入图片描述

在这里普及一下服务器状态:
LOOKING:寻找Leader状态。当服务器处于该状态时,它认为当前集群中没有Leader。
FOLLOWING:跟随者状态,表明当前服务器角色Follower。
LEADING:领导者状态,表明当前服务器角色是Leader。
OBSERVING:观察者状态,表明当前服务器是Observer。


解决方案:

在configuration 中搜索框输入zoo.cfg,分别将刚刚的myid号码一致,例如server.1 对应的是004。所以server.1=004:2888:3888,以此类推。这里指定两个端口号,前一个用于Follower连接Leader,后一个用于Leader选举。然后设定好重新启动ZooKeeper,就没问题哦!

在这里插入图片描述

### 正确配置 `bitnami/zookeeper` 和 `bitnami/kafka` 的 Docker 容器 为了实现 ZooKeeper 和 Kafka 集群的正确配置,可以按照以下方式设置容器及其参数。 #### 1. **ZooKeeper 配置** 对于 `bitnami/zookeeper` 容器,需要定义每个节点的身份 (`ZOO_SERVER_ID`) 及其连接地址列表。以下是具体的环境变量和端口映射: - 环境变量: - `ZOO_SERVER_ID=1`: 表示第一个 ZooKeeper 节点的 ID[^1]。 - `ZOO_SERVERS=localhost:2888:3888;localhost:2889:3889;localhost:2890:3890`: 列出了所有 ZooKeeper 节点的地址和端口。 - 端口映射: - `-p 2181:2181`: 对应客户端通信端口。 - `-p 2888:2888`: 同步端口用于内部集群同步。 - `-p 3888:3888`: Leader选举端口。 ```yaml version: '3' services: zookeeper1: image: 'bitnami/zookeeper:latest' environment: - ALLOW_ANONYMOUS_LOGIN=yes - ZOO_SERVER_ID=1 - ZOO_SERVERS=zookeeper1:2888:3888;zookeeper2:2888:3888;zookeeper3:2888:3888 ports: - '2181:2181' - '2888:2888' - '3888:3888' ``` #### 2. **Kafka 配置** 针对 `bitnami/kafka` 容器,需指定 ZooKeeper 连接字符串及其他必要参数: - 环境变量: - `KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181`: 指定 ZooKeeper 集群的连接地址。 - `ALLOW_PLAINTEXT_LISTENER=yes`: 允许明文监听器(仅适用于测试环境)[^3]。 - 端口映射: - `-p 9092:9092`: 外部访问 Kafka 的默认端口。 ```yaml kafka1: image: 'bitnami/kafka:latest' depends_on: - zookeeper1 - zookeeper2 - zookeeper3 environment: - KAFKA_BROKER_ID=1 - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 - ALLOW_PLAINTEXT_LISTENER=yes ports: - '9092:9092' ``` #### 3. **Network Mode** 推荐为所有服务创建一个自定义网络以便于管理和服务发现: ```yaml networks: app-tier: driver: bridge ``` 并将该网络应用到所有服务中: ```yaml services: zookeeper1: networks: - app-tier kafka1: networks: - app-tier ``` #### 4. **集成 Kafka Manager** 要监控 Kafka 集群的状态,可以通过部署 `Yahoo/kafka-manager` 来完成。具体配置如下: - 环境变量: - `ZK_HOSTS=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181`: 指向 ZooKeeper 集群的地址[^4]。 ```yaml kafka-manager: image: 'yahoo/kafka-manager:latest' environment: - ZK_HOSTS=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 ports: - '9000:9000' networks: - app-tier ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值