涤生大数据教学集群的首次运维现场复现

news2025/1/16 14:10:03

事故背景交代

涤生大数据花费重金购得几台较高配置的阿里云服务器机器,构建了一整套以cdh为核心的大数据课程教学、学员实操练习环境、但是,就是这个但是,以为集群规模目前相对较小。不会有什么幺蛾子发生,于是运维中最核心的监控没并有完善到集群。

事故发生

2023年4月18日的清晨,在企业微信沟通群中,我们的spark课程大佬健哥反馈说我们内部使用的wiki服务出现编辑内容后保存报错的问题,这里做个说明,为了让小白学员有真实的企业操作环境体验,我们在管理学员上使用的现在大多数公司使用的wiki服务。

图片

问题排查一:

基于以上wiki服务的报错,一开始怀疑是网络的问题,首先查看了阿里云的网络监控,再次查看了我们的vpn服务监控(因为我们在集群安全防护上,是将所有的主机服务都隐藏在阿里云内网的,学员的对教学环境资源的访问都是需要通过VPN认证登录)还有其他内部服务的访问也都是没有问题的,这足以说明网络上是健康的。

于是打算登录通过jumpserver服务登录主机(这里做一个说明:我们提供给学员的练习平台是完全cp中小型企业的实际操作环境的,有基于web的【涤生数据开发平台】,也会有基于centos7系统的终端下shell 指令的练习操作,这一步就需要通过跳板机的认证授权,登录到特定的主机),通过检查wiki的服务日志来定位问题,此时发现jumpserver服务登录也出现的问题,无法正常登录,此时想起来,jumpserver服务和wiki服务是在一台主机上部署的,多年运维的直觉告诉我,有可能是主机层面出现问题了。才会有两个服务同时故障。于是立马通过cm的控制台查看主机资源的指标状态,一看吓一大跳,此刻文字表达不出(我草),各位看官请看下图:

图片

于是只能通过后门(登录主机,基于管理员用户留有后门,以备在jumpserver出现异常情况下登录主机排查问题)登录其中一台主机(这里当然是jumpserver和wiki服务所在主机)通过df -h指令一看,果然所有的磁盘都被写满,庆幸的是主机还没有完全卡死,常规的运维指定还可以正常操作。于是发现磁盘写满是因为datanode的数据目录存储很大导致,由此判断是有异常的大文件被写入hdfs存储系统,将整个hdfs的存储容量打满了。

处理问题:

既然问题已经找到,此时只需要确认hdfs写入的大文件,然后删除大文件就可以解决问题,于是执行了最常规的操作指令

hdfs dfs -count -s hdfs:///

报错,尴尬了,因为所有的磁盘写满了,所有整个hadoop集群的服务也受到影响,导致整个集群都挂了,于是眼下之急只能是扩充磁盘容量或者从主机层面直接释放磁盘容量。

说干就干,扩充磁盘容量是不可能了,因为老板没钱啊(多推荐点学员,看官老爷们),具体查看磁盘的存储文件,发现其他的日志文件也占据不小的存储空间,(简直就是看到了救命稻草),删除此部分文件,应该可以恢复磁盘的正常读写,进而将整体服务拉起来,后面也就迎刃而解了。

果然,和我们预料的一样,磁盘在释放出来一定量的存储空间后,wiki服务,jumpserver服务都可以正常运作,唯独(此处眼中已经泛起了泪花)在拉起hdfs集群时namenode不能正常拉起。

问题排查二:

既然namenode不愿意正常运行,坑定是哪里出现了毛病,那不怕,咱干的就是这个,哪里有问题,就修哪里。

最常规的排查思路,看日志,只要日志看的好,80%的问题基本都能解决了。果不其然,日志中显示,namenode一开始是可以正常拉起的,但是在拉起一段时间后其中一个节点就挂掉了,而且从日志中可以发现,问题出现在HDFS启动时无法拉取JournalNode对应的数据,应该是JournalNode服务出现异常,于是通过查看JournalNode的服务日志继续深扒问题,于是乎,有了下面一段重要日志的出现:

图片

从上面的日志文件中可知,因为是磁盘写满导致的JournalNode宕机,所以导致了JournalNode维护的edits文件损坏。

重点提示HDFS启动如果报错是拉取JournalNode对应的数据异常,此类错误的原因大概率为JournalNode异常。

我们可以基于以下三点来排查处理问题:

观察JournalNode的启动状态和日志。

         如果JournalNode的日志无明显异常,可考虑NameNode节点到JournalNode节点的网络联通性。

         如果JournalNode出现上述异常日志,可以在集群中找到一个健康的JournalNode节点并通过将此节点上数据全部复制到其他节点来修复其他异常的JournalNode节点。

         如果JournalNode出现上述异常日志,且所有的节点都出现异常,此时需要删除其中一个节点以edits_inprogress开头的文件,然后同步所有的文件到其他JournalNode节点。

最终解决:

本次集群的故障就是所有的JournalNode节点的数据文件发生损坏,处理手段也是删除其中一个节点的edits_inprogress开头的文件,然后同步到其他所有JournalNode节点,重启整个集群后,集群正常运行。

然后定位到hdfs的异常文件,删除此文件,磁盘恢复正常存储水平。所有服务恢复正常运行。

问题复盘:

复盘本次事故的原因,触发点很简单,就是没有及时监控主机磁盘,导致磁盘写满,进而引发一连串的问题发生,所以基于此,我们眼下需要做的就是完善告警机制。于是就安排起来了。

这里我们选用的也是当下比较火的三个搭档promethues+grafana+altermanager(小广告打一波:涤生大数据的运维课程体系中有关于这三个组件的详细使用教程以及详细的企业实战案例,有需要的老铁可以私聊

图片

结尾:

手撸webhook python小代码分享一波。


import json
import requests

from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    data = request.get_json()

    # 获取告警信息
    alerts = data.get('alerts', [])

    # 解析告警信息
    for alert in alerts:
        alertname = alert.get('labels', {}).get('alertname', 'Unknown')
        status = alert.get('status', 'Unknown')
        summary = alert.get('annotations', {}).get('summary', 'Unknown')
        # print(alertname)
        # print(status)
        # print(summary)

        # 构建机器人消息体
        payload = {
            "msgtype": "text",
            "text": {
                "content": f"*{alertname} {status}*\n{summary}"
            }
        }

        # 发送消息到机器人
        url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a4df7f84-fe6e-47f9-xxx'
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, headers=headers, data=json.dumps(payload))

        if response.status_code != 200:
            return f"Failed to send notification: {response.text}", 500

    return "Notification sent successfully", 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux] CentOS7 中 pip3 install 可能出现的 ssl 问题

由于解决问题之后, 才写的博客, 所以没有图片记录. 尽量描述清楚一些 今天写代码的时候, 突然发现 文件里用了#define定义宏之后, coc.nvim的coc-clangd补全就用不了 :checkhealth了一下, 发现nvim忘记支持python3了 尝试pip3 install neovim的时候, 发现会警告然后安装失败.…

设计模式结构型——代理模式

目录 代理模式的用途 代理模式的实现 静态代理 JDK动态代理 CGLIB动态代理 代理模式的特点 与其他模式比较 代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过创建一个代理对象来间接访问原始对象。代理模式的核心思想是将对目…

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片

20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片 2023/7/21 22:58 1、前言: AES-128加密的ts视频切片【第一个】,打开有时间限制的! https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?typ…

小鹏G6吹响汽车智能化普惠号角

监制 | 何玺 排版 | 叶媛 小鹏G6大卖。目前其订单的交车周期已经长达12周。这款主打智能化的“未来之车”,已经正式吹响了汽车智能化普及的号角。 01 订单排满,小鹏G6成“爆款” 7月11日,小鹏汽车董事长何小鹏在社交媒体上发了一张照片&am…

Flink笔记

Flink笔记 2.Flink学习笔记2.1流式处理对比2.2 Flink核心概念2.2.1并行度2.2.2算子链2.2.3任务槽 2.3 DataStream2.3.2 读取数据源-源算子(Source)2.3.3 转换算子(Transformation) 2.Flink学习笔记 2.1流式处理对比 学习Spark S…

Django设置权限管理

目录 整体思路 1.使用django自带的后台功能添加组和用户 启动django服务后,在Django终端添加一个账号 在网页上输入网址,跳转到登录页面 Groups 新增组,设置组的名字,对应的权限Save即可 Users 将用户绑定组或单独设置权限 2.用…

arm-day2

汇编实现三个灯循环点亮 .text .global _start _start: /**********LED1点灯**************/ RCC_TNIT:ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x1 << 4)orr r1,r1,#(0x1 << 5)str r1,[r0]LED_TNIT:ldr r0,0x50006000ldr r1,[r0]and r1,r1,#(~(0x3 << 20…

珠海市黄杨山之旅游

西湾村 早上6点半出门&#xff0c;买点五人份的早餐 A点 第一个点&#xff0c;冲 C点 D岛 到d点休息 B点 高度&#xff1a;229米 到这里有人吐了&#xff0c;建议早餐不要吃超过三个包子&#xff08;他吃了四个包子&#xff0c;1个鸡蛋&#xff0c;1个火腿&#xff09; 记…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀&#xff0c;返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…

Window环境RabbitMq搭建部署

Erlang下载安装及配置环境变量 下载erlang&#xff0c;原因在于RabbitMQ服务端代码是使用并发式语言Erlang编写的 Erlang下载 Erlang官网下载&#xff1a; http://www.erlang.org/downloads Erlang国内镜像下载&#xff08;推荐&#xff09;&#xff1a; http://erlang.org/d…

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…

力扣 -- 121. 买卖股票的最佳时机

题目&#xff1a; 题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 解题步骤&#xff1a; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。说明&#xff1a;以下这种方法并…

【动态规划part02】| 62.不同路径、63.不同路径||

目录 &#x1f388;LeetCode 62.不同路径 &#x1f388;LeetCode 63. 不同路径 II &#x1f388;LeetCode 62.不同路径 链接&#xff1a;62.不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向…

jQuery基本介绍和 DOM 对象互相转换

文章目录 jQuery基本介绍和 DOM 对象互相转换基本介绍jQuery 的原理示意图JQuery 基本开发步骤说明:jQuery简单示例 jQuery 对象和 DOM 对象什么是 jQuery 对象DOM 对象转成 jQuery 对象应用实例 jQuery 对象转成 DOM 对象代码演示 jQuery基本介绍和 DOM 对象互相转换 基本介绍…

设计模式篇---工厂方法(可通过lambda实现)

文章目录 概念结构实例通过lambda实现总结 概念 工厂方法模式&#xff1a;定义一个用于创建对象的接口&#xff0c;但是让子类决定将哪个类实例化。工厂方法模式让一个类的实例化延迟到其子类。 这个模式还是比较好理解&#xff0c;且使用场景比较频繁。简单工厂是只有一个工厂…

使用 Vue 创建一个简单的 Loading 动画

使用 Vue 创建一个简单的 Loading 动画 1. 开始之前 确保 正确安装了 Vue 3知道如何启动一个新的 Vue 项目&#xff08;或在项目中使用Vue&#xff09;了解 Vue 3 的 Composition API&#xff08;本文将使用&#xff09; 2. 设计组件 该组件应该包含三个部分 控制逻辑旋转…

Centos7:Flask-Apache部署

系列文章目录 RHCE第0章&#xff1a;RHCE开始前的准备 RHCE第1章&#xff1a;Web服务器&#xff08;上&#xff09; RHCE第1章&#xff1a;Web服务器&#xff08;下&#xff09; RHCE第2章&#xff1a;DNS服务 RHCE第3章&#xff1a;DHCP服务器 RHCE第4章&#xff1a;Firewall…

Tensorflow无人车使用移动端的SSD(单发多框检测)来识别物体及Graph的认识

环境是树莓派3B&#xff0c;当然这里安装tensorflow并不是一定要在树莓派环境&#xff0c;只需要是ARM架构就行&#xff0c;也就是目前市场上绝大部分的嵌入式系统都是用这套精简指令集。 在电脑端的检测&#xff0c;有兴趣的可以查阅SSD(Single Shot MultiBox Detector)系列&a…

SpringCloudAlibaba微服务实战系列(四)Sentinel熔断降级、异常fallback、block细致处理

SpringCloudAlibaba Sentinel降级和熔断 接着上篇文章的内容&#xff0c;在Sentinel中如何进行降级和熔断呢&#xff1f; 熔断降级规则 降级规则 在Sentinel中降级主要有三个策略&#xff1a;RT、异常比例、异常数&#xff0c;也是针对某个资源的设置。而在1.8.0版本后RT改为…

python post请求编码问题

在日常的python使用中&#xff0c;必不可少的就是爬虫相关的知识。 爬虫也常会遇到一个问题&#xff0c;即就是编码的问题。 如下&#xff1a; 通过抓包可以看到额&#xff0c;实际python提交的参数为&#xff0c;如下格式&#xff1a; 那这种的签名必不可能通过&#xff0…