技术分享 | ClickHouse 冷热存储分离方案线上实践
创始人
2024-03-22 06:28:14

作者:任坤

现居珠海,先后担任专职 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变量设置为/data/clickhouse_ssd/,任选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 ] {}  Application: DB::Exception: "default" disk path should be provided in  not it : 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实例,这次成功执行。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...