工具研發者介紹
賀春旸,凡普金科和愛錢進DBA團隊負責人,《MySQL管理之道:性能調優、高可用與監控》第一、二版作者,曾任職于中國移動飛信、安卓機鋒網,四次榮獲dbaplus年度MVP,致力于MariaDB、MongoDB等開源技術的研究,主要負責資料庫性能調優、監控和架構設計,
具下載:
https://github.com/hcymysql/MHA-Re-Edition MHA Re-Edition復刻版簡介由于MHA(mha4mysql-manager)工具在2018年已經停止維護更新,且不支持GTID復制模式,在原版基礎上增補功能難度較大,因此考慮將其重構,
參考了原版MHA的故障切換思路,改進的地方如下:
1、無需打通ssh公私鑰互信認證,只需在app1.cnf組態檔里提供用戶名和密碼(root權限)即可,這一步的作用是漂移VIP,工具會直接進入遠程主機上執行ip addr add VIP,
2、目前主流版本MySQL 5.7和8.0的復制模式是基于Gtid,因事務號是唯一的,更改同步復制源不需要知道binlog檔案名和position位置點,固簡化了在客戶端部署agent做資料補齊,
3、無需安裝,就兩個檔案,一個是(環境配置檢查)可執行檔案masterha_check_repl_mysql,一個是(故障自動轉移autofailover和在線平滑切換online switch)可執行檔案masterha_manager_mysql,
4、 基于主從復制(GTID復制模式)才可以運行,masterha_check_repl_mysql工具會檢測,如果是基于binlog和position(位置點復制模式)不能運行,可開啟半同步復制確保切換以后資料完整性(至少有一個從庫確認已接收到所有事件),
5、masterha_manager_mysql守護行程主控檔案,集成了(masterha_master_switch + master_ip_failover + masterha_secondary_check + shutdown_script + weixin_alarm)捆綁在一起,
6、AutoFailover自動故障切換(轉移)VIP后,會發送微信公眾號報警通知,
7、支持遠控卡重啟服務器(避免腦裂問題),例如洗掉VIP失敗,主機已經hang住,只能通過遠程管理卡去重啟機器,在這里可以呼叫遠控卡命令,比如DELL服務器的ipmitool命令(可參考:https://www.cnblogs.com/EricDing/p/8995263.html),
組態檔引數決議
請按照app1.cnf范例模板嚴絲合縫地進行設定,
1、log日志輸出檔案,
manager_workdir = /root/mha_log/app1.log
2、監控間隔時間,單位秒,
connect_interval = 1
3、開啟呼叫其他從庫去連接主庫,如果不需要,則洗掉masterha_secondary_check這行內容,腳本會呼叫從庫的mysql命令,默認讀取路徑是/usr/bin/mysql(已經寫死在腳本里),如沒有請創建一個軟連接,
masterha_secondary_check = slave1,slave2
4、當從庫出現延遲時,超過60秒內未同步完資料,強制開啟VIP故障切換轉移,
running_updates_limit = 60
5、設定遠程管理卡,當VIP無法卸載時,通過呼叫命令重啟服務器,
# ipmitool -I lanplus -H 遠控卡主庫IP -U 遠程console用戶 -P 遠程console密碼 power reset
# 如果不需要,則洗掉shutdown_script這行內容
shutdown_script = ipmitool -I lanplus -H 172.31.198.239 -U root -P calvin power reset
6、設定主庫故障切換后觸發微信報警(wechar.py和masterha_manager_mysql檔案放在同一目錄下),
weixin_alarm = /usr/bin/python wechat.py yourweixin
注:微信企業號設定請移步看此教程配置:https://github.com/X-Mars/Zabbix-Alert-WeChat/blob/master/README.md
微信報警需要安裝第三方模塊,
shell> pip install simplejson
-i "http://mirrors.aliyun.com/pypi/simple"
--trusted-host "mirrors.aliyun.com"
MHA Re-Edition部署使用
1、環境配置檢查(先執行通過后,再執行主程式masterha_manager_mysql),
shell> chmod 755 masterha_check_repl_mysql
shell> ./masterha_check_repl_mysql --conf=app1.cnf
2、開啟守護行程,主庫故障后,VIP自動故障轉移,其他從庫自動change master to 指向新主庫,
shell> chmod 755 masterha_manager_mysql
shell> ./masterha_manager_mysql --conf=app1.cnf start
注:app1.cnf為組態檔,你可以配置多個監控組態檔,監控多套MySQL集群環境,
3、Online master switch在線平滑切換,
shell> ./masterha_manager_mysql --conf=app1.cnf switch
Auto Failover自動故障轉移
<iframe src="https://www.cnblogs.com//tv.sohu.com/s/sohuplayer/iplay.html?bid=329855447&vars=%5B%5B%22showRecommend%22%2C0%5D%5D&disablePlaylist=true&mute=1&autoplay=false" frameborder="0" scrolling="no" height="300"></iframe>
1、MHA Re-Edition管理機每隔app1.cnf組態檔引數connect_interval=1(秒),去連接主庫,當試圖連接3次失敗后,嘗試去其它從庫上連接并執行select 1探測,這里需要你在app1.cnf組態檔里設定masterha_secondary_check = slave1,slave2,
設定完后,slave1和slave2去連接,如果有一臺從庫可以連接到主庫,不認定主庫down掉,不進行故障轉移操作,會在log日志中輸出warning警告資訊,提示網路有問題,請排查,
如果MHA Re-Edition管理機和其它slave從庫都無法訪問連接,則認定主庫掛掉,開始進行故障切換,
2、如果你在app1.cnf組態檔里設定candidate_master = 1,指定了候選主庫,則默認提升該新主庫,
如果你沒有在app1.cnf組態檔里設定candidate_master = 1,則根據從庫執行的Gtid事件最新的將其提升為主庫,
3、當從庫出現延遲時,在app1.cnf組態檔里,超過引數running_updates_limit = 60 單位(秒)內,且未同步完資料,則強制開啟VIP故障切換轉移,并在log日志中輸出warning警告資訊,否則會一直等待60秒內執行完從庫的Gtid事件,
4、其它從庫會change master to改變同步源為候選主庫,并在log日志中輸出show master status新主庫的狀態資訊,
5、關閉候選主庫的set global super_read_only = 0只讀權限,
6、候選主庫不執行reset slave all清空同步資訊,這一步操作交給用戶處理,
7、漂移VIP至新的主庫,至此故障轉移流程跑完,
Online Switch平滑在線切換
<iframe src="https://www.cnblogs.com//tv.sohu.com/s/sohuplayer/iplay.html?bid=329855373&vars=%5B%5B%22showRecommend%22%2C0%5D%5D&disablePlaylist=true&mute=1&autoplay=false" frameborder="0" scrolling="no" height="300"></iframe>
1、首先檢測當前存活主機master(172.19.136.32:3306)、slave1(172.19.136.33:3307)和slave2(172.19.136.34:3308),
2、輸入YES后,在原master上執行FLUSH NO_WRITE_TO_BINLOG TABLES操作,將會強制把打開的表關閉,這一步會耗費很長時間,尤其是業務繁忙的時候,請務必在凌晨執行,
3、之后會詢問是否要把master(172.19.136.32:3306) 切換到(172.19.136.33:3307)?輸入yes,
如果在app1.cnf組態檔里設定candidate_master = 1,指定了候選主庫,則默認提升該新主庫,
如果沒有在app1.cnf組態檔里設定candidate_master = 1,則根據從庫執行的Gtid事件最新的將其提升為主庫,
4、將原master上的虛擬VIP摘除,
5、設定原master為只讀模式set global read_only=1,
6、原master上KILL掉所有應用連接的執行緒,
7、原master上執行FLUSH TABLES WITH READ LOCK全域讀鎖,
8、在候選master上執行 select SELECT WAIT_FOR_EXECUTED_GTID_SET(master_gtid_executed, timeout),等待執行完Gtid事件,當候選主庫出現延遲時,在app1.cnf組態檔里,超過引數running_updates_limit = 60 單位(秒)內,且未同步完資料,則強制開啟VIP切換轉移,并在log日志中輸出warning警告資訊,否則會一直等待60秒內執行完從庫的Gtid事件,
9、新提升的master為讀寫模式set global read_only=0,
10、在slave2上,執行CHANGE MASTER TO new_master,
11、在原master上解除鎖表UNLOCK TABLES,
12、在原master上,執行CHANGE MASTER TO new_master,
13、新提升的master上,執行stop slave; 不執行reset slave all清空同步資訊,這一步操作交給用戶處理,
14、將VIP切換到新提升的master上,
15、整個切換流程結束,
下載方式
此工具現通過dbaplus社群免費為大家提供下載使用,若使用程序中有任何問題或建議,可隨時與我們聯系,歡迎大家試用,
打開以下鏈接即可下載:
https://github.com/hcymysql/MHA-Re-Edition
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/MHA-Re-Edition.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/469633.html
標籤:其他
上一篇:資料庫性能優化8大通用方案