全网最细~ Clickhouse ~ 集群异常排查处理总结 《大力仑出品必属精品》

全网最细~ Clickhouse ~ 集群异常排查处理总结

1. Cannot execute replicated DDL query, maxium retires exceeded.

报错原因
有之前执行的更新任务没有执行完,必须要之前版本的更新执行完才能进行新一版本的更新。

排查流程
在报错节点查询mutation任务,是否有卡住或无法顺利执行,如果没有报错且长时间卡住可以停止mutation任务后重新执行。

# 查询mutation任务
# is_done = 1,则表示该任务已结束,查看latest_failed_前缀的字段是否有报错内容,没有则是正常执行完毕
SELECT * FROM system.mutations;
 
# 停止mutation任务,where条件根据具体mutation任务的query语句填写
KILL MUTATION [ON CLUSTER cluster] WHERE <where expression to SELECT FROM system.mutations query>

2. 写入速度慢,写入频次高

查看写入情况

SELECT
    databases,
    tables,
    count() AS times,
    avg(query_duration_ms / 1000) AS duration,
    avg(written_rows) AS rows_write,
    formatReadableSize(avg(written_bytes)) AS bytes_wirte,
    times / 10 AS times_min,
    sum(written_rows) / 10 AS rows_min,
    sum(written_bytes) / 10 AS bytes_min,
    sum(written_rows) / sum(query_duration_ms / 1000) AS eps,
    sum(query_duration_ms / 1000) AS insert_duration,
    avg(written_bytes) / avg(written_rows) AS line_size
FROM system.query_log
WHERE (type = 'QueryFinish') AND (query LIKE 'INSERT%') AND (event_time > (now() - 600))
GROUP BY
    databases,
    tables
ORDER BY duration ASC

3. replication_queue merge 与fetch 死锁

现象
merge part AAA 依赖 part AA 依赖 part A ,part A丢失或损坏

原因
part丢失/损坏

zookeeper卡顿

处理过程
detach 对应partition将清理replication_queue

ALTER TABLE table_name DETACH PARTITION ‘202002’;
SELECT sleep(3);
ALTER TABLE table_name ATTACH PARTITION ‘202002’;

4. Cannot convert NULL value to non-Nullable type

原因
表结构被修改过,存在字段类型由not NUll->Null,导致merge时数据类型转换失败

处理过程
重新建表,将旧数据导入新表

恢复表结构

5. DB::Exception: Timeout exceeded while writing to socket 写入超时异常

查看sql 执行详细

select * from system.query_log where query_id='038898b6-dc65-45a2-9671-eb29e3da4958' format Vertical;

6. insert导致 DB::Exception: Memory limit 写入占用过大内存

原因:
当批量写入数据单条较大时,会将整批数据缓存到内存中,并且因需要排序和序列化导致内存占用过大
处理:
max_insert_block_size 默认值 1048576 过大,可根据情况减小

The maximum block size for insertion, if we control the creation of blocks for insertion. (rows)

7. Warning ProcessList Too many simultaneous queries will wai

现象 警告队列同时写入次数过多
同时执行写入队列次数太频繁了,批量条数调大一点,,写入次数太频繁了导致队列数满了,就会有警告等待五分钟 max_concurrent_queries 这个参数就是队列数为最大30 ,不需要修改,让写入批次调大

8. Table is in readonly mode 异常

问题描述

第一种场景是写入时发现 元信息和zk 元信息不一致 导致写入失败 表是readonly 状态

解决方式

在flags 目录下创建force_restore_data 文件 ,重启猛禽节点

第二种场景是启动节点时 加载表信息时 zk 元数据不存在 表是readonly 状态

解决方式

rename 数据库,如果数据不需要,可重新创建数据库和表。

一般是zk元数据丢失导致

第三种启动时日志中出现异常 稳定运行一段后出现异常

解决方式

重启服务可恢复 (根本原因是memory limit 内存不足 clucene_search_cache_size=5368709120)

9. 系统断电导致文件系统损坏或文件损坏

处理方法:

改善措施,怎能fsync频率,降低文件损坏几率,但不能完全规避

可优化参数

内核参数:
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 1
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 5
vm.dirty_writeback_centisecs = 500

  1. zookeeper中数据副本节点丢失( Coordination::Exception: No node)
    两种现象,但都是副本节点信息丢失引起

zk中副本节点路径:~/{表路径}/replicas/{副本编号}/{信息节点}

现象:

1,启动时表加载失败导致启动失败

2,表一直处于readonly状态无法恢复

处理过程:

登录zookeeper,确认路径是否存在: ls /clickhouse/tables/38/xuanji_dwd/dwd_dayu_log_auth_user_timeout_and_exit_local/16e6dde7-44c6-4af4-b8bc-954955458531/replicas/1
如果路径不存在
备份元数据:mv /opt/xinghai/clickhouse/software/metadata/node1/store/5bf/5bfb9551-bd6e-4321-9589-466a0628a63c/dwd_dayu_log_auth_user_timeout_and_exit_local.sql /home/clickhouse/bak
重新启动当前节点
dwd_dayu_log_auth_user_timeout_and_exit_local表已不存在,重新建表(路径必须相同)
数据会自动从副本节点同步过来

11. Too many parts (3005). Parts cleaning are processing significantly slower than inserts

当写入table,part数量过多时,产生此异常

表创建不合理,或merge不及时。

1.查看partition分布情况,如果每个partition中的part数量过少,则不正常
2.如果partition字段不正确,需要修改表结构

// 查看表结构
show create table database.table format Vertical;
// 备份表
rename table database.table to database.table_bak on cluster {集群名};
// 重新创建表
create database.table
// 恢复数据
insert into database.table select * from database.table_bak on cluster {集群名};

12. part丢失后恢复

处理:
分区:丢失的part所在的分区

重启分区,刷新分区下的part元数据信息,在单个副本下执行即可


alter table uae.alert detach partition '20220505';
 
alter table uae.alert attach partition '20220505';
  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值