专栏首页ClickHouse 技术月报重磅来袭:腾讯云ClickHouse支持数据均衡服务
原创

重磅来袭:腾讯云ClickHouse支持数据均衡服务

1. 前言

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它于2016年以apache 2.0协议开源,以优秀的查询性能,深受广大大数据工程师欢迎。为了服务客户业务,腾讯云于2020年4月正式上线ClickHouse服务。

服务上线以来,迅速获得内外客户广泛支持,服务业务数量成规模增长。运维与管控压力也随之而来,用户对弹性伸缩能力的呼声越来越大。事实上,ClickHouse是典型的Share-Nothing架构,天然支持弹性伸缩能力。无论是增加节点数量,还是增加数据分片副本数量都非常容易。

图1 ClickHouse Share-Nothing 架构

但是,ClickHouse集群在增加节点后,集群上的数据集无法自动均衡分布。需要人工干预,确保数据均衡。同理,下线集群节点前,也需要人工干预,将被下线节点的机器迁移到其他节点。在生产环境中,运维工作强度随着集群中表的数量,数据规模增加而急剧增强。为了缓解云上ClickHouse用户运维压力,将ClickHouse数据均衡运维工作自动化是非常有价值的。

本文将带领读者了解腾讯云ClickHouse如何实现无人值守的数据均衡服务。

2. ClickHouse集群数据均衡功能缺失

在生产环境中,通常ClickHouse通常以集群模式部署。在ClickHouse集群中,用户根据业务需求将集群节点划分为若干子集合。每个集合存储若干数据集。在使用层面,用户通过分布式表(Distributed Engine)来查询整个数据集。在ClickHouse的语义中,有一个Cluster概念,它是一个节点的集合,并且定义了存储在该Cluster上的数据集的分片数量,以及分片的副本数量,以及其存储节点。

如图1所示,一个名为cluster-dataset 的Cluster, 定义了4个分片(SHARD), 每个分片有2个副本。当存储在这个Cluster上的数据集,通常会分散存储在4个分片中,并且每个分片数据会存储2个副本。 为Cluster增加分片是非常容易,分配机器,修改配置即可。

图2:扩容节点示意图

如图2所示,给cluster-dataset增加一个分片。但是已存的数据数据集仍然在分片SHARED1-4上。很明显,新增的节点存在资源浪费的问题,包括计算资源和存储资源。

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

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

无论那种方法,都存在缺陷。

对方案a)而言,如果ClickHouse中数据并无后备数据源,那么该方案不可行。即使有后备数据源,重新导入数据耗时,且停服时间与数据量成正比,代价大。 对方案b)而言,需要对新节点进行多次权限调整。在调整期间,数据存储压力向新增节点倾斜,无法充分利用集群优势。且容易导致新近数据集中在新增节点上,导致集群资源浪费,降低查询效率。 对方案c)而言,操作繁杂,在表多,数据量大的情况下,易出错。

3. 云上ClickHouse解决方案

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

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

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

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

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

具体步骤如下:

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

步骤2 选择迁移节点:在确定Cluster后,可以选择数据迁出与迁入节点。

步骤3 选择迁移数据表:在确定了迁移节点后,我们可以选择待迁移的表。

步骤4 确认信息:

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

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

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

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

4. 总结

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

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

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ClickHouse 数据导入实战:Kafka 篇

    在生产环境中,经常遇到将数据从消息队列Kafka写入ClickHouse集群中。本文介绍如何将Kafka中的数据导入到ClickHouse集群的方案。

    fastio
  • ClickHouse 数据导入实战:Kafka 篇

    在生产环境中,经常遇到将数据从消息队列Kafka写入ClickHouse集群中。本文介绍如何将Kafka中的数据导入到ClickHouse集群的方案。

    fastio
  • ClickHouse源码导读:网络IO

    ClickHouse是一款开源的列式数据库,主要应用于在线分析查询场景(OLAP)。其显著特点就是:性能强悍。

    fastio
  • 算法和数据结构: 八 平衡查找树之2-3树

    前面介绍了二叉查找树(Binary Search Tree),他对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。本文及后面...

    yaphetsfang
  • ZooKeeper 技术知识总结之二——ZK 惊群与脑裂

    ZooKeeper 的节点通常可以作为分布式锁来使用。比如可以多个服务对同时竞争申请一个节点 “/test/lock”,创建成功的服务获取到这个锁,其他没创建成...

    剑影啸清寒
  • React源码解析之Commit第二子阶段「mutation」(上)

    上一篇我们讲了 Commit第一子阶段「before mutation」,本篇讲第二子阶段 「mutation」:

    进击的小进进
  • Cocos Creator基础教程(11)—可拖拽组件

    在游戏中实现节点的可拖动是一个比较常见情况,比如:可以给小朋友做一个将果皮投进垃圾箱的教学练习、角色换装、物品包裹界面等。在Cocos Creator中实现一个...

    张晓衡
  • 提升12倍!中国香港浸会大学与MassGrid发布低带宽高效AI训练新算法

    2018年,香港浸会大学异构计算实验室与MassGrid合作,通过研究提出一种可用于低带宽网络的全局Top-k稀疏化的分布式同步SGD算法,并通过实验论证出在低...

    量子位
  • 黑客攻防技术宝典Web实战篇

    1.针对Web应用程序的最严重攻击,是那些能够披露敏感数据或获取对运行应用程序的后端系统的无限访问权限的攻击

    硬核项目经理
  • Binary Search Trees(BST)

    假设元素的插入顺序为30,40,17,20,14 刚开始的时候没有元素,插入新的元素

    爬蜥

扫码关注云+社区

领取腾讯云代金券