百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

节假日处理数据库集群异常小记(天莫云文档数据库的哪些集群模式为三副本集群架构)

nanshan 2024-11-02 12:12 12 浏览 0 评论

今天还在假期状态中,大概在10:30左右的时候,收到一条短信报警,提示一个数据库集群的中间件内存报警了,但是不到1分钟的时间,就提示报警恢复了,但是在11:00左右的时候,接到了研发同学的反馈,说这个数据库集群的只读服务貌似有些问题,想让我帮忙看一下到底有什么问题,整个集群的架构模式类似下面的形式,现在提示是黄色部分的只读数据库中间件有问题。

因为节前也做了巡检,而且这个只读服务已经运行了很长时间了,差不多有3年以上,所以我对于这个问题的初步印象是数据库中间件异常,通常是一些大查询导致的内存异常,应该重启一下就可以了,本来打算是让同事去处理一下的,过节了还是自己上吧。

因为涉及的是只读节点,对于线上业务是没有直接影响的,所以处理问题的方式会和读写节点的方式有一些差别。

登录到了服务器端之后,发现问题现象比较蹊跷,首先是我通过本地登录的方式尝试连接到数据库中间件,但是出现了卡顿,迟迟没有进入命令行,我想这个可能是内存的问题,因为之前在其他环境出现过类似的中间件假死的状态,需要重启一下中间件,所以重启后继续验证,发现问题没有改善,查看中间件日志,提示客户端的一些连接是异常的,而且从之前的日志中发现在今天是触发了一次OOM导致内存异常。

于是开始分析是不是系统层出现了问题,比如内存使用率等等,但是查看系统负载和磁盘,CPU等使用情况没有发现明显的异常,所以关注点还是在中间重启,比如kill掉多余的进程进行重启,但是重启无果后,准备进行终极大杀器-重启服务器。

在重启服务器之前和系统的同事也打了招呼,避免出现服务器无法启动的尴尬场景,重启的过程很顺利,但是中间件的服务状态还是依旧,依旧是卡,情况在一些停顿之后有一些改善,没有那么卡了,但是实际测试的时候,连接到中间件使用show processlist等命令均产生了卡顿无响应。

所以这个时候的关注点开始下移,我开始关注中间件的配置文件是否有变化,或者是自动化运维任务做了调整等,这个时候我从历史的备份中开始比对配置文件的变化情况,在做了多重备份之后,使用昨天的配置文件覆盖了今天的,但是重启之后依旧无果。

在多次查看日志无果的情况下,我在怀疑是不是防火墙产生了异常,比如有的服务以前是长连接,如果中间件异常后尝试重连,理由感觉很牵强而且不够严谨,但是还是试着做了这样的尝试,显然没有效果。

所以到了这个时候,已经做了很多尝试,但是效果都不明显,于是开始认真查看日志的异常情况,是否是数据节点出现了问题,逐一检查了配置和负载都没有发现异常,这个时候我开始从一些不明显的异常日志入手,比如提示中间件连接数据节点的时候连接被拒绝和关闭,于是我开始仔细的通过mysql命令测试真实的连接情况。

配置文件中的信息如下:

<dataHost name="localhost4" maxCon="1000" minCon="10" balance="0"                writeType="0" dbType="mysql" dbDriver="native" >                <heartbeat>select user()</heartbeat>                <writeHost host="hostM4" url="xxxxx:3309" user="xxxx"                       password="xxxx">                </writeHost>        </dataHost>

经过测试和比对,发现中间件竟然连接不到数据节点,提示是密码错误,感觉就像数据库中间件和数据节点没有做任何配置一样。

mysql -uxxxx -pxxxx -hxxxx -P3309Warning: Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied

这个测试情况让我大感吃惊,但是问题的方向已经基本明确了,所以和研发同学初步沟通了问题预计的处理策略和时间,就开始处理这个问题了,我逐个在数据节点的从库服务器端比对了数据库账号情况,发现这个账号的配置竟然在好几年前就失效了,通过数据库账号的配置发现原来的数据库账号只配置了读写中间件的IP,但是没有只读中间件的IP。

>>select user,host from mysql.user where user='root';+------+----------------+| user | host           |+------+----------------+| xxxx| [中间件读写IP]|| xxxx| localhost      |+------+----------------+6 rows in set (0.00 sec)

明白了这个大坑之后,我开始逐个配置数据库账号并逐一在中间件端进行了验证测试。

等待所有的数据节点都验证完毕之后,我重启中间件,只读中间件就好像唤醒了一般,反应很快,很酸爽。

对于这个问题的原因,让我还是很感慨,这算是一个遗忘了近3年的问题,这期间因为一直没有重启过只读中间件,所以原本指向的数据库配置其实是错误的,虽然后续做了配置文件的热加载,但是数据源部分的信息其实一直没有更新,今天因为业务使用了大查询导致了中间件节点OOM,接着触发了高可用机制,自动重启了中间件,但是重启之后连接的数据库权限全部失效。

整个问题的处理过程还是比较快的,尤其是在一种半迷离的状态下逐步确定问题方向,让自己确认是数据库的配置和权限出了问题,这对于我来说着实是一种难以相信的事情,但是恰恰是这个问题,也暴露了很多潜在的风险和隐患。

由此可见,之前听过的一种简单粗暴的经验是有道理的:一个运行多年的服务在3年左右还是需要重启一下。

相关推荐

CentOS 7 搭建 Harbor2.4.1 Docker镜像仓库

上一篇文章我们使用了registry镜像来搭建Docker私有镜像仓库,但是使用体验不是很好,没有一个可管理的UI界面,管理很麻烦。本篇文章将介绍一个新的搭建Docker镜像仓库的工具叫做Har...

简单认识认识mqtt及mosquitto(mqtt报文解析)

某项目中使用了MQTT作为进程间的通信方式,之前没用过,这两篇笔记我们就来一起学习一下这种方式。MQTT的一些介绍以下介绍内容来自《[野火]《LwIP应用开发实战指南》MQTT协议全称是Messa...

全源码打造高性能 LNMP 架构: 实战教程(2025最新版)

适用场景:企业生产环境、自建Web服务、深度性能调优操作系统:CentOS7/8、RockyLinux、Debian、Ubuntu(本文以CentOSStream9为例)技术栈:N...

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

Ubuntu24.04.2 企业级MinIO存储系统部署指南

一、概要1.1MinIO架构解析MinIO是一款高性能的云原生对象存储系统,采用Golang开发并遵循ApacheLicensev2.0协议。其核心架构基于纠删码(ErasureCode)技...

从零打造自己的 国产鸿蒙(OpenHarmony)定制系统-完整可落地流程

适用版本:OpenHarmony4.0/5.0Standard目标人群:想在x86PC、RK3568开发板或自有硬件上裁剪、加品牌、预装应用并生成可刷机镜像的开发者/团队目录环境准...

一次暂未成功的dify安装经历(dify怎么安装)

前几天在阿里云买了一台机,这几天一直在尝试安装dify,到现在还没安装上我是按这个教程装的https://blog.csdn.net/2401_82469710/article/details/14...

ZLMediaKit教程(五)支持webrtc(webrtc lib)

ZLMediaKit系列文章(共六篇):ZLMediaKit流媒体(一)编译安装ZLMediaKit教程(二)主程序和配置文件解析ZLMediaKit教程(三)URL规则ZLMediaKit教程...

Linux程序安装与管理指南(linux程序安装命令大全)

在Linux系统中,安装和管理程序主要通过包管理器和手动编译安装两种主要方式实现。以下是详细的操作指南,涵盖常见发行版(如Ubuntu/Debian、CentOS/RHEL、Fedora等)的用法。一...

离线状态下安装 Nginx 各个模块?这篇攻略让你轻松搞定

你是不是也在为离线状态下安装Nginx各个模块而发愁?在互联网大厂后端开发工作中,我们常常会遇到一些特殊的网络环境,比如公司内部的离线服务器,或是处于隔离状态的测试环境。当需要在这些离线环境中安装...

Rust实践:Win10环境下的openssl交叉编译

Rust支持跨平台,可以指定生成目标平台,交叉编译也是支持的。当然,想要交叉编译成功,还需要指定平台的编译器(如:msvc、gcc等)。openssl是C语言开发的库,如果在Rust代码中用到open...

Linux下Blackwell架构显卡(RTX5070/5090)编译PaddlePaddle指南

Blackwell显卡架构如RTX5070\5090等显卡当前Paddle预编译版本中包含的GPU架构(即SM架构)是有限的,比如常见的SM75(T4)、SM86(A10)、SM89(...

突破操作系统界限,掌握Linux的必备指南

#头条创作挑战赛#简介Linux是一种开源的操作系统,它的核心思想是自由和开放。Linux以其稳定性、可靠性和安全性而闻名,被广泛用于服务器和嵌入式设备中。Linux创始人Linux安装在安装Linu...

Linux日常高频使用的100条命令,强烈建议收藏

查看系统信息如何查看系统版本:uname-alsb_release-acat/etc/os-release如何查看系统内核信息:uname-r如何查看系统CPU信息:lscpucat...

Linux文件系统结构全解析(linux文件结构详解)

对Linux新手而言,“一切皆文件”的设计哲学常让人既兴奋又困惑——打开终端输入ls/,看到的bin、etc、var等目录到底有什么用?如何快速定位关键文件?本文将从Linux文件系统的底层逻...

取消回复欢迎 发表评论: