手把手教你:将 ClickHouse 集群迁至云上
前言
随着云上 ClickHouse 服务完善,越来越多的用户将自建 ClickHouse 服务迁移至云上。对于不同数据规模,我们选择不同的方案:
对于数据量比较小的表,通常小于10GB 情况下,可以将数据导出为 CSV 格式,在云上集群重新写入数据;
使用 clickhouse 发行版自带工具 clickhouse-copier 来完成。
本文详解 clickhouse-copier 完成跨 ClickHouse 集群数据迁移(当然也适用于用户集群内部数据不同表间数据迁移)。
一、Zookeeper 集群准备
如果已经有 Zookeeper 集群,请忽略本章节。
由于 clickhouse-copier 需要 Zookeeper 存储数据迁移任务信息,需要部署一个 Zookeeper 集群。
Zookeeper 集群到源 ClickHouse 集群与目标 ClickHouse 集群之间的网络是正常的。
在本文中,我们部署一个单节点的 Zookeeper 集群。
步骤1: 准备可执行文件
$ wget http://apache.is.co.za/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1.tar.gz
$ tar -xvf zookeeper-3.6.1.tar.gz
$ chown hadoop:hadoop -R zookeeper-3.6.1
步骤2:切换到 hadoop 账号
su hadoop
步骤3:准备配置文件 conf/zoo.cfg,填写配置,举例如下:
tickTime=2000
dataDir=/var/data/zookeepe
clientPort=2181
步骤4:增加 myid 文件
echo 1 > /var/data/zookeeper/myid
步骤5:启动 Zookeeper 进程
$ bin/zkServer.sh start
后续,我们可以用该 Zookeeper 存储数据迁移任务信息。
二、定义迁移任务
在任务迁移数据前,需要定义迁移任务。迁移任务信息定义在 xml 文件中。具体包含如下信息:
源集群,包含数据分片信息
目的集群,包含数据分片信息
执行数据迁移任务的线程数量
定义待迁移的表信息,有 tables 字段指定,包括:
- 数据源集群名称,由 cluster_pull 指定
- 数据源数据库名称,由 database_pull 指定
- 数据源表名称,由 table_pull 指定
- 目的集群名称,由 cluster_push 指定
- 目的数据库名称,由 database_push 指定
- 目的表名称,由 table_push 指定
- 目的表引擎定义,由 engine 指定
- 待迁移的 partition 列表,由 enabled_partitions 指定。未指定,则全表迁移
如果目标集群数据库不存在,则不会自动创建。故迁移数据前,确保目标集群数据库存在。源表和目标表的 Schema 相同,表引擎可以不相同。
举例如下:
<yandex>
<!-- Configuration of clusters as in an ordinary server config -->
<remote_servers>
<source_cluster>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>172.16.0.72</host>
<port>9000</port>
</replica>
</shard>
</source_cluster> <destination_cluster>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>172.16.0.115</host>
<port>9000</port>
</replica>
<replica>
<host>172.16.0.47</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>false</internal_replication>
<replica>
<host>172.16.0.138</host>
<port>9000</port>
</replica>
<replica>
<host>172.16.0.49</host>
<port>9000</port>
</replica>
</shard>
</destination_cluster>
</remote_servers> <!-- How many simultaneously active workers are possible. If you run more workers superfluous workers will sleep. -->
<max_workers>8</max_workers> <!-- Setting used to fetch (pull) data from source cluster tables -->
<settings_pull>
<readonly>1</readonly>
</settings_pull> <!-- Setting used to insert (push) data to destination cluster tables -->
<settings_push>
<readonly>0</readonly>
</settings_push> <settings>
<connect_timeout>300</connect_timeout>
<!-- Sync insert is set forcibly, leave it here just in case. -->
<insert_distributed_sync>1</insert_distributed_sync>
</settings> <tables>
<!-- A table task, copies one table. -->
<table_lineorder>
<!-- Source cluster name (from <remote_servers/> section) and tables in it that should be copied -->
<cluster_pull>source_cluster</cluster_pull>
<database_pull>default</database_pull>
<table_pull>lineorder</table_pull> <!-- Destination cluster name and tables in which the data should be inserted -->
<cluster_push>destination_cluster</cluster_push>
<database_push>default</database_push>
<table_push>lineorder_7</table_push> <engine>
ENGINE=ReplicatedMergeTree('/clickhouse/tables/{shard}/lineorder_7','{replica}')
PARTITION BY toYear(LO_ORDERDATE)
ORDER BY (LO_ORDERDATE, LO_ORDERKEY)
</engine> <!-- Sharding key used to insert data to destination cluster -->
<sharding_key>rand()</sharding_key> <!-- Optional expression that filter data while pull them from source servers -->
<!-- <where_condition></where_condition> -->
<!--
<enabled_partitions>
</enabled_partitions>
-->
</table_lineorder>
</tables>
</yandex>
准备完成配置文件后,在 Zookeeper 上准备路径,并将定义任务文件上传到 Zookeeper 中。假设配置文件为 task.xml , 执行如下指令:
$ bin/zkCli.sh create /clickhouse/copytasks ""
$ bin/zkCli.sh create /clickhouse/copytasks/task ""
$ bin/zkCli.sh create /clickhouse/copytasks/task/description "`cat ./task.xml`"
三、启动任务
定义好迁移任务后,就可以启动 clickhouse-copier 来迁移数据了。在此之前,需要准备配置文件, 配置文件中描述了 Zookeeper 地址,以及日志配置。举例如下:
<yandex>
<logger>
<level>trace</level>
<size>100M</size>
<count>3</count>
</logger> <zookeeper>
<node index="1">
<host>172.16.0.139</host>
<port>2181</port>
</node>
</zookeeper>
</yandex>
假设该文件命名为 config.xml
可以使用如下命令启动 clickhouse-copier:
$ clickhouse-copie
--config ./config.xml \
--task-path /clickhouse/copytasks/task \
--base-dir ./clickhouse \
其中,--task-path 指定数据迁移任务在 Zookeeper 上的路径,即第3节中创建的路径。需要注意的是,路径下必须包含 description 文件。
如果数据量比较多,可以部署多个 clickhouse-copier 并发执行迁移任务。
总结
clickhouse-copier 是 ClickHouse 发行版自带的工具,在稳定性可靠性上是有保证的。在使用过程中,需要注意的问题:
在迁移过程中,源集群的表需要停止写入;
在迁移过程中,占用源,目的集群网络带宽,需要仔细评估;
clickhouse-copier 提供了较多灵活性,包括数据分片算法,指定迁移表的 partitions

关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~
手把手教你:将 ClickHouse 集群迁至云上的更多相关文章
- 手把手教你搭建FastDFS集群(下)
手把手教你搭建FastDFS集群(下) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...
- 手把手教你搭建FastDFS集群(中)
手把手教你搭建FastDFS集群(中) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u0 ...
- 手把手教你搭建FastDFS集群(上)
手把手教你搭建FastDFS集群(上) 本文链接:https://blog.csdn.net/u012453843/article/details/68957209 FastDFS是一个 ...
- 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布
概述 如何在腾讯云 Kubernetes 集群实现蓝绿发布和灰度发布?通常要向集群额外部署其它开源工具来实现,比如 Nginx Ingress,Traefik 等,或者让业务上 Service Mes ...
- k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
非常非常抱歉,新年上班第一天, 在今天阿里云上气候突变情况下,由于我们开船技术差,在今天 10:15~12:00 左右的访问高峰,我们竟然把船给开翻了,造成近2个小时整个博客站点无法访问,由此给您带来 ...
- 手把手教你Linux服务器集群部署.net网站 - 让MVC网站运行起来
一.Linux下面安装需要软件 我们这里需要安装的软件有: 1) Mono 3.2.8 : C#跨平台编译器,能使.Net运行与Linux下,目前.net 4.0可以完美运行在该平台下 2) ngin ...
- 手把手教你Linux服务器集群部署.net网站 - Linux系统安装和设置
在开源软件已成趋势化的今天,微软这‘老古董’也开始向开源方向发力,这对我们.NET开发者是极大的喜讯.而在开源软件中, Linux就是其中一个优秀的代表,几乎各行业和计算机有关的都有它的身影,其中一点 ...
- 一文读懂clickhouse集群监控
更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...
- ClickHouse(04)如何搭建ClickHouse集群
ClickHouse集群的搭建和部署和单机的部署是类似的,主要在于配置的不一致,如果需要了解ClickHouse单机的安装设部署,可以看看这篇文章,ClickHouse(03)ClickHouse怎么 ...
随机推荐
- bootstrap-datetimepicker的两种版本
1.引入js/css <link rel="stylesheet" th:href="@{/plugin/bootstrap-datetimepicker/boot ...
- CENTOS 7平滑升级PHP到最新版7.3
安装Remi和EPEL数据源(仓库) rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm r ...
- Running Median POJ - 3784
本题使用对顶堆做法. 为了动态维护中位数,我们可以建立两个堆 :一个大根对,一个小根堆. 用法:在动态维护的过程中,设当前的长度为length,大根堆存从小到大排名 $1 \thicksim \dfr ...
- ZAB
ZAB=ZooKeeper Atomic Broadcast ZooKeeper原子消息广播协议,支持崩溃回复的原子广播协议. zk使用一个单一的主进程来接受并处理客户端的所有事务请求,并采用ZAB的 ...
- JVM 堆中对象分配、布局和访问
本文摘自深入理解 Java 虚拟机第三版 对象的创建 Java 是一门面向对象的语言,Java 程序运行过程中无时无刻都有对象被创建出来.从语言层面看,创建对象只是一个 new 关键字而已,而在虚拟机 ...
- 12_Sensor简单实例
列出Android手机所支持的Sensor. package com.example.sensorlist; import java.util.List; import android.app.Act ...
- 团队作业第六次——Beta冲刺
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范与计划 代码 ...
- day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口
目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...
- fist-第四天冲刺随笔
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- Spring Cloud Alibaba 初体验(五) SkyWalking
一.下载与运行 本文使用 SkyWalking 7.0.0:https://www.apache.org/dyn/closer.cgi/skywalking/7.0.0/apache-skywalki ...