前言

随着云上 ClickHouse 服务完善,越来越多的用户将自建 ClickHouse 服务迁移至云上。对于不同数据规模,我们选择不同的方案:

  • 对于数据量比较小的表,通常小于10GB 情况下,可以将数据导出为 CSV 格式,在云上集群重新写入数据;

  • 使用 clickhouse 发行版自带工具 clickhouse-copier 来完成。

本文详解 clickhouse-copier 完成跨 ClickHouse 集群数据迁移(当然也适用于用户集群内部数据不同表间数据迁移)。

一、Zookeeper 集群准备

如果已经有 Zookeeper 集群,请忽略本章节。

由于 clickhouse-copier 需要 Zookeeper 存储数据迁移任务信息,需要部署一个 Zookeeper 集群。

Zookeeper 集群到源 ClickHouse 集群与目标 ClickHouse 集群之间的网络是正常的。

在本文中,我们部署一个单节点的 Zookeeper 集群。

步骤1: 准备可执行文件

  1. $ wget http://apache.is.co.za/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1.tar.gz
  2. $ tar -xvf zookeeper-3.6.1.tar.gz
  3. $ chown hadoop:hadoop -R zookeeper-3.6.1

步骤2:切换到 hadoop 账号

  1. su hadoop

步骤3:准备配置文件 conf/zoo.cfg,填写配置,举例如下:

  1. tickTime=2000
  2. dataDir=/var/data/zookeepe
  3. clientPort=2181

步骤4:增加 myid 文件

  1. echo 1 > /var/data/zookeeper/myid

步骤5:启动 Zookeeper 进程

  1. $ bin/zkServer.sh start

后续,我们可以用该 Zookeeper 存储数据迁移任务信息。

二、定义迁移任务

在任务迁移数据前,需要定义迁移任务。迁移任务信息定义在 xml 文件中。具体包含如下信息:

  • 源集群,包含数据分片信息

  • 目的集群,包含数据分片信息

  • 执行数据迁移任务的线程数量

  • 定义待迁移的表信息,有 tables 字段指定,包括:

- 数据源集群名称,由 cluster_pull 指定

- 数据源数据库名称,由 database_pull 指定

- 数据源表名称,由 table_pull 指定

- 目的集群名称,由 cluster_push 指定

- 目的数据库名称,由 database_push 指定

- 目的表名称,由 table_push 指定

- 目的表引擎定义,由 engine 指定

- 待迁移的 partition 列表,由 enabled_partitions 指定。未指定,则全表迁移

如果目标集群数据库不存在,则不会自动创建。故迁移数据前,确保目标集群数据库存在。源表和目标表的 Schema 相同,表引擎可以不相同。

举例如下:

  1. <yandex>
  2. <!-- Configuration of clusters as in an ordinary server config -->
  3. <remote_servers>
  4. <source_cluster>
  5. <shard>
  6. <internal_replication>false</internal_replication>
  7. <replica>
  8. <host>172.16.0.72</host>
  9. <port>9000</port>
  10. </replica>
  11. </shard>
  12. </source_cluster>
  13.  
  14. <destination_cluster>
  15. <shard>
  16. <internal_replication>false</internal_replication>
  17. <replica>
  18. <host>172.16.0.115</host>
  19. <port>9000</port>
  20. </replica>
  21. <replica>
  22. <host>172.16.0.47</host>
  23. <port>9000</port>
  24. </replica>
  25. </shard>
  26. <shard>
  27. <internal_replication>false</internal_replication>
  28. <replica>
  29. <host>172.16.0.138</host>
  30. <port>9000</port>
  31. </replica>
  32. <replica>
  33. <host>172.16.0.49</host>
  34. <port>9000</port>
  35. </replica>
  36. </shard>
  37. </destination_cluster>
  38. </remote_servers>
  39.  
  40. <!-- How many simultaneously active workers are possible. If you run more workers superfluous workers will sleep. -->
  41. <max_workers>8</max_workers>
  42.  
  43. <!-- Setting used to fetch (pull) data from source cluster tables -->
  44. <settings_pull>
  45. <readonly>1</readonly>
  46. </settings_pull>
  47.  
  48. <!-- Setting used to insert (push) data to destination cluster tables -->
  49. <settings_push>
  50. <readonly>0</readonly>
  51. </settings_push>
  52.  
  53. <settings>
  54. <connect_timeout>300</connect_timeout>
  55. <!-- Sync insert is set forcibly, leave it here just in case. -->
  56. <insert_distributed_sync>1</insert_distributed_sync>
  57. </settings>
  58.  
  59. <tables>
  60. <!-- A table task, copies one table. -->
  61. <table_lineorder>
  62. <!-- Source cluster name (from <remote_servers/> section) and tables in it that should be copied -->
  63. <cluster_pull>source_cluster</cluster_pull>
  64. <database_pull>default</database_pull>
  65. <table_pull>lineorder</table_pull>
  66.  
  67. <!-- Destination cluster name and tables in which the data should be inserted -->
  68. <cluster_push>destination_cluster</cluster_push>
  69. <database_push>default</database_push>
  70. <table_push>lineorder_7</table_push>
  71.  
  72. <engine>
  73. ENGINE=ReplicatedMergeTree('/clickhouse/tables/{shard}/lineorder_7','{replica}')
  74. PARTITION BY toYear(LO_ORDERDATE)
  75. ORDER BY (LO_ORDERDATE, LO_ORDERKEY)
  76. </engine>
  77.  
  78. <!-- Sharding key used to insert data to destination cluster -->
  79. <sharding_key>rand()</sharding_key>
  80.  
  81. <!-- Optional expression that filter data while pull them from source servers -->
  82. <!-- <where_condition></where_condition> -->
  83. <!--
  84. <enabled_partitions>
  85. </enabled_partitions>
  86. -->
  87. </table_lineorder>
  88. </tables>
  89. </yandex>

  

准备完成配置文件后,在 Zookeeper 上准备路径,并将定义任务文件上传到 Zookeeper 中。假设配置文件为 task.xml , 执行如下指令:

  1. $ bin/zkCli.sh create /clickhouse/copytasks ""
  2. $ bin/zkCli.sh create /clickhouse/copytasks/task ""
  3. $ bin/zkCli.sh create /clickhouse/copytasks/task/description "`cat ./task.xml`"

  

三、启动任务

定义好迁移任务后,就可以启动 clickhouse-copier 来迁移数据了。在此之前,需要准备配置文件, 配置文件中描述了 Zookeeper 地址,以及日志配置。举例如下:

  1. <yandex>
  2. <logger>
  3. <level>trace</level>
  4. <size>100M</size>
  5. <count>3</count>
  6. </logger>
  7.  
  8. <zookeeper>
  9. <node index="1">
  10. <host>172.16.0.139</host>
  11. <port>2181</port>
  12. </node>
  13. </zookeeper>
  14. </yandex>

假设该文件命名为 config.xml

可以使用如下命令启动 clickhouse-copier:

  1. $ clickhouse-copie
  2. --config ./config.xml \
  3. --task-path /clickhouse/copytasks/task \
  4. --base-dir ./clickhouse \

其中,--task-path 指定数据迁移任务在 Zookeeper 上的路径,即第3节中创建的路径。需要注意的是,路径下必须包含 description 文件。

如果数据量比较多,可以部署多个 clickhouse-copier 并发执行迁移任务。

总结

clickhouse-copier 是 ClickHouse 发行版自带的工具,在稳定性可靠性上是有保证的。在使用过程中,需要注意的问题:

    • 在迁移过程中,源集群的表需要停止写入;

    • 在迁移过程中,占用源,目的集群网络带宽,需要仔细评估;

    • clickhouse-copier 提供了较多灵活性,包括数据分片算法,指定迁移表的 partitions


    • 关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

手把手教你:将 ClickHouse 集群迁至云上的更多相关文章

  1. 手把手教你搭建FastDFS集群(下)

    手把手教你搭建FastDFS集群(下) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...

  2. 手把手教你搭建FastDFS集群(中)

    手把手教你搭建FastDFS集群(中) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...

  3. 手把手教你搭建FastDFS集群(上)

    手把手教你搭建FastDFS集群(上) 本文链接:https://blog.csdn.net/u012453843/article/details/68957209        FastDFS是一个 ...

  4. 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布

    概述 如何在腾讯云 Kubernetes 集群实现蓝绿发布和灰度发布?通常要向集群额外部署其它开源工具来实现,比如 Nginx Ingress,Traefik 等,或者让业务上 Service Mes ...

  5. k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船

    非常非常抱歉,新年上班第一天, 在今天阿里云上气候突变情况下,由于我们开船技术差,在今天 10:15~12:00 左右的访问高峰,我们竟然把船给开翻了,造成近2个小时整个博客站点无法访问,由此给您带来 ...

  6. 手把手教你Linux服务器集群部署.net网站 - 让MVC网站运行起来

    一.Linux下面安装需要软件 我们这里需要安装的软件有: 1) Mono 3.2.8 : C#跨平台编译器,能使.Net运行与Linux下,目前.net 4.0可以完美运行在该平台下 2) ngin ...

  7. 手把手教你Linux服务器集群部署.net网站 - Linux系统安装和设置

    在开源软件已成趋势化的今天,微软这‘老古董’也开始向开源方向发力,这对我们.NET开发者是极大的喜讯.而在开源软件中, Linux就是其中一个优秀的代表,几乎各行业和计算机有关的都有它的身影,其中一点 ...

  8. 一文读懂clickhouse集群监控

    更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...

  9. ClickHouse(04)如何搭建ClickHouse集群

    ClickHouse集群的搭建和部署和单机的部署是类似的,主要在于配置的不一致,如果需要了解ClickHouse单机的安装设部署,可以看看这篇文章,ClickHouse(03)ClickHouse怎么 ...

随机推荐

  1. Unity CommandBuffer物体轮廓

    1.command buffer具有很高的灵活性,它的作用是预定义一些渲染指令,然后在我们想要执行的时候去执行这些指令(见图1),绿点表示可以在"Forward Rendering Path ...

  2. kali 系列学习06 - 攻击之密码破解

    参考书 <kali linux渗透测试技术详解> 清华大学出版社  2015 杨波 一.medusa使用 原理:并行登陆破解 1.只输入单个命令,是查看帮助 root@kali:/tool ...

  3. js 进度条效果

    <!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...

  4. 【爬虫】基于PUPPETEER页面爬虫

    一.简介 本文简单介绍一下如何用puppeteer抓取页面数据. 二.下载 npm install puppeteer --save-dev npm install typescrip --save- ...

  5. input[type=file] 样式美化,input上传按钮美化

    <style>.file { position: relative; display: inline-block; background: #D0EEFF; border: 1px sol ...

  6. QBXT 提高组储备营 2020.夏 游记

    DAY 1 是第一天呐!老师好强!讲得好仔细!连我都全懂了![doge] 突然对后面几天充满了期待-- 复习内容:二分,排序,贪心,搜索(好评) 新知识:Huffman树及Huffman编码,对拍,二 ...

  7. P1163 银行贷款

    考虑从一个月转移到下一个月.假设前一个月的欠款是 \(s\),月利息为 \(d\),月末还款为 \(b\),那么下一个月的欠款就是 \(s\left(1+d\right)-b\). 很容易看出月利息越 ...

  8. 用FL Studio制作反向人声音效(Vocal Chops)

    人声切片在各类电子音乐中都被广泛运用,在FL Studio20中我们也可以运用其自带的插件来制作属于我们自己的人声切片效果.在学完这篇文章后你就可以动手做出如Kygo.Martin Garrix等大牌 ...

  9. 专业五线谱作曲打谱软件Overture的常用快捷键功能大全

    快捷命令在我们使用软件时起到的帮助是不言而喻的,它用一个或几个简单的字母来代替常用的命令,使我们不用去记忆众多的长长的命令,也不必为了执行一个命令,在菜单和工具栏上寻寻觅觅.当然,随着Overture ...

  10. 【mq读书笔记】mq读写分离机制

    mq根据brokerName查找Broker地址的过程 mq根据MessageQueue查找Broker地址的唯一依据是brokerName,同一组Broker(M-S)他们的bokerName相同但 ...