ZooKeeper 与 2181 端口
2181 是 ZooKeeper 的客户端端口,集群内部的角色分工另有专门端口:2888 用于 Follower 与 Leader 之间的数据同步,3888 用于选举投票。ZooKeeper 常被 Kafka、HBase、Solr 等系统用来存放元数据与服务注册信息,未授权访问时可以读取甚至写入这些节点数据,进而影响依赖它的整套服务。
基本信息
| 服务 | ZooKeeper(客户端连接端口) |
|---|---|
| 协议 | TCP(配置中常写作 clientPort) |
| 集群端口 | 2888 数据同步、3888 选举投票 |
| 典型依赖 | Kafka、HBase、Solr 等组件的元数据存储 |
| 权限要求 | 仅业务网段可达,按需启用访问控制 |
| 配置文件 | zoo.cfg,含 dataDir、clientPort 与四字命令白名单 |
典型使用场景
- Kafka 集群元数据:Broker 注册、主题与分区信息
- HBase 与 Solr 的集群协调与状态存储
- 服务注册与配置下发,业务系统读取节点数据获知依赖状态
- 分布式协调:分布式锁与主节点选举的基础设施
- 集群运维:查看成员角色、连接数与运行指标
四字命令与集群检查
四字命令与集群检查
echo ruok | nc 10.0.0.21 2181 # 返回 imok 说明服务正常存活
echo mntr | nc 10.0.0.21 2181 | head -20 # 关键运行指标
# 关注 zk_server_state 与 zk_followers:集群中应只有一个 leader
echo stat | nc 10.0.0.21 2181 | head -10 # 连接数、模式与节点数
echo conf | nc 10.0.0.21 2181 | head -10 # 查看当前生效配置常见指标判读
| 指标 | 含义 | 正常/异常 |
|---|---|---|
| zk_server_state | 节点角色 | 应恰好有一个 leader,其余为 follower |
| zk_followers | 跟随者数量 | 与集群规模不符说明有节点掉线 |
| zk_avg_latency | 平均请求延迟 | 持续升高通常伴随磁盘或网络抖动 |
| zk_outstanding_requests | 排队请求数 | 长时间不为零说明处理能力不足 |
| Connections | 当前连接数 | 来自非业务网段的连接要核查 |
访问控制与加固要点
访问控制与加固要点
# zoo.cfg 片段:只监听内网地址
clientPort=2181
clientPortAddress=10.0.0.21 # 不要省略,否则可能绑定到所有网卡
# 四字命令白名单(较新版本支持),只放开运维所需的几条
4lw.commands.whitelist=ruok,mntr,stat,srvr
# 启用 ACL 后,客户端需携带认证信息才能读写受保护的节点未授权的 ZooKeeper 可以被直接读取节点数据,也能被写入或删除;依赖它的 Kafka、HBase 会随之出现元数据异常,影响范围远超单个组件。
四字命令是重要的排查入口,但旧版本默认全部开放,较新版本可用白名单收敛;只放开 ruok、mntr、stat 这类只读命令,避免执行影响集群状态的命令。
排障顺序:先用 ruok 确认存活,再用 mntr 看角色与延迟,最后用 stat 或 srvr 看连接与请求情况;集群显示没有 leader 时优先检查 2888 与 3888 的连通性和节点时间同步。