探索 ClickHouse Keeper 状态监控,构建全栈可观测性

ClickHouse Keeper监控全解析

在 ClickHouse 集群架构中,ClickHouse Keeper(自 v21.8 起引入)作为 ZooKeeper 的轻量级替代品,承担着协调复制、管理元数据、选举 leader等关键职责。它虽不存储业务数据,但一旦出现异常,会导致数据无法写入、副本不同步、查询失败等严重问题。

因此,对 ClickHouse Keeper 的状态进行监控,是构建 全栈可观测性(Full-stack Observability) 的关键一环。

本篇将深入详解如何监控 ClickHouse Keeper 的健康状态、性能指标与潜在风险,并集成到统一监控体系中。


🎯 一、为什么必须监控 ClickHouse Keeper?

风险后果
Leader 选举失败写入阻塞,复制停滞
网络延迟高合并任务变慢,TTL 清理延迟
节点宕机副本无法同步,可能脑裂
日志堆积操作队列积压,数据不一致

✅ 监控目标:

  • 实时掌握 Keeper 集群健康状态
  • 提前发现性能瓶颈
  • 快速定位故障节点
  • 构建自动化告警机制

🏗️ 二、ClickHouse Keeper 的核心组件

[Client (ClickHouse)] ←→ [ClickHouse Keeper Node 1] (Leader)
                             [ClickHouse Keeper Node 2] (Follower)
                             [ClickHouse Keeper Node 3] (Follower)
  • 基于 Raft 协议 实现一致性
  • 一个集群中只有一个 Leader
  • 所有写操作通过 Leader 提交,再同步给 Follower

🔍 三、关键监控指标

1. 角色状态(Leader/Follower)

SELECT * FROM system.clusters WHERE cluster = 'keeper_cluster';

或通过 Keeper 自身接口:

echo "is_leader" | nc keeper1 9181
# 输出: "yes" 或 "no"

✅ 健康状态:有且仅有一个 Leader


2. 节点存活状态

echo "status" | nc keeper1 9181

输出示例:

mode: follower
term: 10
leader_id: 1
node_id: 2
...

✅ 关键字段:

  • mode: leader / follower
  • leader_id: 当前 leader 节点 ID
  • term: 任期,频繁变化可能表示网络不稳定

3. Raft 日志延迟(Latency)

echo "metrics" | nc keeper1 9181 | grep "raft_log_last_committed_index"

或监控:

  • raft_log_last_committed_index:已提交日志位置
  • raft_log_last_stored_index:已存储日志位置
  • 差值越大,延迟越高

4. 请求处理延迟

echo "metrics" | nc keeper1 9181

关注:

  • session_request_processing_time_us:请求处理耗时(微秒)
  • commit_log_sync_time_us:日志同步耗时
  • 建议 P99 < 100ms

5. 连接数与会话

echo "sessions" | nc keeper1 9181

输出:

Session 12345 (192.168.1.10:56789) timeout: 30000ms

✅ 监控活跃会话数,防止连接泄露


📊 四、实战:使用 Prometheus + Grafana 监控

1. 配置 Prometheus 抓取 ClickHouse Keeper 指标

prometheus.yml 中添加:

- job_name: 'clickhouse-keeper'
  static_configs:
    - targets: ['keeper1:9181', 'keeper2:9181', 'keeper3:9181']
  metrics_path: '/metrics'
  scheme: http

✅ ClickHouse Keeper 默认暴露 /metrics 接口(v22+)


2. 推荐监控面板(Grafana)

创建一个名为 “ClickHouse Keeper Cluster Monitor” 的仪表盘,包含以下 Panels:

Panel 1:集群角色分布
clickhouse_keeper_mode{job="clickhouse-keeper"}
  • 使用 GaugeText 显示每个节点角色
Panel 2:Leader 切换次数(告警)
changes(clickhouse_keeper_term[5m]) > 0

✅ 频繁切换可能表示网络或磁盘问题

Panel 3:请求延迟(P99)
histogram_quantile(0.99, sum(rate(clickhouse_keeper_session_request_processing_time_us_bucket[1m])) by (le))
Panel 4:Raft 日志同步延迟
clickhouse_keeper_raft_log_last_stored_index - clickhouse_keeper_raft_log_last_committed_index

✅ 应接近 0

Panel 5:活跃会话数
clickhouse_keeper_sessions_count
Panel 6:磁盘写入延迟
clickhouse_keeper_commit_log_sync_time_us

🛠️ 五、结合 ClickHouse 系统表监控复制状态

Keeper 的问题会直接影响 ClickHouse 副本同步。

查询 system.replicas 状态

SELECT 
    table,
    is_leader,
    is_readonly,
    queue_size,
    absolute_delay,
    total_replicas,
    active_replicas
FROM system.replicas 
WHERE database = 'default';

✅ 关键指标:

  • queue_size > 100:操作积压,可能 Keeper 延迟
  • absolute_delay > 60:同步延迟高
  • active_replicas < total_replicas:副本失联

⚠️ 六、常见问题与排查

问题排查方法
is_readonly = 1检查 Keeper 连接,echo "status" | nc
queue_size 持续增长检查 Keeper 延迟、磁盘 I/O
无法写入检查是否无 Leader,或网络分区
合并慢检查 commit_log_sync_time_us 是否过高
节点无法加入集群检查 raft_configuration 是否一致

✅ 七、最佳实践建议

项目建议
节点数量3 或 5(奇数,避免脑裂)
磁盘使用 SSD,独立挂载
网络低延迟、高带宽,避免跨机房
配置一致性所有节点 config.xmlraft_configuration 必须一致
监控频率Prometheus 抓取间隔 ≤ 15s
告警规则设置 Leader 切换、延迟过高、会话异常告警

🎯 八、总结:ClickHouse Keeper 监控的核心价值

能力说明
👁️ 可观测性实时掌握集群协调层状态
🚨 主动告警提前发现 Keeper 性能瓶颈
🔍 故障定位区分是 Keeper 问题还是 ClickHouse 问题
📈 性能优化优化 Raft 日志、减少延迟
🧩 全栈监控与 ClickHouse、Kafka、MinIO 统一监控

🎯 ClickHouse Keeper 是集群的“神经系统”
不监控它,就像开车不看仪表盘。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值