ZooKeeper 选举端口是什么
ZooKeeper 集群由 Leader 与若干 Follower 组成,一旦 Leader 失联,其余节点要通过投票重新选主——承载投票报文的默认端口就是 3888。集群还有另外两个关键端口:2181 面向客户端,2888 用于 Leader 与 Follower 之间的数据复制。zoo.cfg 里 server.N=host:2888:3888 一行同时定义后两个端口,三件套缺一不可。
基本信息
| 服务 | ZooKeeper election port |
|---|---|
| 协议 | TCP |
| 默认端口 | 2181 客户端、2888 复制、3888 选举 |
| 配置文件 | zoo.cfg 中 server.N=主机:2888:3888 |
| 安全等级 | 仅集群内网,禁止跨安全域暴露 |
典型使用场景
- 集群扩容:新增节点时按现有节点格式补齐 server.N 行,保证选举与复制端口一致
- 跨机房部署:核对各节点防火墙是否同时放行 2888 与 3888
- 故障排查:写可用性抖动、连接重置时先看是否频繁进入选举
- 巡检:确认三端口都在监听,且绑定在内网地址上
- 安全评估:确认 2181 是否对业务网之外开放,ZooKeeper 早期版本无认证
确认三端口与集群状态
确认三端口与集群状态
ss -lntp | grep -E ':(2181|2888|3888)'
# zoo.cfg 片段:三节点集群
# server.1=zk1:2888:3888
# server.2=zk2:2888:3888
# server.3=zk3:2888:3888
echo stat | nc 127.0.0.1 2181 # 返回是否为 leader/follower
echo mntr | nc 127.0.0.1 2181 # 关键运行指标三端口分工
| 端口 | 角色 | 故障表现 |
|---|---|---|
| 2181 | 客户端连接与读写 | 客户端报连接失败,业务直接不可用 |
| 2888 | Leader 与 Follower 数据复制 | 写入传播慢,数据可能落后 |
| 3888 | Leader 选举投票 | 集群反复选主,写可用性抖动 |
版本差异:3.5 之后四字母命令(stat、mntr 等)默认受 4lw.commands.whitelist 限制,若手工测试没有回显,先确认该白名单是否配置,而不是先怀疑端口不通。
集群频繁进入选举时先查网络丢包与 3888 是否被策略拦截;选举无法完成的时间超过会话超时,会连带影响依赖 ZooKeeper 做过期判定的上层服务。
巡检与变更要点
- 节点扩缩容后核对每台机器的 zoo.cfg 完全一致,端口与编号不要重复
- 选举端口与复制端口成对放行,跨网段部署时同时确认双向可达
- 会话超时与心跳参数改动前先在测试集群验证,避免生产频繁误判
- 保留集群角色变化记录,便于把写可用性异常与选主事件对应起来
排障顺序建议:先看集群角色与选举次数,再看节点间连通性,最后才怀疑配置错误;顺序颠倒会把网络抖动当成配置问题反复改动。