功能介绍
天翼云 ClickHouse 支持通过水平扩容增加集群节点,提升整体计算能力与存储容量。但集群扩容后,原有分片的数据无法自动均衡分布,易出现分片数据倾斜、磁盘利用率不均、查询性能下降等问题。
集群数据重分布功能提供可视化白屏化操作能力,当前仅支持Resharding 模式:基于分布式表的分片哈希规则,将全量数据重新写入集群所有分片,实现分片间数据均匀分布,是扩容后数据均衡、分片倾斜治理的核心运维手段。
注意事项
存储空间要求 Resharding 模式为全量数据重写,执行过程中会生成临时表,需要集群剩余磁盘空间大于待重分布表的总数据大小,避免空间不足导致任务失败。
任务并发限制
(1)一个数据表只能同时绑定一个重分布任务;
(2)一个集群最多同时运行一个数据重分布任务。表引擎与库类型限制
(1)仅支持 MergeTree 家族引擎表(包含普通 MergeTree、ReplicatedMergeTree 系列复制表),不支持物化视图表;
(2)表所在数据库必须为atomic(默认)或ordinary类型。表架构要求本地表的副本配置必须与cluster配置一致,且必须存在对应的分布式表,作为分片映射与数据路由的依据。
数据分布规则 Resharding 模式严格按照分布式表的分片键哈希规则进行数据重分布,确保数据按分片键均匀落到各个分片。
临时表与备份机制
(1)重分布过程自动生成临时表,命名规则:_resharding_任务id_原表名_temp_随机数;
(2)任务进入「待切换」状态时,需先验证临时表数据的正确性与完整性,再执行切换操作;切换时后台会查询出源表和临时表各个partition下各个节点的数据对比,以供判断数据完整性;原表读写限制
(1)重分布过程中,原表默认置为只读状态,保障重分布期间的数据一致性;
(2)支持按 Partition 粒度部分重分布:若重分布的分区无业务写入,可选择开启原表可写;若重分布分区有持续写入,开启可写会导致数据不一致,不建议开启;
(3)不支持全部分区维度下的原表可写配置。冷热分层集群特殊要求 已开启冷热分层功能的集群,执行数据重分布前,建议先执行一次集群滚动重启,确保存储策略、冷存储卷挂载状态正常。
副本配置要求 Resharding 模式依赖集群所有分片的internal_replication配置统一,全部为 true 或全部为 false。
切换影响说明:数据表切换为秒级操作,切换瞬间可能出现短暂的数据读取不一致,建议在业务低峰期执行。
操作步骤
1、进入数据重分布页面
登录天翼云控制台,进入【云数据仓库 ClickHouse】产品管理页面;
在集群列表中选择目标集群,点击进入集群详情页面;
在左侧导航栏点击【数据重分布】,进入任务管理页面,可查看当前集群所有历史与运行中的重分布任务。
2、新建重分布任务
点击页面右上角【新建任务】,弹出任务配置窗口;
按照下表配置任务参数,配置完成参数确认无误后,点击【确定】提交任务,任务进入初始化状态。
| 参数项 | 参数说明 | 配置要求 |
|---|---|---|
| 任务名称 | 重分布任务的唯一标识名称 | 长度 6-36 字符,支持中文、字母、数字、下划线、中划线 |
| 目标cluster | 执行重分布的虚拟集群(v_cluster) | 选择对应cluster集群 |
| 选择数据表 | 需要执行重分布的目标表 | 从分布式表列表选择,对应本地表自动关联,支持多选 |
| Partition 列表 | 选择重分布的分区范围 | 默认全部分区;支持按住 Shift 键多选指定分区,实现分批重分布 |
| 是否可写 | 重分布期间原表是否开放写入权限 | 默认关闭(原表只读);仅无写入的历史分区建议开启 |
| 单机并发数 | 单台节点同时处理的分区粒度并发数 | 取值范围 1-10,默认3;根据节点规格与业务负载调整,数值越大执行速度越快,但是节点负载越高 |
3、启动与监控任务
在任务列表中找到新建的任务,点击操作列的【启动】按钮,任务进入执行中状态,集群实例状态同步变为数据重分布中;
任务运行过程中,可在任务详情页查看任务实时进度:已完成数据表数量、总数据量、已执行数据量、平均执行速度;
若需调整任务速度或降低集群负载,点击【修改参数】,可修改单机并发数,参数实时生效。
4、数据校验与切换
当所有表重分布完成后,任务进入待切换状态,此时临时表数据已生成完毕;
数据校验(必做步骤):通过查询临时表,对比原表与临时表的总大小、总行数,确认数据一致性与准确性;
校验通过后,点击操检查窗口的【确认切换】按钮,确认后执行表切换:临时表正式替换原表,成为业务读写的唯一数据源。
任务状态说明
初始化:任务已创建,尚未启动,可编辑参数或删除任务。
执行中:正在执行数据重写与重分布,对集群读写性能有一定影响。
待切换:数据重分布完成,等待人工校验后执行表切换。
执行成功:原表备份已删除,重分布全流程执行完成。
已取消:任务被手动终止,已执行的操作已回滚。
暂停:任务因集群异常、空间不足等原因中断,修复后可继续执行。
最佳实践
适用场景
集群水平扩容后,分片间数据量严重不均衡;
业务持续写入导致分片数据倾斜,部分分片磁盘使用率过高、查询性能下降;
修改分布式表分片键后,需要按新的分片规则重新分布数据。
重分布前参数优化
1、解除删表大小限制
重分布过程涉及临时表删除操作,建议提前设置参数,避免因表大小超过阈值导致删除失败,进而造成任务暂停:
SET max_table_size_to_drop = 0;
SET max_partition_size_to_drop = 0;2、提升后台合并能力
32 核以上高配节点,建议调大后台合并线程池,防止重分布大量写入产生过多小 Part,触发Too Many Parts错误:
<background_pool_size>64</background_pool_size>
<background_schedule_pool_size>64</background_schedule_pool_size>操作建议
业务低峰期执行:Resharding 为全量数据重写,会占用大量 CPU 与磁盘 IO 资源,建议在业务低峰期执行,降低对在线业务的影响;
大表分批重分布:TB 级超大表建议按 Partition 粒度分批执行重分布,控制单次任务数据量,降低故障影响范围;
提前合并小 Part:重分布前执行OPTIMIZE TABLE 表名,合并小数据 Part,减少文件数量,提升重分布传输效率;
严格数据校验:切换前必须完成行数校验、大小校验、核心业务指标聚合校验,确保数据零丢失、零错误。
常见问题与故障排查
任务进入暂停状态
常见原因:集群节点离线、网络抖动、目标分片磁盘空间不足、参数限制导致临时表删除失败。
处理方式:进入任务详情页面查看暂停原因,对应修复集群故障、扩容磁盘空间、调整参数后,点击「继续」恢复任务;无法自行排查恢复时,可提交工单联系技术支持协助处理。
重分布后数据不一致
常见原因:重分布期间手动开启了原表可写,且有新数据持续写入;切换前临时表数据未完全同步。
处理方式:保持原表只读,重新执行重分布任务;严格遵循重分布期间原表只读的操作规范。
重分布执行速度过慢
常见原因:并发参数设置过低、原表小 Part 数量过多、集群业务高峰期负载高。
处理方式:适当调大任务总并发数与节点级并发数;重分布前执行OPTIMIZE合并小 Part;避开业务高峰时段执行任务。
切换操作失败
常见原因:切换瞬间原表有 DDL 操作、集群 ZooKeeper 元数据不一致、节点状态异常。
处理方式:重试切换操作;若持续失败,检查集群节点状态与 ZK 元数据健康度,修复后再次执行。