ClickHouse数据盘满了问题处理

2022-04-14  本文已影响0人  淡淡的小番茄

背景

尽管ClickHouse对Zookeeper依赖还是蛮严重的,对于非常大的集群,你可以把不同的 ZooKeeper 集群用于不同的分片。据官方介绍:即使 Yandex.Metrica 集群(大约300台服务器)也证明还不需要这么做。奈何我们的8C 16G虚拟机在业务毫无压力的情况下,Zookeeper还经常选举。这个要到哪里去说理去呢?生活中十有八九不如意,工作作为生活的一部分更是如此,难免会遇到一些棘手的事情。今天就给大家分享下,如果ClickHouse所在机器数据盘满了,我们要怎么来处理?

尝试解决

ClickHouse数据盘满了。由于系统盘未满,机器还是能正常登录的。但是ClickHouse无法连接。如何快速恢复业务?

我们做了如下的尝试:

1、清理磁盘上无关数据

但是此机器是ClickHouse独占的,数据盘里都是ClickHouse的数据,无其它数据。

2、清理ClickHouse中非业务数据。

首先想到的是系统日志表,比如:query_log、query_thread_log。正常情况下我们直接登录客户端,进行日志信息的删除即可。这两张表是可以直接删掉的,系统会自动生成。但是,目前ClickHouse服务异常,根本登录不上去,也就不能直接通过客户端命令来进行删除。我们打算通过文件系统来删除:

a)进入到query_log的数据目录

cd .../clickhouse/data/system/query_log

ls -al

query_log使用的merge引擎,未明确指定分区时间粒度,采用的是系统默认分区设置:一个月一个分区。

b)清理数据

由于是系统日志表,与业务无关的数据。为了快速恢复业务,我们采用的方式是直接清空。当然我们也可以删除指定的分区块,需要删除合并好的分区块,未合并的分区块不能轻易删除。我们执行删除操作后,可以通过OPTIMIZE命令来主动触发合并逻辑,检验操作是否可行。

操作一:直接删除文件夹(未合并的):

rm -rf 202204_33635_34708_218

执行如下命令:

OPTIMIZE TABLE system.query_log  final;

错误信息如下:

SQL 错误 [1002]: ClickHouse exception, code: 1002, host: 172.30.225.10, port: 8123; std::exception. Code: 1001, type: std::__1::__fs::filesystem::filesystem_error, e.what() = filesystem error: in file_size: No such file or directory [/data1/clickhouse/store/4d2/4d2d74db-2341-4e19-9c79-312ffca0e21b/202204_33635_34708_218/data.mrk3]

Cannot print extra info for Poco::Exception (version 22.3.2.1)

查看ClickHouse狂报错,重启后错误消失。

操作二:直接删除文件夹(合并后的):

rm -rf 202204_8600_33634_2409

执行如下命令:

OPTIMIZE TABLE system.query_log  final;

一切正常。另外需要注意的是:大家在删除之前做好备份,或者将数据移动到detached文件夹里。再次重申:生产操作,需要慎重再慎重!

上一篇下一篇

猜你喜欢

热点阅读