ost2被选择成为新的Master,host3继续从host2复制,好像第三层复制不存在一样。
ping_interval (App/Global)
该参数用于设置MHA Manager多长时间ping(执行ping SQL语句)一次Master,即ping Master实例的时间间隔,缺省为3秒。
当连续丢失3次连接间隔,即连续ping了3次都失败后,MHA Manager则认为Master已经死掉;所以通过这种ping机制发现故障的最长时间为ping_interval的4倍,即12秒。
注意:由于身份认证错误或MySQL实例连接数过多而导致的连接失败次数不计入Master死亡统计数。
ping_type (App/Global)
缺省情况下,MHA创建一个到Master的持久连接,然后定期(由ping_interval参数决定)执行“SELECT 1”(ping_type=SELECT),以此来检查Master的可用性。
但在有些情况下,通过定期地“创建/断开连接”方式效果会更好,因为这种方式相对来说更严格,并且可以更快地监测到TCP连接级故障;若采用这种方式,需设置ping_type=CONNECT。
该参数是从版本0.53开始引入的,可设置为CONNECT或SELECT,缺省为SELECT。
secondary_check_script (App/Global)
默认情况下,MHA通过单个路由(即从Manager到Master)来检查Master的可用性,这显然是不够完善的,强烈建议采用两个或多个网络路由来检查Master的可用性。
MHA正是通过调用secondary_check_script参数定义的外部脚本来实现多路由监测的,比如:
secondary_check_script=masterha_secondary_check -s remote_host1 -s remote_host2
masterha_secondary_check包含于MHA Manager包中,其内置的脚本在多数情况下还是比较好用的;当然,若需要更多的功能,也可自定义一个网络检查脚本,然后通过该参数调用。
在上面的例子中,MHA通过如下两条路径来监测MySQL Master Server的活动:
Manager(A)->remote_host1(B)->master_host
Manager(A)->remote_host2(B)->master_host
通过这两条路径,若连接A成功,连接B失败,masterha_secondary_check退出并返回代码0,MHA Manager判断Master已经真正死掉,并开始故障切换;如果A不成功,
masterha_secondary_check退出并返回代码2,MHA Manager猜猜可能发生了网络问题,并不开始故障切换;若B成功,则退出并返回代码3,此时MHA Manager认为Master实际上是活着的,
也不开始故障切换。
一般来说,remote_host1和remote_host2这两条从MHA Manager到MySQL Server的通道应该位于为不同的网段。
MHA调用该参数定义的脚本时,会自动传递user/master_host/master_ip/master_port这几个参数,所以无需重复定义。
使用masterha_secondary_check,有以下几点需要说明:
??内置脚本依赖于IO::Socket::INET Perl包,该包从Perl v5.6.0缺省已包含;
??内置脚本需要通过SSH连接到其它远程服务器,所以需要设置SSH公共密钥认证;
??另外,内置脚本尝试从remote server建立到MySQL Master的TCP连接,这意味着MySQL配置文件中的max_connections设置不受影响,如果TCP连接成功,
则MySQL的aborted_connects状态值递增1。
master_ip_failover_script (App/Global)
常用的HA环境,通常是通过VIP来实现的,在Master上绑定一个VIP,Master崩溃后,由HA将VIP切换到Standby上。
另一种常见方法是创建一个全局目录数据库,里面存放所有的应用和Writer/Reader IP地址映射列表,以此来代替VIP,这种情况下,若Master故障,则需更新映射列表。
这两种方法各有利弊,MHA不限制使用哪一种,允许用户使用任何基于IP地址的故障切换方案;该参数就是用于此目的,换句话说,就是需要自行编写一个脚本来保证应用可以透明地
连接到新的Master上,并通过该参数调用,比如:master_ip_failover_script=/usr/local/sample/bin/master_ip_failover
示例脚本为(MHA Manager package)/samples/scripts/master_ip_failover。
整个运行期间,MHA Manager需要调用该脚本3次,第一次是在开始监控之前,目的是检查脚本的可用性,第二次是在调用shutdown_script脚本之前,第三次是在新的Master应用完所有的
relay logs之后。调用期间,MHA Manager会传递如下参数:
? Checking phase
--command=status
--ssh_user=(current master's ssh username)
--orig_master_host=(current master's hostname)
--orig_master_ip=(current master's ip address)
--orig_master_port=(current master's port number)
? Current master shutdown phase
--command=stop or stopssh
--ssh_user=(dead master's ssh username,if reachable via ssh)
--orig_master_host=(current(dead) master's hostname)
--orig_master_ip=(current(dead) master's ip address)
--orig_master_port=(current(dead) master's port number)
? New master activation phase
--command=start
--ssh_user=(new master's ssh username)
--orig_master_host=(dead master's hostname)
--orig_master_ip=(dead master's ip address)
--orig_master_port=(dead master's port number)
--new_master_host=(new master's hostname)
--new_master_ip=(new master's ip address)
--new_master_port=(new master's port number)
--new_master_user=(new master's user)
--new_master_pass