故障分析 | 数据库故障 MHA 未切换

故障分析 | 数据库故障 MHA 未切换,第1张

某天晚上,数据库 hang 住,现象是:

无奈之下通过强制 kill 掉进程,重启数据库恢复。

这里暂且不说 hang 住的原因,仅分析数据库 hang 住,但是 MHA 未触发切换。

先说下结论,MHA 默认使用长连接对数据库做 ping 健康 检测(执行 select 1 as Value ),4次无法连接 MySQL 则触发切换。 前面数据库 hang 住只是新的连接无法建立,但是老连接却没有影响,且 MHA 的 健康 检测语句很简单,只在 server 层进行了检测,不涉及到 InnoDB 层,所以 MHA 认为 MySQL 是 健康 的,并没有作出任何决策。

MHA 从 0.53 版本开始支持 ping_type 参数设置如何检查 master 的可用性。支持3个 value :

通过将 ping_type 修改设置为 connect ,MHA 每次进程状态检测,需要新建连接,新链接无法成功建立,就触发了切换。

三种检测机制代码:

MHA 配置文件

模拟服务器CPU满负载,数据库无法建立新连接 编写一个简单的c程序,如下:

编译:

执行:

另外再跑两个 mysqlslap 压测程序:

有兴趣的同学可自行测试一下

调用链路:

MHA 监控进程启动后,会持续监控主节点的状态,主要的 健康 检测函数是 wait_until_unreachable()。

在这个函数中会有一个死循环,持续地进行 健康 检测

1.首先,测试连接,连接正确返回0,否则返回1。

2.测试连接成功后,则进行 健康 状态检测(前面说的3种方式);如果连续4次连接失败,则在第4次的时候会使用第二脚本进行检测(如果定义了的话),如果检测通过,则认为 master 挂掉

关键函数 wait_until_unreachable()代码:

数据库Failover:FailOver中文为故障切换。Dataguard方式的一种切换模式,是不可逆的。当主数据库发生宕机,且不能及时恢复时,Oracle会丢弃主数据库,将备用数据库转变为主数据库。当

failover之后,备用数据库变成为主数据库,从而丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式。

Failover

有以下特点:

主数据库offline,备用数据库online,这种 *** 作由系统和软件失败引起。

即使在备用数据库上应用重做日志,也可能出现数据丢失的现象,除非备

用数据库运行在guaranteed

protection模式下。

原主数据库重新使用时必须reinstantiated(start

instance)。

其它的备用数据库也需reinstantiated。

在主数据库正常工作时,Oracle

允许

DBA

将主数据库切换到备用数据库,此备用数据库变为主数据库,而原主数据库变为备用数据库。

数据库的切换可以从主数据库角色切换到备用数据库角色,也可从备用数据库角色切换到主数据库角色。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9932782.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存