缩容迁移

最近更新时间:2024-04-28 14:06:41

我的收藏

功能介绍

本文为您介绍通过控制台进行 ClickHouse 集群数据缩容迁移的能力。目前云数据仓库 TCHouse-C 已经支持通过水平缩容来减少集群节点,下线节点上的数据需要移动到剩余节点中,来保业务数据不丢失。云数据仓库 TCHouse-C 的缩容迁移可以支持业务数据以 Part 粒度从下线节点上保留到剩余节点中,并在剩余节点中均匀分布。

注意事项

1. 节点数据迁移是基于 part 粒度进行迁移,从源端分片迁移到目标分片,会让目标分片的相关表数据按照 part 粒度达到均衡。
2. 一个数据表只能与一个任务绑定,一个集群最多同时只支持一个任务执行中。
3. 本地表数据库必须为 atomic(默认)或 ordinary,且表类型为 Mergetree 家族系列引擎的表(包括非复制表和复制表,不支持物化视图表)。
4. 本地表副本关系必须和 cluster 一致,必须有分布式表作为分片之间的关系。
5. 迁移过程会生成临时表,临时表命名规则为:原表名_ resharding_temp_ 任务 id_ 随机数字。等到“待切换”状态时,请先验证临时表数据正确无误,再进行切换。切换完成后,原表数据保存在 “原表名 resharding 任务 id 随机数字” 的表中,验证无误后可进行老数据的删除操作。
6. 迁移过程中原表默认置为只读状态;表级别可以选择 Partition 粒度部分数据迁移,如果参与迁移的 Partition 没有数据写入,可选择关闭表只读;如果参与迁移的 Partition 有数据写入,关闭表只读会导致数据不一致。目前不支持选择全部 Partition下支持可写。
7. 迁移任务可以配置任务总并发数和节点级并发数对任务进行性能控制,当两个值有0时,任务会停滞进入暂停状态。
8. 迁移的数据会先保存到临时表中,执行切换的时候会用迁移后的均衡数据文件替换原表,该过程中可能读到错误数据,切换时间正常为秒级。
9. 任务进行过程中有可能由于集群问题导致任务暂停,任务暂停后可根据报错进行集群修复或配置,集群修复成功可以继续任务执行。
10. 迁移的本地表和分布式表的建表语句字符串必须完全一致。
11. 使用云盘做冷热分层的集群,需要在使用缩容迁移功能之前执行一次集群重启。
警告:
1. 数据量大或者表数量较多的情况下,不建议使用该功能。
2. 为了保证缩容迁移任务尽快完成,数据迁移任务过程中,需要暂停数据写入,直到缩容迁移任务结束。

操作步骤

1. 登录 云数据仓库 TCHouse-C 控制台,在集群列表中选择对应的集群,在集群详情页面单击数据管理 > 数据迁移 > 缩容迁移页面。
2. 可在当前页面查看已有的缩容迁移任务列表。



3. 单击新建任务创建新的缩容迁移任务,需填写任务名称、选择表所在的 v_cluster、源端分片、目标分片,选择迁移的分布式表,单击确定提交。 选择源端分片和目标分片的时候,建议根据水平节点缩容的需求拉齐,将待下线分片节点作为源端分片。 缩容迁移目前默认是使用 Part模式 来迁移数据的。通过在将源端分片上的表的 part,来实现 shard 间的数据均衡。这种方式不遵循分布式表的分片规格,更适合 rand()方式的分布式表。 表级别可以选择 Partition 粒度部分数据迁移,如果参与迁移的 Partition 没有数据写入,可选择关闭表只读;如果参与迁移的 Partition 有数据写入,关闭表只读会导致数据不一致。

缩容迁移功能使用的组件是采用多种并发机制来提高任务的高性能,为了让用户平衡业务负载和缩容迁移对集群的影响,用户可以通过 任务总并发节点级并发数 来调整缩容迁移任务的性能和速度。
说明
节点级并发数 表示单台计算节点同时处理的 Part 粒度的并发度。
任务总并发 表示整个任务在运行过程中,所有参与任务的节点的总并发数。
任意一个参数设置为0,都会导致整个任务进入暂停状态;而且在不同规格集群、不同任务时,具体的参数值可能会有不同的效果,用户可以根据具体情况调整数值大小来调整任务速度和性能以及对集群的负载。
4. 创建完缩容迁移任务后,可以对任务进行启动、编辑、删除。编辑与新建窗口类似,可以重新对任务相关信息进行调整。


5. 单击启动,可以开始缩容迁移任务,同时云数据仓库 TCHouse-C 实例状态会变为 状态变更中 (在集群基础页面也会进入 状态变更中 ,但是没有进度条)。

当任务启动后,可以通过修改参数修改任务和节点的并发数,控制任务速度和对集群的负载,甚至暂停任务。
6. 可以单击详情查看该缩容迁移任务包含的表级别的执行信息详情。


7. 表的数据迁移执行过程会分为3个阶段:


执行中 :表示对表正在进行数据迁移,可能会涉及一些临时表的创建与删除、part的移动与删除、数据的读取与写入,此时对集群有一定的读写性能压力等。
待切换 :表示分布式表对应的数据完成了迁移,但是还未替代原表,用户需要对目标分片上表缩容迁移后对应的临时表的数据进行验证,确保数据迁移的正确性和数据一致性后,执行切换,让业务访问数据迁移后的表。
注意
在切换到迁移数据源之前,请确保已经完成数据迁移操作前后数据一致性和准确性校验。切换后的数据表将作为系统读写的唯一数据源。
如果是 Partition 粒度的缩容迁移,则需要校验 Partition 维度的数据的迁移操作前后一致性和准确性。
待删除原表 :完成切换操作之后,原来表的数据文件并不会直接删除,用户可以对目标分片上迁移均衡后的数据进行进一步的验证,确保数据迁移的正确性后,再执行删除,将数据迁移前的数据文件彻底删除。执行删除后,表的状态会变为 执行成功
注意
此操作会永久删除数据迁移前的数据表物理文件,请确保已经完成数据迁移前后数据一致性和准确性校验,且已完成数据源的切换。
如果是 Partition 粒度的缩容迁移,则只会删除原表相应 Partition 包含的数据文件。
8. 此外,在对缩容迁移的表执行切换操作之前,可以选择对表或者整个任务执行取消,会将数据迁移操作进行停止并回滚已有的动作。已执行切换删除操作的表,不支持取消回滚。
9. 在任务执行过程中,如果集群发生了类似网络抖动、重启或其他意外,有可能会出现暂停状态,并会有暂停原因,用户可以根据具体情况对集群进行调整,或者提工单由腾讯云技术人员来协助处理。
10. 当所有缩容迁移的表到达最终态(包括已取消、执行成功等状态),该缩容迁移任务也会变为 执行结束 ,云数据仓库 TCHouse-C 实例的状态也变为 运行中



最佳实践

缩容迁移场景

1. 水平缩容前,需要把待下线节点上的数据保留并迁移到剩余节点上时。
2. 其他需要调整数据分布的场景。

缩容迁移前的参数调整

缩容迁移前建议添加以下参数,在缩容迁移过程中,会有临时表的删除操作,如果没有以下权限,可能导致任务暂停。
<max_table_size_to_drop>0</max_table_size_to_drop>
<max_partition_size_to_drop>0</max_partition_size_to_drop>

缩容迁移使用建议

为了提高缩容迁移性能,建议在使用 Part 模式前可以适当手动使用 optimize 语句触发 Merge,提高 Part 大小,可以减小传输数据量。