设为首页 加入收藏

TOP

MySQL高可用方案MHA在线切换的步骤及原理
2017-05-27 17:35:47 】 浏览:612
Tags:MySQL 可用 方案 MHA 在线 切换 步骤 原理

在日常工作中,会碰到如下的场景,如MySQL数据库升级,主服务器硬件升级等,这个时候就需要将写操作切换到另外一台服务器上,那么如何进行在线切换呢?同时,要求切换过程短,对业务的影响比较小。


MHA就提供了这样一种优雅的方式,只会堵塞业务0.5~2s的时间,在这段时间内,业务无法读取和写入。


集群信息


角色                             IP地址                 ServerID      类型


Master                         192.168.244.10   1                 写入


Candicate master          192.168.244.20   2                 读


Slave                           192.168.244.30   3                 读


Monitor host                 192.168.244.40                     监控集群组


MHA具体的搭建步骤和原理,可参考另外一篇文章:


在线切换的步骤


1. 关闭MHA监控


# masterha_stop --conf=/etc/masterha/app1.cnf


2. 在线切换


# /usr/local/bin/masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.244.20 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000


其中,


--orig_master_is_new_slave是将原master切换为新主的slave,默认情况下,是不添加的。


--running_updates_limit默认为1s,即如果主从延迟时间(Seconds_Behind_Master),或master show processlist中dml操作大于1s,则不会执行切换。


在线切换的输出


MHA在线切换的原理


1. 检查当前的配置信息及主从服务器的信息


    包括读取MHA的配置文件/etc/masterha/app1.cnf及检查当前slave的健康状态


2. 阻止对当前master的更新


  主要通过如下步骤:


  1> 等待1.5s($time_until_kill_threads*100ms),等待当前连接断开。


  2> 执行 read_only=1,阻止新的DML操作


  3> 等待0.5s,等待当前DML操作完成。


  4> kill掉所有连接。


  5> FLUSH NO_WRITE_TO_BINLOG TABLES


  6> FLUSH TABLES WITH READ LOCK


3. 等待新master执行完所有的relay log


4. 将新master的read_only设置为off,并添加VIP


5. slave切换到新master上。


  1> 等待slave(192.168.244.30)应用完原主从复制产生的relay log,然后执行change master操作切换到新master上。


  2> 释放原master上加的锁。


  3> 因masterha_master_switch命令行中带有--orig_master_is_new_slave参数,故原master也切换为新master的从。


6. 清理新master的相关信息。


    主要是执行了reset slave all操作,清除之前的复制信息。


MHA在线切换需满足的条件


MHA在执行在线切换之前,会判断当前的主从复制信息,只有满足了以下条件,才能执行切换动作:


1. 所有SLAVE的IO线程和SQL线程都在运行。


2. 所有slave的Seconds_Behind_Master小于或等于running_updates_limit的值,该参数如果没有显示指定的话,则默认为1s


3. 在master上,通过show processlist输出,没有一个DML操作的时间大于running_updates_limit的值。


在线切换时,打开general log,各个服务器的操作信息


注:在执行masterha_master_switch命令时,会有两次确认操作


1. It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on 192.168.244.10(192.168
.244.10:3306)? (YES/no):


2. Starting master switch from 192.168.244.10(192.168.244.10:3306) to 192.168.244.20(192.168.244.20:3306)? (yes/NO):


以下输出中间都有两次空白,其中第一次空白之前的输出对应第一次确认之前,第二次之前的输出对应第二次确认之前。


原master 192.168.244.10


参考


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Arch Linux下源码编译安装MySQL 5.. 下一篇MySQL高可用方案MHA的部署和原理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目