1. 又一次系统故障

    上周五早上9点多,我还在上班的路上,接到技术leader的电话:线上突然出故障了;接着发来一张故障信息页面截图:

    system-fault-err-page

    截图包含的信息是:数据库中没找到数据表Users

    但同事检查过数据库,Users数据表是存在的。


    我快速地回忆了一下最近的代码发布和环境变更 - 前一天有个同事对线上机器做了点改动。因此,让同事赶紧检查一下之前的改动是否有问题,经检查确认改动没有问题,而且稍微思考一下就应该明白不是配置的问题,如果是配置的问题,那么问题应该早就出现了,而不是在早上9点多时候才发生。


    我翻了翻手机中最近收到的几条告警短信,去除重复告警短信,只有两条告警:

    • 某台Web服务器上出现大量的500错误
    • 某台数据库服务器的磁盘使用率为98.99%

    由此可以推测两个故障原因:

    1. 那台Web服务器上应用的数据库配置有问题 - 但检查之后确认没有问题
    2. 由于那台数据库服务器磁盘满导致的问题,虽然一时还想不到其中的关联 - 同事在检查之后,确认那台机器的磁盘确实已满,但通过内网的数据库管理后台,可以正常访问数据库,所以认为应该不是磁盘满导致的问题

    如此,一时我也没想明白故障的原因。


    接着,同事发来消息:只有登录用户才会遇到这个问题!

    这时,基于之前的线索,基本能断定故障原因是 - 数据库服务器磁盘满。为什么呢?

    1. 数据库管理后台默认是只读:读数据表列表、数据表结构、单个表的若干条数据 ...
    Tagged as : 笔记 故障
  2. 记一次系统故障

    前段时间,工作中遭遇一次故障,虽然不算什么“疑难杂症”,倒也花了不少时间才真正找到故障的原因,故也值得记录一下。

    为方便读者快速理解故障,先给出系统大致的架构图:

    gxt-tech-arch

    其中,

    1. 每台Web服务器上开启12个PHP-FPM实例,并配置到Nginx的upstream,每个实例最多可以开启10个子进程
    2. “Database Proxy”的代理规则为:写操作及事务中的所有SQL操作都交给主MySQL处理,其余的读操作都交给任意一台从MySQL处理

    故障所表现的现象包括:

    1.大量请求响应为502,但每次故障发生时,错误响应一般集中在一台Web服务器,如下图所示:

    nginx-502-error

    nginx-502-count

    2.(一台或多台)MySQL数据库服务器CPU使用率飙升(但并非总是一起表现故障),如下图所示:

    mysql-slave-server-idle


    故障刚开始出现时,重启/关闭出现故障现象的MySQL服务,或将出现故障的Web服务器上所有PHP-FPM重启,也能解一时的问题,但治不了本,故障还是频繁出现。

    在故障发生时,从相关服务器上收集到的信息如下所示:

    1.出现故障现象的Web服务器 - CPU使用率、内存使用率等系统指标均正常,但PHP-FPM子进程数达到上限(12 x 10 = 120),并且PHP-FPM进程与数据库代理服务器之间的网络连接数量较多(与PHP-FPM子进程数大致相当)

    2.出现故障现象的MySQL服务器 ...

    Tagged as : 笔记 故障

Page 1 / 1