​一、引言

ClickHouse 是一个用于联机分析( OLAP )的列式数据库管理系统( DBMS )。它于 2016 年以 Apache 2.0 协议开源,以优秀的查询性能,深受广大大数据工程师欢迎。

为了服务客户业务,腾讯云于 2020 年 4 月正式上线 ClickHouse 服务。服务上线以来,迅速获得内外客户广泛支持,服务业务数量成规模增长。与此同时,运维与管控压力也随之而来,用户对弹性伸缩能力的呼声越来越大。

事实上,ClickHouse 是典型的 Share-Nothing 架构,天然支持弹性伸缩能力。无论是增加节点数量,还是增加数据分片副本数量都非常容易。

图1 ClickHouse Share-Nothing 架构

但是,ClickHouse 集群在增加节点后,集群上的数据集无法自动均衡分布。需要人工干预,确保数据均衡。同理,下线集群节点前,也需要人工干预,将被下线节点的机器迁移到其他节点。

在生产环境中,运维工作强度随着集群中表的数量,数据规模增加而急剧增强。为了缓解云上 ClickHouse 用户运维压力,将 ClickHouse 数据均衡运维工作自动化是非常有价值的。

本文将带大家了解腾讯云 ClickHouse 是如何实现无人值守的数据均衡服务,希望与大家一同交流。

二、ClickHouse集群数据均衡功能缺失

在生产环境中,通常 ClickHouse 通常以集群模式部署。在 ClickHouse 集群中,用户根据业务需求将集群节点划分为若干子集合。每个集合存储若干数据集,在使用层面,用户通过分布式表( Distributed Engine )来查询整个数据集。

在 ClickHouse 的语义中,有一个 Cluster 概念,它是一个节点的集合,并且定义了存储在该 Cluster 上的数据集的分片数量,以及分片的副本数量,以及其存储节点。

如上图 1 所示,一个名为 cluster-dataset 的 Cluster, 定义了 4 个分片( SHARD ), 每个分片有 2 个副本。当存储在这个 Cluster 上的数据集,通常会分散存储在 4 个分片中,并且每个分片数据会存储 2 个副本。

为 Cluster 增加分片是非常容易,分配机器,修改配置即可。如下图所示,给 cluster-dataset 增加一个分片。但是已存的数据数据集仍然在分片 SHARED1-4 上。很明显,新增的节点存在资源浪费的问题,包括计算资源和存储资源。

图2:扩容节点示意图

为了解决这样问题,有若干方案解决:

  • 将数据全部删除掉,从后备数据源重新导入数据到 ClickKhouse;
  • 增加新节点的权重,过一定时间后待数据均衡后,重新调整新增节点权重;
  • 其他,如人工搬运数据到新增节点

但是无论使用上述哪一种种方法,都存在缺陷。比如对于第一个方案而言,如果 ClickHouse 中数据并无后备数据源,那么该方案不可行。即使有后备数据源,重新导入数据耗时,且停服时间与数据量成正比,代价大。

对于第二种方案,需要对新节点进行多次权限调整。在调整期间,数据存储压力向新增节点倾斜,无法充分利用集群优势。且容易导致新近数据集中在新增节点上,导致集群资源浪费,降低查询效率。

对于第三种方案而言,操作繁杂,在表多,数据量大的情况下,易出错。

三、云上ClickHouse解决方案

为了解决 ClickHouse 集群数据均衡功能缺失,带来的运维压力,腾讯云 ClickHouse 提供了数据自动均衡功能。

简而言之,在获得用户授权后,用户在控制台上简单配置,填写数据迁移网络带宽上限,即可启动数据均衡任务。

后台管控系统根据机器当期磁盘可用容量,合理安排数据迁移计划。然后,根据网络带宽上限,执行迁移计划。最终,使得数据在节点上分布趋于均衡。

举一个例子来进行说明,在云上申请一个 ClickHouse 实例,2 个节点。在其中一个节点上创建一个名为 lineorder 的表,并导入测试数据。查看该表在该节点上的存储容量,结果如下所示:

另外一个节点上没有该表的数据,也没有表的 schema。我们通过数据迁移功能完成数据均衡。接下来通过控制台,我们完成数据迁移。具体步骤如下:

1. 选择Cluster

选择 Cluster,选择 ClickHouse 实例,点击集群服务,选择 ClickHouse 组件,在"操作"下拉列表中,选择数据迁移菜单项。选择数据均衡模式。

2. 选择迁移节点

在确定 Cluster 后,可以选择数据迁出与迁入节点。

3. 选择迁移数据表

在确定了迁移节点后,我们可以选择待迁移的表。

4. 确认信息

最后,提交任务。ClickHouse 就开始数据迁移工作。在任务中心可以看到数据迁移进度。

任务结束时候,也可以查看迁移任务详情信息。

待数据迁移完成后,我们可以查看数据在两个节点上数据分布情况。在集群节点上数据量情况如下:

可以看到,数据迁移完成后,数据条数和数据量是完全吻合的。

四、结语

云上数据迁移功能旨在解决 ClickHouse 弹性伸缩时数据迁移问题。使用场景包括:

  • 新扩容节点后,使用数据迁移功能,迁移部分数据至新节点,让数据在集群节点上趋于均衡;
  • 缩容节点前,将待下线节点上的数据迁移到其他节点,避免数据丢失。

数据迁移功能极大的缓解了集群版 ClickHouse 运维压力。需要注意的是,数据均衡任务运行过程中,被迁移的表无法被业务访问。

vector自动扩容如何实现_腾讯云ClickHouse如何实现自动化的数据均衡?相关推荐

  1. vector自动扩容如何实现_全自动拉伸膜真空包装机是如何实现全自动化生产的?...

    食品和我们的生活息息相关,食品的包装也是各种各样,真空包装作为一种食品中常见的包装形式也是受到消费者的欢迎,随着需求量的逐渐增大,一些小型的真空包装机根本满足不了市场的需求,这就需要一款全自动化的设备 ...

  2. 一文透析腾讯云如何为企业构建「数据全生命周期保护」

    伴随数据成为企业的核心资产,数据安全已经成为所有企业在产业互联网时代必须直面的挑战. 今年的数据安全态势仍然不容乐观,据Risk Based Security数据,截至2019年前6个月,世界范围内已 ...

  3. 腾讯云文字识别API提取表格数据并生成Excel文件

    腾讯云文字识别API提取表格数据并生成Excel文件 本文主要介绍了利用腾讯云表格文字识别API提取图片表格数据并生成Excel文件.主要涉及的知识点有:腾讯云API的调用.json文件的处理以及Ex ...

  4. 腾讯云mysql高可用方案_腾讯云数据库团队:MySQL数据库的高可用性分析

    作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...

  5. 腾讯云cloudlite认证_【腾讯云】考个证...大数据开发工程师认证

    作为一个大数据行业的从业者,考个腾讯云大数据开发工程师认证总比考个消防证 easy 吧-?关于考这个认证的意义其实主要在于全面复习一下大数据相关的知识点,另外有个腾讯云的认证,也许大概也会对你找工作有 ...

  6. 在线语音识别_腾讯云在线语音识别_在线语音识别成文字 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 为您提供高精度的语音识别服务,融合领先的自然语言处理技术. (备注:如需使用,请先 ...

  7. 腾讯云mysql如何设置远程访问_腾讯云主机 MySQL 远程访问配置方法

    使用腾讯云主机安装 MySQL 之后,需要通过以下步骤进行配置以实现远程访问,主要分为两大部分 一.服务器端口配置 1.如果你的云主机配置了安全组,如果没有配置安全组就可以直接跳过"步骤1& ...

  8. qq视频转码失败怎么办_腾讯云点播视频转码需要注意的问题

    上传视频是否可以选择不转码? 老版腾讯云点播在控制台上传是必须选择转码模版的,但使用api上传的时候可以选择不转码,在申请媒资的时候, 指定mode参数为 no_transcoding就不会进行转码, ...

  9. 语音识别服务_语音识别服务厂商_腾讯云语音识别服务 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 腾讯云语音识别服务开放实时语音识别.一句话识别和录音文件识别三种服务形式,满足不同 ...

最新文章

  1. SYSENTER、SYSEXIT—快速系统调用
  2. 转-eclipse管理多个workspace
  3. 修改了系统时间后,myeclipse 和tomcat下的代码不同步了
  4. 针对B2B平台的接口自动化测试系统
  5. Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理
  6. linux之less 命令
  7. C语言怎么合并两个有序链表
  8. mysqli与pdo防sql注入源码
  9. ajax保存乱码,Ajax 乱码详细
  10. mysql-数据备份操作
  11. 十次方项目开发系列【3】:基于MyBatis Plus实现条件查询和分页
  12. 计算机专业sci二区难吗,二区的sci有多难?sci二区版面费一般多少?
  13. 【JAVA-UT】13、什么是依赖?
  14. 为什么我们现在不再需要杀毒软件了?
  15. 往届毕业生档案去向查询网_往届毕业生档案在哪里可以查吗
  16. 好玩的Deep Dream模型
  17. iOS 多线程dispatch_async dispatch_sync(GCD)详尽总结
  18. VTK:输出将样条拟合到刀具Cutter用法实战
  19. Synchronized详细介绍之锁升级过程
  20. 清理电脑,使其加速!

热门文章

  1. 1-4 无监督学习(Unsupervised Learning)
  2. HttpSession 和 HttpSession
  3. SpringMvc渲染视图
  4. java中 将字符串时间 '2015-9-8 17:05:06' 转化为格式 '2015-09-08 17:05:06'
  5. 【bzoj3343】教主的魔法 (分块 + 二分)
  6. 装饰器,迭代器,生成器
  7. monkeyrunner脚本的录制和回放
  8. arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
  9. zoj 1109 Language of FatMouse 解题报告
  10. c语言非线程安全函数引发的BUG一列