dba+開源工具:MHA復刻版,輕鬆實現MySQL高可用故障轉移(附下載)

来源:https://www.cnblogs.com/88223100/archive/2022/05/03/MHA-Re-Edition.html
-Advertisement-
Play Games

由於MHA(mha4mysql-manager)工具在2018年已經停止維護更新,且不支持GTID複製模式,在原版基礎上增補功能難度較大,因此考慮將其重構。 ...


工具研發者介紹

賀春暘,凡普金科和愛錢進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自動故障轉移

 

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平滑線上切換

 

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微軟商店下載的python不能修改config的解決方法 找到圖中文件的位置 C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\pip.ini 右鍵屬性 ...
  • 痞子衡嵌入式半月刊: 第 54 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 開源系統鏡像站點 國內Mirrors站點 企業類站點 阿裡巴巴開源Mirrors站點:https://developer.aliyun.com/mirror/ 騰訊開源Mirrors站點:https://mirrors.cloud.tencent.com/ 華為開源Mirrors站點:https:/ ...
  • 指令 描述 echo 說明:回顯命令信息,也就是顯示該命令 使用方法: 1.echo [on(打開回顯) | off(關閉回顯)] 常用的是echo off 2.echo [信息內容] 相當於編程語言中的print 3.echo 文件內容>>文件名 給創建一個文件並添加內容 @ 說明:字元放在命令前 ...
  • 本文講講 Ubuntu 18 及以上版本配置 IP 的方法,為什麼它值得一講,因為以 Ubuntu 16 為首的版本的配置方法已經不適用了,如果你還不知道,那本文正好 get 一個新技能。 Ubuntu 18 之後版本配置方法 需要使用 netplan 工具。 對應配置文件: /etc/netpla ...
  • 原文鏈接:https://www.caituotuo.top/c56bd0c5.html 0. 前言 假設一次執行20條SQL,我們如何判斷哪條SQL是執行慢的爛SQL,這裡就需要用到慢查詢日誌。 在SQL中,廣義的查詢就是crud操作,而狹義的查詢僅僅是select查詢操作,慢查詢指的是廣義的查詢 ...
  • 概述 日誌文件記錄 MySQL 資料庫運行期間發生的變化,當資料庫遭到意外的損害時,可以通過日誌文件查詢出錯原因,併進件數據恢復 MySQL 日誌文件可以分成以下幾類: 二進位日誌:記錄所有更改數據的語句,可以用於主從複製 錯誤日誌:記錄 MySQL 服務出現的問題 查詢日誌:記錄建立的客戶端連接和 ...
  • mybatis操作資料庫的過程中,如果只考慮單表操作,mapper和dao層基本80%的都是固定的,故而可以使用工具進行生成,文末提供自己編寫的工具(基於mysql存儲過程):作者其實就是使用(mybatis-generator)這個工具過程中,有些想法,實踐下,編寫時很多實現留了口子,後續方便集成 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...