这是《ClickHouse 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 数据均衡不仅看磁盘容量,还要看写入吞吐、查询负载、part 数量、合并压力和副本延迟。ClickHouse 不会自动满足所有维度的“均衡”,需要容量规划和运维机制。
20.1 均衡维度
| 维度 | 观察 |
|---|---|
| 磁盘空间 | 分片和磁盘剩余量 |
| 写入量 | 行数、字节、批次 |
| 查询量 | QPS、扫描量、CPU |
| part 数 | 合并压力 |
| 副本队列 | 同步延迟 |
| 网络 | 分片间和应用流量 |
只按磁盘均衡,可能出现某分片查询 CPU 持续过热。
20.2 查看容量
SELECT
name,
path,
free_space,
total_space,
keep_free_space
FROM system.disks
ORDER BY free_space;
按表查看:
SELECT
database,
table,
sum(bytes_on_disk) AS bytes,
sum(rows) AS rows,
count() AS parts
FROM system.parts
WHERE active
GROUP BY database, table
ORDER BY bytes DESC;
20.3 查看写入分布
SELECT event_date, cityHash64(user_id) % 4 AS bucket, count()
FROM analytics.events_all
GROUP BY event_date, bucket
ORDER BY event_date, bucket;
真实集群应采集各节点本地表的写入指标,并结合监控系统的磁盘吞吐、CPU 和网络曲线判断。
20.4 写入热点
常见原因:
- 大租户或大用户集中;
- 分片键基数低;
- 路由表达式倾斜;
- 集群权重配置不当;
- 某分片副本异常;
- 应用直连配置错误。
处理:
- 重新评估分片键;
- 大租户独立路由;
- 使用 hash 后均匀桶;
- 调整写入并发;
- 修复异常副本;
- 规划数据迁移。
20.5 查询热点
SELECT
query,
count() AS executions,
sum(read_rows) AS total_read_rows,
avg(query_duration_ms) AS avg_ms
FROM system.query_log
WHERE event_date >= today() - 1
GROUP BY normalized_query_hash, query
ORDER BY total_read_rows DESC
LIMIT 20;
处理方式:
- 慢查询优化;
- 预聚合;
- 读写入口分离;
- 查询排队;
- 限制扫描量;
- 大报表错峰;
- 增加只读副本。
20.6 分片权重
远程服务器分片可以配置权重:
<shard>
<weight>2</weight>
<replica>...</replica>
</shard>
权重影响写入或查询分布的具体行为与版本和使用方式有关。它不能解决业务键倾斜,也不能替代路由测试。
20.7 扩容方式
常见策略:
| 策略 | 说明 |
|---|---|
| 只加副本 | 提升读吞吐和可用性,不增加分片存储 |
| 加分片 | 提升写入和存储容量,需要路由规划 |
| 混合扩容 | 常见生产方案 |
| 迁移热点表 | 隔离大租户或高负载业务 |
| 冷热分层 | 历史数据移动到 cheaper 存储 |
加副本相对简单;加分片必须确认数据路由是否变化。
20.8 数据迁移
安全流程:
1. 停止或暂停目标表写入
2. 记录数据边界
3. 新集群建表
4. 分批复制历史分区
5. 校验行数、指纹和指标
6. 切换写入
7. 观察查询
8. 保留回滚窗口
复制分区:
INSERT INTO new_cluster.analytics.events_local
SELECT *
FROM old_cluster.analytics.events_local
WHERE event_date = '2026-08-01';
跨集群远程查询要控制并发和批大小,避免影响生产。
20.9 冷热分层
ClickHouse 支持存储策略,可以把热数据放 SSD,冷数据放对象存储或机械盘。配置与版本强相关,上线前要验证:
- 移动策略;
- 查询性能;
- 对象存储权限;
- 网络带宽;
- 故障恢复;
- 成本模型。
20.10 容量规划
估算公式:
原始日志大小
× 写入放大
× 副本数
÷ 压缩率
+ 索引和投影
+ 合并临时空间
+ 预留空间
= 需要磁盘容量
建议预留:
- 合并临时空间;
- 备份窗口;
- 查询临时文件;
- 升级回滚;
- 流量增长;
- 数据重放。
本章小结
数据均衡是容量、写入、查询、合并和网络的综合治理。分片键决定长期分布,副本影响读能力,存储策略影响成本。扩容前必须明确路由是否变化,并准备分批迁移、校验和回滚方案。
思考题
- 磁盘均衡是否代表系统均衡?
- 写入热点如何定位?
- 加副本和加分片分别解决什么问题?
- 分片路由变化有什么风险?
- 容量规划为什么要预留合并空间?