在讲MHA选择
master的代码中,我们必须把维护的四个数组的来龙去脉讲清楚
server不是
master,且从库正常,
latest数组中的
server有足够的中继日志恢复这个落后的从库
(追上主库
),则放入这个
Alive_slaves的数组中
(此段代码在
ServerManager.pm:
init_servers函数
)
在
alive_slaves数组中选取
relaylog最新的
server,这个数组如果有多个
server,则
server的
Read_master_log_pos,master_log_file一定相等(此段代码在
ServerManager.pm:
identify_latest_slaves函数)
这个无需多解释,就是MHA配置文件中配置了
candidate_master的值,这个可以大于
1哦
1)
检测有故障的server
2)
MHA
开发云主机域名配置文件设置了
no_master
的
server
3)log_bin
没有打开的server
4)
版本不兼容的server
(高版本复制到低版本是没问题的,但是如果低版本的选为为主库,嘿嘿)
5)
复制落后太多的server
(1)
指定主库切换的,优先级最高(通常这是在手动切换)
(2)
如果server
在
latest
数组中,且在
perf
数组中,则优先返回
(3)
如果server
在
alive_servers
数组中,且在
perf
数组中,则优先返回
(4)
如果server
在
lastest
中,则优先返回
(5)
如果server
在
alive_servers
中,则返回
(6)
否则选举失败
这里优先级为1->6,具体实现在
(ServerManager.pm:select_new_master)
由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的搭配组合是主(Master)服务器的Mysql版本和从(Slave)服务器版本相同或者更低,主服务器的版本肯定不能高于从服务器版本。本次我用于测试的两台服务器版本都是Mysql…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。