作者:任坤

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

本文来源:原创投稿

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


1、背景

线上有套10节点clickhouse集群,5分片 * 2副本,版本19.7.3。

开发执行一个创建分布式表的操作,9个节点都成功返回,有个节点报错,返回信息如下:

Code: 159. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: Wa
tching task /clickhouse/task_queue/ddl/query‐0003271440 is executing longer
than distributed_ddl_task_timeout (=180) seconds. There are 1 unfinished ho
sts (0 of them are currently active), they are going to execute the query i
n background.

2、诊断

登录该节点查看show processlist,正在执行1个分布式ddl,该ddl已经运行100多个小时,应该是卡住了。

clickhouse的分布式ddl是串行执行的,每次将任务存储到zookeeper
的/clickhouse/task_queue/ddl目录,按照FIFO排列。

对于每个节点,只有当前的ddl执行完毕,后面的才能被调用。

select * from zookeeper where path='/clickhouse/task_queue/ddl' order by ctime desc\G

刚刚发起的创建分布式表ddl排在第一位,上述截图中的optimize table排在第23,说明被其阻塞的ddl有22条之多,开发也确认最近两天的ddl任务在该节点上都没有成功。

尝试将其kill,等待几个小时仍然没有效果。

加sync关键字,直接卡住。

尝试重启ck实例也卡住,最后只能Kill -9。

重启实例后该任务依然存在,而且执行了10多分钟没有要结束的意思,kill操作仍然无效。

既然这个ddl无法绕过,执行的时候又长时间不结束,只能曲线救国,重命名该表让其临时消失一会。

rename table log_catch_data_local to log_catch_data_local1;

optimize table当即返回,并且其后22个ddl也很快执行完毕,最后再将其重命名回原表。

此时再次执行optimize table,只需5s便成功返回,该问题解决。

3、总结

clickhouse的分布式ddl在每个节点是FIFO串行执行的,任意1个ddl卡住了都会阻塞后续任务。

本例中的卡住的ddl是optimize table,可以通过重命名表跳过;如果是增删列,可以在rename后手工对该表执行本地ddl。

如果上述方法都不行,可以在出问题的节点将本地表直接drop,等待所有阻塞ddl执行完毕后,重新创建1个空表,会自动从另一个副本中同步数据。

最后,19.x版本已经很旧了,我们在使用过程中遭遇了各种问题,要尽快升级到20.x系列

故障分析 | ClickHouse 集群分布式 DDL 被阻塞案例一则相关推荐

  1. Redlock——Redis集群分布式锁

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 分布式锁是一种非常有用的技术手段.实现高效的分布式锁有三个属性需要考虑: 安全属性:互斥,不管什么时候,只有一个客户端持有锁 ...

  2. 如何做好Clickhouse集群的监控覆盖?

    前言 常言道,兵马未至,粮草先行.在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括指标采集.报警策略.图形化监控大盘.有了全面有效的监控,我们就仿佛拥有了千里眼顺风耳,对于线上 ...

  3. clickhouse集群容器化搭建

    本文将记录使用clickhouse镜像,分别在两种场景下搭建6节点集群(3分片2副本):1.在一台机器上使用容器方式安装clickhouse集群:2.在六台机器上使用容器方式安装clickhouse集 ...

  4. Docker搭建Clickhouse集群

    Docker搭建Clickhouse集群 环境说明 2C 2G 30G hostname IP 操作系统 服务 localhost 192.168.88.171 CentOs 7.8 clickhou ...

  5. clickhouse集群部署方案分析

    常见的三种集群架构方案 注:本文摘自网上内容,原文地址:https://zhuanlan.zhihu.com/p/161242274 ClickHouse分布式集群常见方案一:MergeTree + ...

  6. ElasticSearch的基本概念和集群分布式底层实现

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:张勇 http://tech.dianwoda.com/ 深 ...

  7. 集群,分布式,微服务的区别

    参考文献: 集群,分布式,微服务概念和区别理解 谢谢作者分享!

  8. elasticsearch 删除满足条件的语句_ElasticSearch的基本概念和集群分布式底层实现

    作者:张勇 http://tech.dianwoda.com/ 深度分页引发的机器性能问题 最近碰到一个ElasticSearch深度分页搜索,导致cpu占用过高问题,通过查阅ElasticSearc ...

  9. quartz集群分布式(并发)部署解决方案-Spring

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

最新文章

  1. CRM WEB UI 04明细界面添加按钮
  2. SQL_Server2008数据连接池
  3. 如何在Kali Linux中安装Google Chrome浏览器
  4. redis一般缓存什么样数据_SpringBoot+Redis轻松实现数据缓存
  5. 使用LBP+SVM,训练识别给定的测试图像
  6. PyTorch 1.0 中文文档:torch.utils.checkpoint
  7. 7价 半导体掺杂_模电总结第一章:常用半导体器件
  8. AngularJs学习笔记--directive
  9. access与sqlserver数据转换
  10. 脚本都不写,不能算正式测试
  11. 基于OpenGL的贪吃蛇游戏设计与实现
  12. 如何在桌面添加计算机日历工具,Win7电脑在桌面添加时钟、日历、货币、天气、CPU仪表盘小工具方法...
  13. 《统计学》第八版贾俊平第五章概率与概率分布
  14. php毕设周记,毕设周记录如何写的
  15. 使用oracle.jdbc.OracleDriver
  16. 非本小伙花了两年从小公司到蚂蚁金服,面试经验分享
  17. 2012年9月TIOBE编程社区指数
  18. 华为OD机试 - 找数字、找等值元素(Java JS Python)
  19. shell中for循环,读取一整行
  20. GPU和CPU的区别

热门文章

  1. 微服务入门级简介(通俗易懂)
  2. 配置Apache实现url转发
  3. Shared Nothing、Shared Everthting、Shared Disk
  4. 悬剑2.0 tools安装_node-gyp 安装报错:electron 如何调用 node-canvas 模块
  5. 使用erlang实现P2P磁力搜索-实现
  6. word中格式刷快捷键
  7. 从官方ROM中提取原生APK
  8. Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单内歌曲
  9. 宫廷心计服务器修复,宫廷心计2021版本
  10. ios 裁剪圆形头像_iOS中裁剪圆形头像