介绍:
masterha_master_switch 不监控主库,但是可以用于主库宕机后failover,可以用于在线切换主库
手动failover:
有时候需要手动执行failover机制,masterha_master_switch 命令可以用于 手动执行failover.
eg:
masterha_master_switch --master_state=alive --conf=/etc/app.cnf --dead_master_host=host1
常用参数介绍:
--master_state=dead
强制的参数,参数值为"dead" 或者 "alive" . 如果 设置为 alive 模式,masterha_master_switch 开始在线主库切换操作。
--dead_master_host=(hostname)
强制参数,宕机的主库所在的主机名称。--dead_master_ip 和 --dead_master_port 是可选参数,如果这些参数没有设置,--dead_master_ip 就是 --dead_master_host 解析的IP地址。--dead_master_port 为 3306
--new_master_host=(hostname)
新主机地址,可选参数,这个参数在你明确新的主库的主机,非常有用。(这就意味着你不需要让MHA来决定新的主库)。如果不设置此参数,MHA 将会利用自动failover的规则来选择新的主库。如果设置--new_master_host,MHA选择此主机为新的主库,如果不能成为主库,MHA将会退出
--interactive=(0|1)
如果设置为0,在masterha_master_switch,它自动执行故障转移(非交互式)。这实际上是和masterha_manager的内部运行机制一样,这种非交互式故障转移是有用的,如果你已经证实了master死了,但你想尽快做故障转移。非交互式故障转移也是有用的,如果你使用其他现有的主监控软件和要调用的非交互式故障转移命令软件。典型的例子是masterha_master_switch调用从集群软件像起搏器。
--ssh_reachable=(0|1|2)
指定master 经过SSH是否可达。0:不可达、1:可达、2:未知(默认值)。 如果设置为了2,此命令内部将会检测通过SSH 是否可达master,并且跟新SSH 状态。如果可达,且设置master_ip_failover_script 或者 shutdown_script .将会执行"--command=stopssh"。否则,执行 "--command=stop"。另外,如果宕机的master通过SSH可达,failover脚本试图从宕机的master机器上拷贝没有没有发送的binlog。
--skip_change_master
如果设置此参数,当发生failover的时候,MAH 在应用完不同的relay log退出,忽略CHANGE MASTER 和 START SLAVE 操作。所以 slaves 不会指向 新的master. 开启此参数,有利于手动的二次检查slave 恢复是否成功
--skip_disable_read_only
设置此参数,MHA 将不会在新的主库上执行 SET GLOBAL read_only =0 操作,有利于手动操作
--last_failover_minute=(minutes)
参考master_manager
--ignore_last_failover
参考master_manager
--wait_on_failover_error=(seconds)
类似于master_manager, 此参数只用于自动的/非交互式的failover。如果没有设置--interval=0,wait_on_failover_error 将会被忽略,在发生错误的时候不会sleep。
--remove_dead_master_conf
参考masterha_manager
--wait_until_gtid_in_sync(0|1)
此参数从0.56版本开始可用,如果设置成1,当基于GITD的failover时,MHA 会等待所有的从库追上新主库的GITD
--skip_change_master
此参数从0.56版本开始可用,如果开启此选项,MHA 跳过 CHANGE MASTER 的操作
--skip_disable_read_only
此参数从0.56版本开始可用,如果开启此选项,MHA 将会在新的master 跳过 SET GLOBAL read_only = 0;
--ignore_binlog_server_error
此参数从0.56版本开始可用,如果开启此选项,当执行failover的时,MHA忽略binlog server上任何错误
非交互式Failover
如果在masterha_master_switch中设置"--interactive=0", 它自动执行故障转移(非交互式)。这实际上是和masterha_manager的内部运行机制一样,这种非交互式故障转移是有用的,如果你已经证实了master死了,但你想尽快做故障转移。非交互式故障转移也是有用的,如果你使用其他现有的主监控软件和要调用的非交互式故障转移命令软件。典型的例子是masterha_master_switch调用从集群软件像起搏器。
[在线] 切换主库的开关 (Scheduled (Online) Master Switch)
有时你可能想做预定的主切换,即使当前的master正在运行。典型的例子是取代部分损坏的硬件或升级主服务器。你不能取代一个RAID控制器或增加内存没有停止服务器。在这种情况下,您需要分配一个预定的维护时间,你必须迁移到不同的服务器的master。
masterha_master_switch命令可以用来运行计划总开关。
$ masterha_master_switch --master_state=alive --conf=/etc/app1.cnf --new_master_host=host2
--master_state=alive必须设置。调度主开关的程序流与从主故障转移有稍微的不同。例如,你不需要关闭主服务器,但你需要确保写查询不在主上执行。通过设置主ip网上变更脚本,您可以控制阻塞当前master不允许写(即drop可写的用户,设置read_only = 1,等等)在执行FLUSH TABLES WITH READ LOCK,和如何让写在新master。
Online master switch开始只有当所有下列条件得到满足。
1. IO threads on all slaves are running // 在所有slave上IO线程运行。
2. SQL threads on all slaves are running //SQL线程在所有的slave上正常运行。
3. Seconds_Behind_Master on all slaves are less or equal than --running_updates_limit seconds // 在所有的slaves上 Seconds_Behind_Master 要小于等于 running_updates_limit seconds
4. On master, none of update queries take more than --running_updates_limit seconds in the show processlist output // 在主上,没有更新查询操作多于running_updates_limit seconds 在show processlist输出结果上。
这些限制的原因是出于安全原因,并尽快切换到新主库。masterha_master_switch需要以下参数切换时主在线。
--new_master_host=(hostname)
新主机地址,可选参数,这个参数在你明确新的主库的主机,非常有用。(这就意味着你不需要让MHA来决定新的主库)。如果不设置此参数,MHA 将会利用自动failover的规则来选择新的主库。如果设置--new_master_host,MHA选择此主机为新的主库,如果不能成为主库,MHA将会退出
--orig_master_is_new_slave
当完成主库切换后,原先的主库将作为现在主库的slave运行。默认:不开启(原先的主库不会加入到新的复制环境中)。如果开启此选项,需要在配置文件中设置repl_password参数,由于当期的Master并不知道新的Master的replication的密码
--remove_orig_master_conf
如果设置此参数,当成功failover后,MHA manager将会自动删除配置文件中关于dead master的配置选项。
--skip_lock_all_tables
当在做主库切换的时候,MHA会在原先的主库上执行FLUSH TABLES WITH READ LOCK 操作,确保没有跟新操作,但是FLUSH TABLES WITH READ LOCK 操作是非常耗费资源的,并且你可以在原先的主库确定没有跟新操作(通过master_ip_online_change_script 中kill all clients操作等)。可以利用此选项避免锁表。