master存活的狀態下切換
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=192.168.0.101 --orig_master_is_new_slave --running_updates_limit=1000
不出意外的狀況下,會報下面的錯誤:
查看源代碼:app
在新master上獲取正在執行的進程,也就是show processlist操做。而且將獲取到的processlist信息進行分析判斷,若是新master當前還存在binlog dump或binlog dump gtid進程等,則沒法切換。
源碼 DBHelper.pm片斷線程
報錯的緣由是切換成功後,原master變成了slave,而新slave上的binlog dump gtid線程並無沒停掉,理論上切換成功後,因爲角色的轉換,原master變成slave,binlog dump gtid進程應該中止運行的,爲何沒有被中止掉呢?
查看新master上的報錯日誌。
鏈接丟失,原來是鏈接丟失致使slave沒接收到信號,因此進程沒有被停掉。3d
該問題能夠經過配置主從同步心跳檢測時間來提早觸發主從檢測,從而達到slave上的binlog dump gtid進程提早中止。系統默認主從檢測時間是3600S。
配置以下,在可能會成爲master的slave上執行
stop slave;
change master to master_heartbeat_period = 10;
set global slave_net_timeout = 25;
start slave;
在當前主上執行
change master to master_heartbeat_period = 10;
set global slave_net_timeout = 25;
能夠直接配置在配置文件中
slave_net_timeout = 25
再次手動切主的時候就發現binlog dump gtid進程很快就被清理了,也不會報錯了。