前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术分享 | ClickHouse 冷热存储分离方案线上实践

技术分享 | ClickHouse 冷热存储分离方案线上实践

原创
作者头像
爱可生开源社区
发布2022-12-07 13:23:16
1.4K0
发布2022-12-07 13:23:16
举报

作者:任坤

现居珠海,先后担任专职 Oracle 和 MySQL DBA,现在主要负责 MySQL、mongoDB 和 Redis 维护工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


1、背景

线上某clickhouse集群,最早采用SAS机器,后来因为容量不足又陆续添加了4台SATA机器。

最后的架构演变为5分片 * 2副本,包括6台SAS和4台SATA机器,导致读写延迟非常高,引发业务方频繁抱怨。

经协商后决定将硬盘升级为SSD,然而预算被卡的很紧,原本采购的4台SSD机器最终被砍成了1台,最终只能被迫采用SSD + SATA的冷热存储分离架构。

我们将新采购的机器SSD硬盘拆卸,分散部署到6台已有的SATA机器上,将SSD挂载到/data,SATA挂载到/data1。

ck最新写入的数据先落到SSD,稍后根据配置的规则自动将冷数据迁移到SATA。

2、线上实践

部署ck集群,6台机器采用3分片 * 2副本,config.xml的path变量设置为<path>/data/clickhouse_ssd/</path>,任选3台机器混布一套3节点zookeeper集群。

ck默认会分别创建1个名为default的磁盘和存储策略,磁盘由config.xml的path设定,存储策略default默认选择path设置的磁盘,可通过system.disks和system.storage_policies查看。

我们要做的是手工创建1个存储策略,指定热盘和冷盘路径,让数据先落热盘,然后根据设置规则自动迁移到冷盘。

为每个ck节点新建配置文件/etc/clickhouse-server/config.d/storage.xml,为了节省篇幅直接上截图。

先为系统中的存储目录打上磁盘标签,再创建一个名为moving_from_ssd_to_hdd的存储策略,按顺序引用热盘和冷盘标签。

以上配置是先将数据写到/data/clickhouse_ssd,随后再慢慢迁移到/data1/clickhouse_hdd。

表数据以part为单位迁移,move_factor取值范围[0,1),值越大则会越快速的将part迁移到冷盘,也可以手工迁移指定part,比如alter table tab_name move part 'xxxx_xx' to volume cold;

创建表时加上storage_policy = 'moving_from_ssd_to_hdd'选项,就可以完成冷热存储分离设置。

线上运行了小半年,既解决了读写延迟问题,又很好的节省了硬件成本。

前几天维护需要挨个重启ck集群实例,重启第1个实例就遇到如下错误,

2022.10.31 17:32:06.569278 [ 33885 ] {} <Error> Application: DB::Exception: "default" disk path should be provided in <path> not it <storage_configuration>: Cannot attach table `system`.`query_thread_log` from metadata file /data/clickhouse_ssd/store/db1/db144952-38ab-46ee-af64-e84158d35c12/query_thread_log.sql from query ATTACH TABLE system.query_thread_log UUID '8205cfb0-ccd4-45cf-bdaa-ffce82a84a7d' (`event_date` Date, `event_time` DateTime, `event_time_microseconds` DateTime64(6), `query_start_time` DateTime, `query_start_time_microseconds` DateTime64(6), `query_duration_ms` UInt64, `read_rows`

多番尝试后最终搜索到解决方法 https://github.com/ClickHouse/ClickHouse/issues/11678,这句话点出了根本原因,

It is not allowed to use identical paths for different disks, the path for any non-default disks should not collide with the default path

config.xml的path标签已经将/data/clickhouse_ssd目录声明为default,上面的storage.xml重复声明了/data/clickhouse_ssd目录,导致重启时出现判断冲突。

解决方案:修改storage.xml配置文件,修改后内容如下,

此时的system.storage_policies表返回信息如下,

再次重启ck实例,这次成功执行。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、背景
  • 2、线上实践
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档