当前位置:嗨网首页>书籍在线阅读

20-在线进行切换

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

在日常工作下,会需要将现有的主服务器迁移到另外一台服务器上。比如主服务器需要进行硬件升级,主库大表的DDL变更和在线添加索引操作等。MHA提供快速切换和优雅的阻塞写入,这个切换过程只需要0.5~2s的时间,这段时间内数据是无法写入的。在很多情况下, 0.5~2s的阻塞写入是可以接受的。因此切换主服务器不需要计划分配维护时间窗口。

MHA在线切换过程如下:

(1)检测复制设置和确定当前主服务器;

(2)确定新的主服务器;

(3)阻塞写入到当前主服务器;

(4)等待所有从服务器赶上复制;

(5)授予写入到新的主服务器;

(6)重新设置从服务器。

注意,在线切换的时候应用架构需要考虑以下两个问题:

自动识别master和slave的问题(master机器可能会切换),如果采用了VIP的方式,基本上可以解决这个问题;

负载均衡的问题(我们可以定义大概的读写比例,每台机器可承担的负载比例,当有机器离开集群时,需要考虑这个问题)。

为了保证数据完全一致,在最快的时间内完成切换,MHA 的在线切换必须在满足以下条件下才会切换成功,否则会切换失败。

所有slave 的IO线程都在运行。

所有slave的SQL线程都在运行。

所有 slave的 show slave status\G ;的输出中Seconds_Behind_Master参数小于或者等于running_updates_limit 秒,如果在切换过程中不指定 running_updates_limit,那么默认情况下running_updates_limit为1秒。

在 master端,通过 show processlist输出,没有一个更新花费的时间大于 running_updates_limit秒。

在线切换的一般操作步骤如下。

首先,停掉MHA监控:

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

其次,进行在线切换操作(模拟在线切换主库操作,原主库ip81变为slave,ip83提升为新的主库):

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive--new_master_host=192.168.7.83 --new_master_port=3307 --orig_master_is_new_slave--running_updates_limit=10000

最后查看切换过程,执行过程中的输出信息如下:

It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on 192.168.7.81(192.168.7.81:3307)? (YES/no): YES

From:

192.168.7.81 (current master)

+--192.168.7.83

+--192.168.7.185

To:

192.168.7.83 (new master)

+--192.168.7.185

+--192.168.7.81

Starting master switch from 192.168.7.81(192.168.7.81:3307) to 192.168.7.83(192.168.7.83:3307)? (yes/NO):

其中--orig_master_is_new_slave 的意思是将原master变换成slave,默认MHA下不做上述操作。

在--running_updates_limit切换时,如果原库执行的写入更新操作花费的时间大于默认1秒,或者新的主库和老的主库间存在主从延时的秒数大于默认1秒,那么MHA进行在线切换时将会失败,加上该参数代表,允许在主从延时的时间小于 running_updates_limit 内和主库执行写入SQL大于该参数设定的范围内成功在线切换MHA。