自建 ClickHouse 迁移方案

最近更新时间:2023-09-05 11:25:16

我的收藏
云数据仓库 TCHouse-C 支持通过 ClickHouse-Copier 实现集群迁移。

通过 ClickHouse-Copier 实现集群迁移

Copier 实现与使用

ClickHouse-Copier,ClickHouse 官方的数据迁移工具,主要基于分布式表的 insert 方式实现集群的迁移或数据的重分布。 ClickHouse-Copier 的创建是为了在集群之间移动数据。它运行简单的 INSERT...SELECT 查询,并且可以在具有不 同引擎参数的表之间以及具有不同分片数量的集群之间复制数据。在任务配置文件中,您需要描述源集群和目标集 群的布局,并列出您需要复制的表。您可以复制整个表或特定分区。ClickHouse-Copier 使用临时分布式表从源集 群中选择并插入到目标集群中。 Copier 通过配置源端和目标端集群的信息,以及迁移表的分布式逻辑,通过在每个 shard 上,每个 partition 构造迁 移任务,将数据基于一定的规则从每个partition 中读取,然后 insert 到目标集群的临时表中,然后基于 attach partition 将数据挂载到最终表中。而且整个任务的执行情况会保存到 zookeeper 中,可以实现任务的重启、短点续传,以及多个 Copier 进程共同执行一个任务。 Copier 作为官方的迁移工具,也是支持 MergeTree 的表引擎,包括复制表和非复制表。



使用 Copier 的优点

1. ClickHouse 社区官方工具,社区一直在维护和改进,包括功能和性能等。
2. 虽然基于 select & insert 的逻辑实现,并且每个 copier 进程基本是单线程执行,但是 copier 支持多个进程处理 一个任务。如果每个 shar上都执行一个或多个进程,让每个 copier 都处理本地 shard 数据,会提高整体性能,集群越大,进程数越多,整体性能越好。
3. 能够很好的兼容各种分布式表的分片规则,完全基于分布式表的逻辑进行数据的读取和写入,能够根据用户在任务中配置的逻辑,实现迁移时的数据写入逻辑的控制(例如保持原来的逻辑或调整分片规则)。
4. 能够兼容迁移前后的集群分片大小,不需要一一对应。
5. 不受业务的写入和后台 merge 的影响。
6. 能够在 zookeeper 中记录迁移任务的状态,支持遇错重试,支持短点重试。通过多个进程的逻辑,让迁移的稳定有一定保证。
7. 不依赖复制表,只要是 MergeTree 类的表都可以支持。

使用 Copier 的注意事项

1. 易用性一般,从社区反馈来说,很多人配置起来较麻烦,较难,官方的资料较少,需要摸索出一套最佳实践。
2. 单机性能较低,需要较多进程较多 shard 的情况下性能较高,官方也推荐较大集群下性能较好。
3. 物化视图的迁移不能做到一步到位,很难保证基础表和物化视图的逻辑关系的保持,需要根据表的特点精心设置迁移方案,降低迁移整体流程的时⻓,才能让业务尽可能低的受到迁移的影响。
4. 不支持增量迁移,虽然在迁移的过程中支持业务的写入和 merge 等操作,但是同样不能支持增量迁移,客观的需要业务停止写入;也不支持 DDL 操作。
5. 不支持非 MergeTree 类表引擎。