【MHA】MySQL高可用MHA源码1-主库故障监控

10 篇文章 0 订阅

 

1 阅读之前的准备工作

1 一个IDE工具 ,博主自己尝试了vscode安装perl的插件,但是函数 、变量 、模块等都不能跳转,阅读起来不是很方便。后来尝试使用了pycharm安装perl插件,阅读支持跳转,自己也能写一些简单的测试样例,比较推荐。

2 对perl语法的简单了解。我是通过菜鸟教程 和 perl 官网去了解一些关键字,符号等的用法。perl 相比Python等其他语言,网上的资料还是比较少。而且perl语言给我的感觉是语法比较随性,关键字 符号比较多。遇到不是很理解的我都是查下官网然后动手测试下。

2 阅读版本

MHA 0.58

3 源码目录结构

4 脚本命令功能

masterha_check_repl 检查mysql复制关系
masterha_check_ssh 检查服务器免密ssh连通性
masterha_check_status 检查被mha监控的MySQL主库状态
masterha_conf_host 从配置文件中移除host或往配置文件中添加host
masterha_manager 监控mysql主库可用性并在不可用时进行切换
masterha_master_monitor  监控mysql主库可用性 (检测MHA运行状态)
masterha_master_switch 在线切换脚本
masterha_secondary_check 二次检查脚本 
masterha_stop 停止MHA进程

5 源码解读 

启动MHA会使用以下的命令

nohup masterha_manager --conf=/home/mha/conf/app1.cnf &

停止命令

masterha_stop --conf=/home/mha/conf/app1.cnf

所以我们阅读 MHA 源码,可以从 脚本masterha_manager.pl 作为程序的入口 ,本篇文章主要介绍 MHA如何 监控主实例 。

函数调用链如下

执行 masterha_manager  命令启动

         -->MHA::MasterMonitor::main

                -->wait_until_master_is_dead()

                        -->wait_until_master_is_unreachable()

                                -->wait_until_unreachable($)

 

大部分的监控逻辑在函数wait_until_master_is_unreachable中 ,以下是函数的源码阅读的流程图 

整体流程图 

 

源码阅读总结

监控主库故障的函数 是一个无限循环的函数,知道主库宕机或出现连接问题

1探活方式

ping_type (从 0.53 版本开始支持)
  • 默认情况下,MHA 建立到主服务器的持久连接,并通过执行 "SELECT 1"(ping_type=SELECT)检查主服务器的可用性。
  • 但在某些情况下,最好每次连接/断开连接都进行检查,因为它更严格,可以更快地检测到 TCP 连接级别的故障。设置 ping_type=CONNECT 可以实现这一点。
  • 从 0.56 版本开始,添加了 ping_type=INSERT。会创建一个库表,进行数据插入
CREATE DATABASE IF NOT EXISTS infra
INSERT INTO infra.chk_masterha values (1,unix_timestamp()) ON DUPLICATE KEY UPDATE val=unix_timestamp()

2 探活间隔

ping_interval


此参数说明 MHA Manager 多久 ping(执行 ping SQL 语句)一次主服务器。连续错过三个连接间隔后,MHA 管理器确定 MySQL 主服务器已死亡。因此,通过 ping 机制发现故障的最长时间是 ping 间隔的四倍。默认为 3(3 秒)。

如果 MHA Manager 由于太多连接或身份验证错误而无法连接,则不会将主服务器视为已死亡。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值