记一次低级且重大的Presto运维事故

2024-01-23 12:28

本文主要是介绍记一次低级且重大的Presto运维事故,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文纯属虚构,旨在提醒各位别犯类似低级错误。
如有雷同,说的就是你!


文章目录

    • 前言
    • 事件回顾
    • 后续
    • 总结

前言

首先,要重视运维工作和离职人员的交接工作,这个不必多说。一将无能,累死三军!
接下来,我尽可能根据操作记录、配置文件备份和聊天记录,还原这长达两个多月的运维事故。但毕竟我也只是个用户,很多细节内幕并不清楚,部分内容会进行“艺术”加工,但一些明显低级的错误行为,大家应该也能感觉出来,希望各位以此为戒。

事件回顾

图1 Presto配置文件修改备份记录
在这里插入图片描述
图2 Presto用户操作该配置文件记录
在这里插入图片描述
根据图1和图2可以看出以下问题,一是该配置文件修改非常频繁,二是很多修改并没有留下备份,三是不止使用Presto用户操作过该文件,因为有些备份和操作时间对不上。
图3 resource_groups.json.bak
在这里插入图片描述
这是2023年10月30日的备份文件配置,bi队列并行任务限制是60,最大排队数是20。备份的是修改之前配置,这和群里聊天记录也能对上,见下。
*2023年10月30日 09:22,有用户反馈很多任务失败,日志报错:
Too many queued queries for “global.bi”
刚接手运维同事 2023年10月30日 10:37 回复
已经找到问题原因,今晚我们会调整 global.bi 资源组的参数,确保满足高峰查询使用
之前我没有过多关注这句话,今天再看到的时候恍然大悟,从2023年10月30日起,他们就已经走错路了。bi队列的用户,不止我们数据部门批任务和即席查询用,dolphinscheduler上的租户没有几个,全公司的批任务大部分也会选择bi队列的用户作为租户使用。而刚接手的运维同事,将bi队列并行任务数限制从60一路降到15,导致大量任务堆积,进而导致了2023年11月后大量用户反馈Presto慢、不能用。
图4 resource_groups.json.bak.231220
在这里插入图片描述
这是2023年12月20日的备份文件配置,bi队列并行任务限制从60降到20,最大排队数从20涨到45。因为2023年10月30日至2023年12月20日之间修改配置并没有留备份,无法确定哪天修改,可以确定的是2023年12月20日前就已经改成20了。但bi队列是全公司用的最多的队列,竟然被他们拍脑门限制为20,生产集群改的如此随意。更可笑的是,某位人才把问题推给用户写的代码太烂,把用户当傻子,进一步激化矛盾。退一万步讲,写的烂也是一直都烂,集群正常运行多年,任务也正常运行多年,你就没意识到自己最近改了什么东西?另外还有人才归到了即席查询和批处理不能同时使用,同时使用这么多年,你一接手就不能用了是吧?还有任务变多、小文件过多等等借口。
图5 resource_groups.json.bak.20240112
在这里插入图片描述
这是2024年1月12日的备份文件配置,bi队列并行任务限制从最开始60降到15,最大排队数从45涨到75。2024年1月12日的备份是2024年1月8日至2024年1月12日的配置。

后续

在领导英明领导下,我们于2024年1月6日进行了小文件归档操作,截至2024年1月16日,清理了五千万小文件。

hadoop archive -Dmapred.job.queue.name=xxx -archiveName xxx.har -p 

Presto成功的从上午不能用,变成了下午也不能用。写个select 1 都要运行(排队)二十分钟。当然,这和清理小文件无关,某个人才于2024-01-08 21:26:39将bi队列并行任务限制改为15。
在这里插入图片描述
好在他们做对了一件事,2024年1月6日不光清理小文件,还新搭了14个节点的集群。当用户反馈不能用时,让他们使用新集群,成功实现了分流。但是dolphinscheduler上还有大量的任务使用老集群,15的限制还是导致任务积压、排队,问题还是没有解决。
我不是运维人员,一直知道他们改了配置,但不知道他们这么瞎改。了解这一切,是我在2024年1月18日偶然发现一个事,当单个任务实时内存使用超过150GB就会失败。
在这里插入图片描述
而老集群31个节点,单节点256GB,31*256=7936GB,单任务限制最大150GB。当时同时执行的只有19个任务,其它都在排队,就算都是顶格150GB,剩下还有大量资源。
在这里插入图片描述
于是我把这情况反馈到群里,领导@几个运维让回答一下,至今没有任何回复。
虽然没有回答,但他们晚上把限制提高到了20,与此同时,还更换了故障节点(存疑),降低了NameNode 堆内存等。2024年1月19日,Presto老集群突然正常了,但由于他们同时修改较多,且只是把限制从15提高到20,无法确定根源。但有一点可以确定,bi队列限制为15,甚至20都极不合理,大量资源闲置,人为制造排队。从上图可以看出,当时bi队列限制为15,其它队列加一起才19-15=4个任务,bi队列73个排队!

总结

从2023年10月30日到现在,两个多月时间,老Presto集群基本处于上午不能用的状态,甚至后来下午也不能用。不可否认,运维做了一些有效的工作,但如果一开始用户反馈排队过多,只是因为部分节点挂掉,甚至真的因为任务突然增多了,运维去增加节点(从后来搭建14个节点新集群来看,并不是没有服务器),而不是瞎改配置,结果会不会不一样?如果运维修改生产环境配置文件不那么随意、频繁,而是先统计bi队列每天总任务数、并行任务数,根据实际情况调整限制和错开任务执行时间,结果会不会不一样?
很多事宜通不宜堵,有些人什么时候才能明白。
祝愿大家远离低级的人和事。

这篇关于记一次低级且重大的Presto运维事故的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636406

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

(function() {})();只执行一次

测试例子: var xx = (function() {     (function() { alert(9) })(); alert(10)     return "yyyy";  })(); 调用: alert(xx); 在调用的时候,你会发现只弹出"yyyy"信息,并不见弹出"10"的信息!这也就是说,这个匿名函数只在立即调用的时候执行一次,这时它已经赋予了给xx变量,也就是只是

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

关于一次速度优化的往事

来自:hfghfghfg, 时间:2003-11-13 16:32, ID:2292221你最初的代码 Button1 34540毫秒 5638毫秒  Button2 我的代码 这个不是重点,重点是这个  来自:hfghfghfg, 时间:2003-11-13 16:54, ID:22923085528毫秒 不会吧,我是赛杨1.1G  128M内存  w2000, delphi6  128M

linux运维排查常用命令(开发专享)

cd: 进入到某个目录下 cd hikvision ll:详细展示该目录下有的文件 ll su 用户名:切换用户名 例子: su root 根据字符串在文件中查找信息:Grep –a –i 字符串 文件名 例子: grep -a -i 'indexCode=4a28a0dfe0244c0cbabcd9b2c3b60327' nms.nmsweb.debug.log cat 文

一次关于生产环境服务无故宕机的排查过程

故事的开始 这个故事是在一年之前,当时我们的系统运行在客户的k8s环境上。然后很神奇的是每个月底我们都会服务宕机,当然我们开启了多个实例。当时的容器线条就像心跳图一样(或许有些描述的不太准确,我没有找到当时那个像心电图一样的容器资源监控图)。 第一次的排查 当时我们还是很有信心去解决这个问题的。由于每个月的月底都是业务使用的高峰时段,也就是说,从表象上来看,qps一高,容器就挂。 业务日

Node.js应用的高效部署与运维:从流程自动化到精细化监控

Node.js应用的高效部署与运维:从流程自动化到精细化监控 目录 🚀 使用 pm2 管理 Node.js 应用🐳 容器化部署(Docker)☁️ 云服务部署与自动化扩展📈 应用监控与健康状态维护🤖 自动化运维与流程优化🛠️ 版本控制与发布管理 🚀 使用 pm2 管理 Node.js 应用 pm2 是 Node.js 生态中非常重要的进程管理工具,它简化了 Node.j