ZooKeeper 集群通信与 2888 端口
2888 是 ZooKeeper 集群内部的复制端口,领导者节点通过它把写事务同步给跟随者;跟随者之间的选举投票使用 3888,客户端访问则使用 2181。三者的角色要一起记住:只放行 2181 而漏掉 2888 与 3888,集群会表现为客户端偶发超时、日志中只有连接丢失这类含糊信息,排查时容易误判为网络抖动。
基本信息
| 服务 | ZooKeeper 集群节点间复制端口 |
|---|---|
| 协议 | TCP |
| 配套端口 | 2181 客户端访问、3888 领导者选举 |
| 集群规模 | 推荐奇数个节点,3 或 5 台 |
| 配置文件 | zoo.cfg 中每个节点的 server.编号 条目 |
| 安全等级 | 仅集群内网可达 |
典型使用场景
- 集群元数据存储:为上层组件提供强一致的配置与状态数据
- 主节点选举:多个实例通过临时节点竞争唯一主节点
- 分布式协调:分布式锁、队列与命名服务的基础设施
- 配置变更通知:客户端监听节点变化获取最新配置
- 巡检与容量评估:观察节点角色与请求延迟变化趋势
检查集群角色与端口
检查集群角色与端口
echo stat | nc zk-node1 2181 # 返回中可看到节点角色
echo mntr | nc zk-node1 2181 | grep -E 'state|followers' # 角色与跟随者数量
ss -lntp | grep -E '2181|2888|3888' # 本机三个端口的监听情况
# zoo.cfg 中每个节点应有独立的 server 条目,写明复制与选举端口三个端口的分工
| 端口 | 用途 | 缺失后的表现 |
|---|---|---|
| 2181 | 客户端连接与读写 | 客户端直接无法连接 |
| 2888 | 领导者向跟随者同步数据 | 数据不一致、写入偶发失败 |
| 3888 | 领导者选举投票 | 节点掉线后无法重新选出领导者 |
跨机房部署时若漏放 2888 与 3888,跨机房复制与选举会超时,集群可能频繁进入不可写状态;集群端口应只对集群成员开放。
数据目录与事务日志建议放在独立磁盘上:ZooKeeper 对写入延迟敏感,与高负载服务共享磁盘会先出现请求延迟上升,随后影响依赖它的上层组件。
排查顺序:先用四个字命令确认集群是否还有唯一领导者,再看各节点的端口监听与成员配置,最后检查节点间网络与磁盘;多数不可写状态都源于集群无法形成多数派,而不是单个客户端的问题。