背景
之前公司面临磁盘不足的问题,虽然通过增加磁盘来缓解了。但是clickhouse集群节点扩充是发展迟早要面临的问题,所以尝试思考解决方案。
ck不同于hadoop体系,hdfs当集群增减节点时可以通过balance命令去自动调节。但ck集群不能自动感知集群拓扑变化,也不能自动 balance 数据。当集群数据量较大,复制表和分布式表过多时、想做到表维度、或者集群之间的数据平衡会导致运维成本很高。
方案
这里提供两个解决思路。
复制
当我们追求分布式表在新集群的平衡,数据量不大的情况,可以在新集群简历临时表B、然后将原始表A写入B中,再删除A表重新创建,之后将B表写入A中。
这种方式并不是数据量大、表数量过多的情形。
配置权重
当我们先用磁盘不够用的情况、通过配置权重指定大部分数据写入新的节点,是一种比较可行的方案。只需要配置/etc/metrika.xml 中各个shard的权重即可。
<clickhouse_remote_servers>
<ck_cluster>
<shard>
<weight>99</weight>
<replica>
<host>dc-sit-225</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>
</shard>
<shard>
<weight>1</weight>
<replica>
<host>dc-sit-226</host>
<port>9000</port>
<user>default</user>
<password></password>
</replica>

本文探讨了ClickHouse集群在面临磁盘不足时的扩容策略,包括通过调整节点权重实现数据倾斜的方法,以及在数据量不大时通过复制表进行数据平衡的方案。实测结果表明,配置权重能有效引导数据分布,降低运维成本。
最低0.47元/天 解锁文章
1662





