MySQL數據庫高可用(MHA)詳細方案與部署教程

一:MHA簡介

核心功能

二:MHA工作原理

三:MHA組件

四:MHA 架構與工具

MHA架構

Manager關鍵工具

Node工具

五:工作原理與流程

1: 故障檢測

2:? 故障切換(Failover)

3 : 切換模式

六:與其他高可用方案對比

七:實際應用場景

八: 總結


?

一:MHA簡介

MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,在MySQL故障切換過程中,MHA能做到在0~30秒之內自動完成數據庫的故障切換操作,并且在進行故障切換的過程中,MHA能在較大程度上保證主從數據庫數據的一致性,以達到真正意義上的高可用。 ?

核心功能

  • 自動故障檢測與切換:主庫故障時,自動選舉最優從庫(Slave)晉升為新主庫。

  • 數據一致性保障:通過應用未同步的二進制日志(Binlog)補全數據差異。

  • 手動切換支持:支持人工觸發主從切換(如維護場景)。

  • 多節點管理:支持管理多個主從復制集群。

二:MHA工作原理

  1. 當master出現故障時,通過對比slave之間I/O線程讀取master上binlog的位置,選取最接近的slave做為最新的slave(latest slave)。

  2. 其它的slave通過與latest slave對比生成差異中繼日志,并應用。

  3. 在latest slave上應用從master保存的binlog,同時將latest slave提升為master。

  4. 最后在其它slave上應用相應的差異中繼日志并開始從新的master開始復制.

三:MHA組件

  • MHA Manager(管理節點)

    MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集群,也可以部署在一臺slave節點上。比如masterha_manager工具實現自動監控MySQL Master和實現master故障切換,其它工具手動實現master故障切換、在線mater轉移、連接檢查等等。一個Manager可以管理多 個master-slave集群

  • MHA Node(數據節點)

    MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將數據的slave提升為新的master,然后將所有其他的slave重新指向新的master。

四:MHA 架構與工具

MHA架構

  • Manager節點:核心控制節點,負責監控主庫狀態、協調故障切換。

  • Master節點:當前主庫,負責處理寫請求。

  • Slave節點:從庫,復制主庫數據,故障切換時可能晉升為新主庫。

  • VIP(虛擬IP):可選組件,用于對外提供透明的訪問入口。

Manager關鍵工具

工具說明
masterha_check_ssh檢查節點間SSH免密登錄配置
masterha_check_repl驗證主從復制配置是否正確
masterha_manager啟動MHA,主監控進程,持續檢查主庫健康狀態
masterha_check_status檢測當前MHA運行狀態
masterha_master_monitor監測master是否宕機
masterha_master_switch控制故障轉移(自動或手動)
masterha_conf_host添加或刪除配置的server信息

Node工具

工具說明
save_binary_logs保存和復制master的二進制日志
apply_diff_relay_logs識別差異的中繼日志事件并應用于其它slave
filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用這個工具)
purge_relay_logs清除中繼日志(不會阻塞SQL線程)

五:工作原理與流程

1: 故障檢測

  • Manager節點 定期通過 ping 或執行SQL命令(如 SELECT 1)檢測主庫存活狀態。

  • 若主庫連續無響應,觸發 故障判定

2:? 故障切換(Failover)

  1. 選舉新主庫

    • 選擇數據最接近原主庫的從庫(通過對比 SHOW SLAVE STATUS 中的 Exec_Master_Log_Pos)。

    • 優先選擇已開啟 log_slave_updates 的從庫(確保其Binlog完整)。

  2. 數據補全

    • 從原主庫服務器(若可訪問)或存活的從庫獲取未同步的Binlog。

    • 將缺失的Binlog事件應用到新主庫,確保數據一致性。

  3. 切換拓撲

    • 將其他從庫指向新主庫,重建復制關系。

    • 更新應用連接的VIP或配置,指向新主庫。

3 : 切換模式

  • 自動切換(Automatic Failover):主庫不可用時自動觸發。

  • 手動切換(Manual Switchover):人工干預,常用于維護場景。

六:與其他高可用方案對比

方案MHAGalera ClusterInnoDB Cluster
架構主從復制+自動切換多主同步復制基于Group Replication
數據一致性最終一致性強一致性強一致性
復雜度
適用場景讀寫分離,主庫故障切換多活寫入,低延遲云原生集成,自動化管理

七:實際應用場景

  1. 電商大促:主庫突發故障時,快速切換保障訂單交易。

  2. 金融系統:通過Binlog補全確保賬戶余額一致性。

  3. 物聯網日志存儲:讀寫分離架構下主庫宕機不影響數據寫入。

八: 總結

MHA 是MySQL主從架構下簡單高效的高可用解決方案,尤其適合對數據一致性要求較高且運維資源有限的場景。盡管其功能不如Galera或InnoDB Cluster全面,但在傳統主從復制架構中仍具有不可替代的價值。實際使用中需結合監控工具(如Prometheus)和告警系統,形成完整的高可用保障體系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79757.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為設備鏈路聚合實驗:網絡工程實戰指南

鏈路聚合就像為網絡搭建 “并行高速路”,既能擴容帶寬,又能保障鏈路冗余,超實用! 一、實驗拓撲速覽 圖中兩臺交換機 LSW1 和 LSW2,PC1、PC2 歸屬 VLAN 10,PC3 歸屬 VLAN 30。LSW1 與 LSW2 通過 GE0/0/1、…

數組和集合

數組和集合的區別: 1、數組是固定長度的數據結構,一旦創建長度就無法改變,集合是動態長度數據結構,可根據需求動態增加或減少元素。 2、數組包含基本數據類型和對象,而集合只能包含對象。 3、數組可以直接訪問元素&…

WPF MVVM進階系列教程(一、對話框)

🍠 WPF MVVM進階系列教程 一、對話框 在前面的文章中,我們介紹了MVVM開發的一些基礎知識。 對于日常開發來說,基本已經足夠應付大部分場景。 從這里開始,介紹的都是在MVVM模式開發中,提升程序可維護性、靈活性、健壯…

【AI News | 20250507】每日AI進展

AI Repos 1、CFWorkerACME SSL證書助手是一個免費開源的平臺,基于Cloudflare Worker運行,旨在自動化SSL證書的申請和下發,尤其適用于多服務器或內網環境。它通過自動化的CNAME和DNS操作完成域名驗證,支持Let’s Encrypt、ZeroSSL…

5 分鐘用滿血 DeepSeek R1 搭建個人 AI 知識庫(含本地部署)

最近很多朋友都在問:怎么本地部署 DeepSeek 搭建個人知識庫。 老實說,如果你不是為了研究技術,或者確實需要保護涉密數據,我真不建議去折騰本地部署。 為什么呢? 目前 Ollama 從 1.5B 到 70B 都只是把 R1 的推理能力提煉到 Qwen 和 Llama 的蒸餾版本上。 雖說性能是提升…

極狐GitLab 分支管理功能介紹

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 分支 (BASIC ALL) 分支是項目工作樹的一個版本。分支是項目開發的基礎。當你創建一個新的項目時,極狐GitLab 會為…

基于ASP.NET+MySQL實現待辦任務清單系統

基于ASP.NET的ToDoList的設計與實現 一、前言 1.1 實驗目的 使學生綜合使用所學過的ASP.NET網絡編程知識,掌握網絡環境程序設計的基本概念;結合實際的操作和設計,鞏固課堂學習內容,掌握網絡環境編程的特點、原理和技術&#xf…

普通 html 項目引入 tailwindcss

項目根目錄安裝依賴 npm install -D tailwindcss3 postcss autoprefixer 初始化生成tailwind.config.js npx tailwindcss init 修改tailwind.config.js /** type {import(tailwindcss).Config} */ module.exports {content: ["./index.html"], //根據自己的項目…

汽車免拆診斷案例 | 2015款奔馳C200L車發動機起動延遲

故障現象  一輛2015款奔馳C200L車,搭載274發動機,累計行駛里程約為15.6萬km。該車發動機起動延遲,且發動機故障燈異常點亮。 故障診斷  用故障檢測儀檢測,發動機控制單元中存儲有故障代碼“P001685 進氣凸輪軸(氣缸…

[藍橋杯 2025 省 B] 水質檢測(暴力 )

暴力暴力 菜鳥第一次寫題解,多多包涵!!! 這個題目的數據量很小,所以沒必要去使用bfs,直接分情況討論即可 一共兩排數據,我們使用貪心的思想,只需要實現從左往右的過程中每個檢測器相互連接即…

網絡接口返回類ResponseEntity

網絡接口返回類ResponseEntity 簡介方法獲取工廠方法ResponseEntity.ok()返回BodyBuilder返回文字信息返回類對象(Spring自動轉換為json格式)返回空內容? ResponseEntity.notFound()返回HeadersBuilder返回文字信息 status(HttpStatus)返回BodyBuildern…

Redis:現代服務端開發的緩存基石與電商實踐-優雅草卓伊凡

Redis:現代服務端開發的緩存基石與電商實踐-優雅草卓伊凡 一、Redis的本質與核心價值 1.1 Redis的技術定位 Redis(Remote Dictionary Server)是一個開源的內存數據結構存儲系統,由Salvatore Sanfilippo于2009年創建。它不同于傳…

macOS上管理多個Node.js版本

管理工具 fnm 和 nvm nvm:作為最廣泛使用的 Node.js 版本管理器,使用 Bash 編寫,適用于類 UNIX 環境(如 macOS 和 Linux),也可以通過兼容的 shell(如 WSL)在 Windows 上使用。fnm:(Fast Node Manager)一種較新的、快速…

uDistil-Whisper:低數據場景下基于無標簽數據過濾的知識蒸餾方法

uDistil-Whisper: Label-Free Data Filtering for Knowledge Distillation in Low-Data Regimes 會議:2025年NAACL 機構:卡內基梅降大學 Abstract 近期研究通過偽標簽(pseudo-labels)將Whisper的知識蒸餾到小模型中&#xff0…

【MySQL】-- 數據庫約束

文章目錄 1. 什么是數據庫約束2. 約束類型3. NOT NULL 非空約束4. DEFALUT 默認值約束5. UNIQUE 唯一約束6. PRIMARY KEY 主鍵約束6.1 自增主鍵6.1 一個自增主鍵包含多個列 7. FOREIGN KEY 外鍵約束8. CHECK 約束 1. 什么是數據庫約束 數據庫約束是指對數據庫表中的數據所施加…

鴻蒙NEXT開發動畫案例2

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件,代碼如下: // 接口定義(必須放在使用前) /*** 關鍵幀動畫整體配置參數*/ interface KeyframeAnimationConfig {iterations: number;delay: number; }/*** 單個關鍵幀動畫項*/…

團隊協作的潤滑劑——GitHub與協作流程

各位代碼界的社交恐懼癥患者們,今天我們要聊的是如何假裝自己很會團隊協作——使用GitHub!這就像程序員版的"相親平臺",只不過在這里,你展示的不是自拍和收入,而是代碼和commit記錄(后者往往更令…

「Mac暢玩AIGC與多模態13」開發篇09 - 基于多插件協同開發智能體應用(天氣+名言查詢助手)

一、概述 本篇介紹如何在 macOS 環境下,同時接入多個自定義 OpenAPI 插件,實現智能體根據用戶請求自動分析,調用天氣查詢或名言查詢服務,完成多功能協同應用開發。 二、環境準備 1. 確認本地開發環境 macOS 系統Dify 平臺已部…

react-12父子組件間的數據傳遞(子傳父)(父傳子)- props實現

1.子組件調用父組件的函數并傳遞數據(子傳父) 1.1父組件 import React, { Component } from react; import ChildComponent from ./ChildComponent;class ParentComponent extends Component {constructor(props) {super(props);this.state {items: […

Spring Boot 單元測試使用教程(僅供參考)

單元測試是軟件開發中至關重要的一環&#xff0c;Spring Boot 提供了強大的測試支持。以下是 Spring Boot 單元測試的詳細教程。 1. 準備工作 1.1 添加測試依賴 在 pom.xml 中添加測試相關依賴&#xff1a; <dependency><groupId>org.springframework.boot</…