MySQL MHA切换过程分析

这篇具有很好参考价值的文章主要介绍了MySQL MHA切换过程分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.主要操作

启动 

MHA的启动脚本为masterha_manager(安装后,默认路径--/usr/local/bin/masterha_manager)。启动的过程中会主动检查各节点的SSH连接和主从复制的状态是否正常。运行期间,manager会调用masterha_master_monitor脚本(masterha_master_monitor进一步调用XXX/mha4mysql-manager-0.5?/lib/MHA/MasterMonitor.pm 和 HealthCheck.pm 等脚本),探测各节点的运行情况。探测间隔由manager配置文件中的ping_interval参数决定,探测三次主节点无反应,就判定为宕机。

 故障选主

---读取配置文件中是否有候选主库的参数--candidate_master=1;如果有该参数,并且check_repl_delay=0,则将该节点提升为新的主库。

--如果没有指定候选主节点,则自动判断所有从库的日志量,将最接近主数据库的从库提升为新的主库。

---按照配置文件中,节点的先后顺序选主。

数据补偿

---判断主库SSH的连通性,如果能连通,则通过“save_binary_logs”脚本将缺失的binlog发送给从库,并恢复;

---如果主库无法连通,则通过“apply_diff_relay_logs”脚本计算从库的relay log的差异,并恢复到其他从库;

角色切换

新选出的主库,解除从库身份,剩余从库与新的主库建立主从关系。

VIP偏移

虚拟IP的绑定。

 

2 过程步骤

从打印的log中,可以查找出以下几个阶段的信息

* Phase 1: Configuration Check Phase..

** Phase 1: Configuration Check Phase completed.  

 

* Phase 2: Dead Master Shutdown Phase.. 

* Phase 2: Dead Master Shutdown Phase completed.

 

* Phase 3: Master Recovery Phase..

* Phase 3.1: Getting Latest Slaves Phase..

* Phase 3.2: Saving Dead Master's Binlog Phase..

* Phase 3.3: Determining New Master Phase..

* Phase 3.3: New Master Recovery Phase..

* Phase 3.3: New Master Diff Log Generation Phase..

* Phase 3.4: Master Log Apply Phase..

* Phase 3: Master Recovery Phase completed.

 

* Phase 4: Slaves Recovery Phase..

* Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..

* Phase 4.2: Starting Parallel Slave Log Apply Phase..

 

* Phase 5: New master cleanup phase..

 

3. 思考

如果在FailOver的过程中,主库恢复了怎么办?

要分情况了,可能会FailOver继续也可能要FailOver终止。下面是FailOver终止的Log。

Sat Jan 20 09:27:28 2024 - [warning] Got timeout on MySQL Ping(SELECT) child process and killed it! at /usr/local/share/perl5/MHA/HealthCheck.pm line 431.
Sat Jan 20 09:27:28 2024 - [info] Executing SSH check script: exit 0
Sat Jan 20 09:27:32 2018 - [warning] Got error on MySQL connect: 2003 (Can't connect to MySQL server on '172.171.172.171' (4))
Sat Jan 20 09:27:32 2018 - [warning] Connection failed 2 time(s)..
Sat Jan 20 09:27:34 2024 - [warning] HealthCheck: Got timeout on checking SSH connection to 172.171.172.171! at /usr/local/share/perl5/MHA/HealthCheck.pm line 342.
Sat Jan 20 09:27:35 2024 - [warning] Got error on MySQL connect: 2003 (Can't connect to MySQL server on '172.171.172.171' (4))
Sat Jan 20 09:27:35 2024 - [warning] Connection failed 3 time(s)..
Sat Jan 20 09:27:38 2024 - [warning] Got error on MySQL connect: 2003 (Can't connect to MySQL server on '172.171.172.171' (4))
Sat Jan 20 09:27:38 2024 - [warning] Connection failed 4 time(s)..
Sat Jan 20 09:27:38 2024 - [warning] Master is not reachable from health checker!
Sat Jan 20 09:27:38 2024 - [warning] Master 172.171.172.171(172.171.172.171:3307) is not reachable!
Sat Jan 20 09:27:38 2024 - [warning] SSH is NOT reachable.
Sat Jan 20 09:27:38 2024 - [info] Connecting to a master server failed. Reading configuration file /etc/masterha_default.cnf and /data/mhacnf/qqweixinod.cnf again, and trying to connect to all servers to check server status..
Sat Jan 20 09:27:38 2024 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sat Jan 20 09:27:38 2024 - [info] Reading application default configuration from /data/mhacnf/qqweixinod.cnf..
Sat Jan 20 09:27:38 2024 - [info] Reading server configuration from /data/mhacnf/qqweixinod.cnf..
Sat Jan 20 09:27:39 2024 - [info] GTID failover mode = 1
Sat Jan 20 09:27:39 2024 - [info] Dead Servers:
Sat Jan 20 09:27:39 2024 - [info] 172.171.172.171(172.171.172.171:3307)
Sat Jan 20 09:27:39 2024 - [info] Alive Servers:
Sat Jan 20 09:27:39 2024 - [info] 172.171.172.172(172.171.172.172:3307)
Sat Jan 20 09:27:39 2024 - [info] 172.171.172.173(172.171.172.173:3307)
Sat Jan 20 09:27:39 2024 - [info] Alive Slaves:
Sat Jan 20 09:27:39 2024 - [info] 172.171.172.172(172.171.172.172:3307) Version=5.7.21-log (oldest major version between slaves) log-bin:enabled
Sat Jan 20 09:27:39 2024 - [info] GTID ON
Sat Jan 20 09:27:39 2024 - [info] Replicating from 172.171.172.171(172.171.172.171:3307)
Sat Jan 20 09:27:39 2024 - [info] Primary candidate for the new Master (candidate_master is set)
Sat Jan 20 09:27:39 2024 - [info] 172.171.172.173(172.171.172.173:3307) Version=5.7.21-log (oldest major version between slaves) log-bin:enabled
Sat Jan 20 09:27:39 2024 - [info] GTID ON
Sat Jan 20 09:27:39 2024 - [info] Replicating from 172.171.172.171(172.171.172.171:3307)
Sat Jan 20 09:27:39 2024 - [info] Checking slave configurations..
Sat Jan 20 09:27:39 2024 - [info] Checking replication filtering settings..
Sat Jan 20 09:27:39 2024 - [info] Replication filtering check ok.
Sat Jan 20 09:27:39 2024 - [info] Master is down!
Sat Jan 20 09:27:39 2024 - [info] Terminating monitoring script.
Sat Jan 20 09:27:39 2024 - [info] Got exit code 20 (Master dead).
Sat Jan 20 09:27:39 2024 - [info] MHA::MasterFailover version 0.56.
Sat Jan 20 09:27:39 2024 - [info] Starting master failover.
Sat Jan 20 09:27:39 2024 - [info]
Sat Jan 20 09:27:39 2024 - [info] * Phase 1: Configuration Check Phase..
Sat Jan 20 09:27:39 2024 - [info]
Sat Jan 20 09:27:40 2024 - [info] GTID failover mode = 1
Sat Jan 20 09:27:40 2024 - [info] Dead Servers:
Sat Jan 20 09:27:40 2024 - [info] 172.171.172.171(172.171.172.171:3307)

Sat Jan 20 09:27:40 2018 - [info] Checking master reachability via MySQL(double check)...
Sat Jan 20 09:27:40 2018 - [error][/usr/local/share/perl5/MHA/MasterFailover.pm, ln218] The master 172.171.172.171(172.171.172.171:3307) is reachable via MySQL (error=1:Connection Succeeded) ! Stop failover. Sat Jan 20 09:27:40 2018 - [error][/usr/local/share/perl5/MHA/ManagerUtil.pm, ln177] Got ERROR: at /usr/local/bin/masterha_manager line 65.

注:Log中的3307是数据库的DB端口,别奇怪. 

如果是在 Checking master reachability via MySQL(double check) 的过程中(或者check前),发现恢复了,则退出切换过程。并且MHA的进程也会被退出(KIll),masterha_manager 需要重新手动启动。

Checking master reachability via MySQL(double check) ---MasterFailover.pm

源码如下:

# quick check that the dead server is really dead
# not double check when ping_type is insert,
# because check_connection_fast_util can rerurn true if insert-check detects I/O failure.
  if ( $servers_config[0]->{ping_type} ne $MHA::ManagerConst::PING_TYPE_INSERT )
  {
    $log->info("Checking master reachability via MySQL(double check)...");
    if (
      my $rc = MHA::DBHelper::check_connection_fast_util(
        $dead_master->{hostname}, $dead_master->{port},
        $dead_master->{user},     $dead_master->{password}
      )
      )
    {
      $log->error(
        sprintf(
          "The master %s is reachable via MySQL (error=%s) ! Stop failover.",
          $dead_master->get_hostinfo(), $rc
        )
      );
      croak;
    }
    $log->info(" ok.");
  }

 文章来源地址https://www.toymoban.com/news/detail-813343.html

到了这里,关于MySQL MHA切换过程分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MHA高可用部署与故障切换

    MySQL MHA 1.什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真

    2024年02月03日
    浏览(30)
  • 【Linux】MHA高可用配置及故障切换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切

    2024年02月11日
    浏览(41)
  • ARM启动原理和启动过程分析

    简介 简单介绍ARM设备启动原理和启动过程,帮助了解一些嵌入式相关理论基础知识。此文章是看韦东山老师的uboot启动课程总结的。 一 几种存储介质的介绍 1 SRAM:SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即

    2024年02月05日
    浏览(38)
  • springboot启动过程原理分析

    现在绝大多数java项目都上了Springboot框架, 因此深入理解Springboot框架的运行原理,能帮助我们更好的在Springboot框架下进行业务开发,同时能学习框架中优秀的设计思想, 本文主要是通过对Springboot源码的分析, 来理解整个springboot项目的启动流程. 因为Springboot不同版本的源码有差异

    2024年02月07日
    浏览(35)
  • docker服务启动过程分析

    How  docker.service start? just by ref 我们先了解docker的各个核心组件的介绍 runc:runc实现了容器的底层功能,例如创建、运行等。runc通过调用内核接口为容器创建和管理cgroup、namespace等Linux内核功能,来实现容器的核心特性。runc是一个可以直接运行的二进制程序,对外提供的接口

    2024年02月12日
    浏览(22)
  • 开源铱塔切换MySQL数据库启动报异常

    1.错误日志: 铱塔切换数据库配置为MySQL之后,启动后报错如下: SqlExceptionHelper - Table \\\'iotkit. task_info \\\' doesn\\\'t exist SqlExceptionHelper - Table \\\'iotkit. rule_info \\\' doesn\\\'t exist SqlExceptionHelper - Table \\\'iotkit. device_info \\\' doesn\\\'t exist SqlExceptionHelper - Table \\\'iotkit. virtual_device \\\' doesn\\\'t exist 2.环境:  JDK

    2024年04月23日
    浏览(29)
  • Shell脚本学习-MySQL单实例和多实例启动脚本

    已知MySQL多实例启动命令为: mysqld_safe --defaults-file=/data/3306/my.cnf 停止命令为: mysqladmin -uroot -pchang123 -S /data/3306/mysql.sock shutdown 请完成mysql多实例的启动脚本的编写: 问题分析: 要想写出脚本,必须对MySQL服务很熟悉。 1)单实例: 先是单实例的启动脚本的编写: 执行结果:

    2024年02月14日
    浏览(20)
  • Activity启动过程详解(Android 12源码分析)

    启动一个Activity,通常有两种情况,一种是在应用内部启动Activity,另一种是Launcher启动 1、应用内启动 通过startActivity来启动Activity 启动流程: 一、Activity启动的发起 二、Activity的管理——ATMS 三、线程切换即消息处理——mH 四、Activity启动核心实现——初始化及生命周期 2、

    2024年02月13日
    浏览(37)
  • Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件

     内核启动通常包括4个阶段: iROM代码启动(BIOS启动)。开发板上电后,先执行内部iROM中的固化代码,类似于BIOS,执行通电自检和初始化过程,包括初始化CPU、存储器、时钟、总线等一些必要的硬件资源。 启动引导加载程序BootLoader。根据启动引脚的电平,读取相应的存储

    2024年02月13日
    浏览(62)
  • 【Linux】使用 UEFI 的操作系统启动过程

    参考书籍《Beyond BIOS: Developing with the Unified Extensible Firmware Interface Third Edition》 BIOS(Basic Input/Output System,基本输入输出系统)是一段 存储在主板上(ROM)的固件 (firmware), 它是计算机加电后执行的第一个程序,负责进行硬件自检(POST,Power-On Self Test),检查CPU、内存、硬

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包