MHA自動切換流程


MHA的全名叫做mysql-master-ha,配置后可以在10-30秒內完成master自動切換,切換過程如下:

1. 檢測master的狀態,方法是一秒一次“ SELECT 1 As Value”,發現沒有響應后會重復3次檢查,如果還沒有響應,shutdown並再重復一次SELECT 1 As Value確認master關閉

 

2. 確認SSH到master所在的機器是否可達

 

3. 給出消息:Connecting to a master server failed,並開始讀取配置文件masterha_default.conf和app1.conf

 

4. 確認復制切換模式: [info] GTID failover mode = 1

 

5. 報告整個架構中的機器存活情況

Fri Jul  1 13:35:33 2016 - [info] Dead Servers:
Fri Jul  1 13:35:33 2016 - [info]   192.168.118.63(192.168.118.63:3306)
Fri Jul  1 13:35:33 2016 - [info] Alive Servers:
Fri Jul  1 13:35:33 2016 - [info]   192.168.118.62(192.168.118.62:3306)
Fri Jul  1 13:35:33 2016 - [info]   192.168.118.64(192.168.118.64:3306)
View Code

 

6. 檢查存活的實例版本、GTID開啟情況、是否開啟read_only以及復制過濾情況

Fri Jul  1 13:35:33 2016 - [info] Alive Slaves:
Fri Jul  1 13:35:33 2016 - [info]   192.168.118.62(192.168.118.62:3306)  Version=5.6.28-log (oldest major version between slaves) log-bin:enabled
Fri Jul  1 13:35:33 2016 - [info]     GTID ON
Fri Jul  1 13:35:33 2016 - [info]     Replicating from 192.168.118.63(192.168.118.63:3306)
Fri Jul  1 13:35:33 2016 - [info]     Primary candidate for the new Master (candidate_master is set)
Fri Jul  1 13:35:33 2016 - [info]   192.168.118.64(192.168.118.64:3306)  Version=5.6.28-log (oldest major version between slaves) log-bin:enabled
Fri Jul  1 13:35:33 2016 - [info]     GTID ON
Fri Jul  1 13:35:33 2016 - [info]     Replicating from 192.168.118.63(192.168.118.63:3306)
Fri Jul  1 13:35:33 2016 - [info]     Primary candidate for the new Master (candidate_master is set)
Fri Jul  1 13:35:33 2016 - [info] Checking slave configurations..
Fri Jul  1 13:35:33 2016 - [info]  read_only=1 is not set on slave 192.168.118.62(192.168.118.62:3306).
Fri Jul  1 13:35:33 2016 - [info]  read_only=1 is not set on slave 192.168.118.64(192.168.118.64:3306).
Fri Jul  1 13:35:33 2016 - [info] Checking replication filtering settings..
Fri Jul  1 13:35:33 2016 - [info]  Replication filtering check ok.
View Code

 

7. 接下來就是在GTID復制基礎上的切換過程

(1) 配置檢查階段,具體檢查如下

[info] ** Phase 1: Configuration Check Phase completed.

 檢查項目如下:

 7 Query SELECT @@global.server_id As Value  7 Query SELECT VERSION() AS Value #如果是GTID模式,版本不得小於5.6,如果是普通模式,版本不得小於5.0.45 7 Query SELECT @@global.gtid_mode As Value #MHA0.56版本開始支持GTID,之前的版本不支持 7  Query     SHOW GLOBAL VARIABLES LIKE 'log_bin' #binlog必須開啟
  7 Query SHOW MASTER STATUS 7 Query SELECT @@global.datadir AS Value 7 Query SELECT @@global.slave_parallel_workers AS Value #確定slave是不是多線程並行復制,這個參數的影響還沒整明白,再研究下 7 Query SHOW SLAVE STATUS  7 Query SELECT @@global.read_only As Value #確定read_only的設置,如果要轉為新的master,這個值要設為0 7 Query SELECT @@global.relay_log_purge As Value #確定relay_log是否可自動刪除,默認是可以 7 Query SELECT @@global.relay_log_info_repository AS Value #確定relay_log是以file還是table格式存放的,默認是file 7 Query SELECT @@global.datadir AS Value #確定數據存放位置 7  Query              SELECT @@global.relay_log_info_file AS Value                                                   #確定relay_log的文件名,為后面slave之間的relay_log應用做准備

 備注:(1)默認情況下,從服務器上的中繼日志在SQL線程執行完后會被自動刪除的。但是這些中繼日志在恢復其他從服務器時候可能會被用到,因此需要禁用中繼日志的自動清除和定期清除舊的中繼日志

            (2)binlog-do-db和replicate-ignore-db設置必須相同。MHA在啟動時候會檢測過濾規則,如果過濾規則不同,MHA不啟動監控和故障轉移

            (3)master.info和relay.info必須是file,不能是table

 

(2)徹底關閉master連接的階段,避免master未關閉導致的腦裂

[info] * Phase 2: Dead Master Shutdown Phase..

具體關閉命令是:

/etc/masterha/master_ip_failover --orig_master_host=192.168.118.3 --orig_master_ip=192.168.118.3 --orig_master_port=3306 --command=stopssh --ssh_user=root  

關閉完成后給出報告

[info] * Phase 2: Dead Master Shutdown Phase completed.

 

(3)master恢復階段:

[info] * Phase 3: Master Recovery Phase..

 

›1   確認relay log最新的slave實例

›2   確定新的master

      如果在配置文件中設置了候選master,會直接確定預設機器實例為master;如果沒有預設,會選擇含有最新的relay log的那個slave

›3   確認新的master后,會先設置sql_log_bin=0以阻塞master日志寫入使其他slave趕上復制

       會選取含有最新relay log 的slave,在該slave上設置sql_log_bin=0並在其余slaves上應用該最新relay log,最終獲得這個層次的數據一致性,之后再set sql_log_bin=1使恢復日志寫入。可以通過半同步復制來解決無法ssh到master所在機器所造成的事務丟失問題

      待全部數據一致后,通過show master status確定新master的日志位置並在其他slave上執行change master語句創建新的主從連接:

Fri Jul 1 13:35:33 2016 - [info] Getting new master's binlog name and position..
Fri Jul 1 13:35:33 2016 - [info] mysql-bin.000004:191
Fri Jul 1 13:35:33 2016 - [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.118.2', MASTER_PORT=3306, MAST
ER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='xxx';

     執行該切換的具體語句是

/etc/masterha/master_ip_failover --command=start --ssh_user=root --orig_master_host=192.168.118.3 --orig_master_ip=192.168.118.3 --orig_master_port=3306 --new_master_host=192.168.118.2 --new_master_ip=192.168.118.2 --new_master_port=3306 --new_master_user='user' --new_master_password='password'  

     該階段成果后給出報告:

Fri Jul  1 13:35:33 2016 - [info] ** Finished master recovery successfully. Fri Jul 1 13:35:33 2016 - [info] * Phase 3: Master Recovery Phase completed.

 

(4)slaves恢復階段:

[info] * Phase 4: Slaves Recovery Phase..

先停止IO線程,等待SQL線程執行完成后,stop slave,清除原slave信息,重新change master指向新的master,start slave ,over

34 Query SHOW SLAVE STATUS 34 Query STOP SLAVE IO_THREAD 34 Query SHOW SLAVE STATUS 34 Query SHOW SLAVE STATUS 34 Query STOP SLAVE 34 Query SHOW SLAVE STATUS 34 Query RESET SLAVE 34 Query     CHANGE MASTER TO MASTER_HOST = '192.168.118.62' MASTER_USER = 'repl' MASTER_PASSWORD = <secret> MASTER_PORT = 3306
                   34 Query START SLAVE 35 Connect Out       repl@192.168.118.62:3306
                   34 Query     SHOW SLAVE STATUS
View Code

 

(5)清除新選出的master上的slave信息

[info] * Phase 5: New master cleanup phase..

reset slave all;

 9 Query STOP SLAVE 9 Query SHOW SLAVE STATUS 9 Query     RESET SLAVE /*!50516 ALL */
                    9 Query     SHOW SLAVE STATUS
View Code

 

 至此,整個切換過程完成,最后給出切換報告,over

----- Failover Report ----- app1: MySQL Master failover 192.168.118.3(192.168.118.3:3306) to 192.168.118.2(192.168.118.2:3306) succeeded Master 192.168.118.3(192.168.118.3:3306) is down! Check MHA Manager logs at localhost.localdomain:/var/log/masterha/app1/app1.log for details. Started automated(non-interactive) failover. Invalidated master IP address on 192.168.118.3(192.168.118.3:3306) Selected 192.168.118.2(192.168.118.2:3306) as a new master. 192.168.118.2(192.168.118.2:3306): OK: Applying all logs succeeded. 192.168.118.2(192.168.118.2:3306): OK: Activated master IP address. 192.168.118.4(192.168.118.4:3306): OK: Slave started, replicating from 192.168.118.2(192.168.118.2:3306) 192.168.118.2(192.168.118.2:3306): Resetting slave info succeeded. Master failover to 192.168.118.2(192.168.118.2:3306) completed successfully.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM