Galera集群:高可用MySQL同步復制方案

目錄

Galera Cluster 概述

核心架構與組件

WSREP API

Group Communication System (GCP)

同步復制機制

復制流程詳解

沖突檢測算法

關鍵特性

多主架構實現

強一致性保障

自動成員管理

性能優化策略

并行復制實現

流控機制詳解

批處理與壓縮

部署與監控

詳細配置指南

監控指標體系

維護命令示例

常見問題與解決方案

腦裂處理方案

SST故障處理

性能調優建議

總結與建議


Galera Cluster 概述

Galera Cluster 是一個基于同步復制的多主數據庫集群解決方案,主要支持 MySQL/MariaDB。它采用先進的認證復制(Certification-Based Replication)機制,確保所有節點數據保持強一致性。其核心特點是:

  • 真正的多主架構:所有節點均可讀寫,無需主從切換
  • 同步復制:數據變更實時同步到所有節點
  • 自動故障轉移:節點故障時自動處理,確保高可用性
  • 透明集成:對應用表現為單一數據庫實例

典型應用場景包括:

  • 金融交易系統:需要強一致性的關鍵業務
  • 電商平臺:高并發讀寫需求
  • 實時分析系統:需要最新數據的分析應用

核心架構與組件

WSREP API

WSREP(Write Set Replication)API 是 Galera 的核心接口層,提供以下功能:

  1. 事務寫集管理

    • 捕獲事務中的行變更(DML操作)
    • 生成包含主鍵信息的寫集(Write Set)
    • 示例:UPDATE customers SET balance=100 WHERE id=5 將生成包含id=5記錄的變更集
  2. 沖突檢測機制

    • 基于主鍵的認證測試(Certification Test)
    • 使用全局事務ID(GTID)進行版本控制
    • 沖突解決策略:先提交者獲勝(First-Commit-Wins)
  3. 節點狀態管理

    • 維護節點狀態機(Joining, Donor, Synced等)
    • 處理節點加入/離開事件
    • 協調數據同步過程

Group Communication System (GCP)

GCP 負責集群的底層通信,主要功能包括:

  1. 成員管理

    • 心跳檢測(默認每1秒)
    • 故障檢測(可配置超時時間)
    • 視圖變更通知
  2. 消息傳遞

    • 使用gcomm協議或外部工具(如Corosync)
    • 支持TCP/UDP多播
    • 消息排序保證(Total Order Broadcast)
  3. 典型配置參數

    wsrep_provider_options = "gmcast.listen_addr=tcp://0.0.0.0:4567;gmcast.peer_timeout=PT3S"
    

同步復制機制

復制流程詳解

  1. 本地事務階段

    • 事務在發起節點執行
    • 生成二進制日志(binlog)
    • 創建寫集(包含所有受影響的行數據)
  2. 全局認證階段

    • 寫集廣播到所有節點
    • 各節點并行執行認證測試:
      • 檢查主鍵沖突
      • 驗證事務依賴關系
    • 通過測試的事務獲得全局提交順序
  3. 異步應用階段

    • 寫集進入回放隊列
    • 回放線程(applier)按序應用變更
    • 應用完成后釋放客戶端連接

沖突檢測算法

認證測試的數學表示:

Certify(Tx) = ? T ∈ committed_transactions:if WS(Tx) ∩ WS(T) ≠ ? ∧ T.seqno < Tx.seqnothen ABORT(Tx)else COMMIT(Tx)

實際執行過程示例:

  1. 節點A提交事務T1修改行R1
  2. 節點B同時提交事務T2也修改行R1
  3. 集群檢測到沖突,保留先到達認證階段的事務

關鍵特性

多主架構實現

  1. 寫入流程

    • 任何節點都能接受寫請求
    • 自動路由到最優節點(可配置負載均衡)
    • 典型配置:wsrep_slave_threads=16
  2. 沖突處理

    • 使用序列號(seqno)全局排序
    • 支持人工沖突解決(通過自定義沖突解決函數)
  3. 優勢場景

    • 地理分布式部署
    • 讀寫分離困難的應用
    • 需要快速故障恢復的系統

強一致性保障

  1. 一致性級別

    • 同步(SYNC):等待所有節點確認
    • 異步(ASYNC):本地提交即返回
    • 半同步(SEMI-SYNC):多數節點確認
  2. 配置示例

    wsrep_sync_wait = 1  # 確保讀操作能看到最新寫入
    

  3. 實現原理

    • 使用全局事務ID(GTID)
    • 每個事務關聯唯一標識符
    • 讀操作等待相關GTID在所有節點應用

自動成員管理

  1. 節點加入流程

    • 新節點發起加入請求
    • 集群選擇Donor節點
    • 執行SST(State Snapshot Transfer)或IST(Incremental State Transfer)
  2. 狀態轉移方法

    方法描述適用場景
    rsync文件級全量同步新節點加入
    mariabackup熱備份同步生產環境首選
    xtrabackup物理備份同步MySQL環境
  3. 故障檢測配置

    wsrep_provider_options = "evs.keepalive_period=PT1S;evs.suspect_timeout=PT5S"
    

性能優化策略

并行復制實現

  1. 線程模型

    • 主線程:接收和排序寫集
    • 工作線程:并行應用寫集
    • 配置建議:wsrep_slave_threads = CPU核心數×2
  2. 依賴處理

    • 相同主鍵的寫集順序執行
    • 不同主鍵的寫集可以并行
    • 監控指標:wsrep_cert_deps_distance
  3. 性能對比

    單線程:1000 TPS
    8線程:6500 TPS
    16線程:12000 TPS
    

流控機制詳解

  1. 觸發條件

    • 接收隊列長度 > wsrep_flow_control_threshold
    • 應用延遲 > wsrep_flow_control_interval
  2. 工作流程

    • 落后節點發送PAUSE請求
    • 其他節點暫停發送新事務
    • 隊列降至閾值后恢復
  3. 配置建議

    wsrep_flow_control_threshold = 65536
    wsrep_flow_control_interval = 100
    

批處理與壓縮

  1. 傳輸優化

    • 寫集聚合:wsrep_trx_fragment_size=1MB
    • 壓縮算法:支持LZ4、Zstd等
    • 網絡節省:典型壓縮率30-70%
  2. 配置示例

    wsrep_trx_fragment_unit = 'bytes'
    wsrep_trx_fragment_size = 1024000
    wsrep_slave_threads = 16
    

  3. 性能影響

    • 增加少量CPU開銷
    • 顯著降低網絡延遲
    • 特別適合廣域網部署

部署與監控

詳細配置指南

  1. 基本參數

    [mysqld]
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

  2. 集群配置

    wsrep_provider=/usr/lib/galera/libgalera_smm.so
    wsrep_cluster_name="production_cluster"
    wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"
    wsrep_node_name="node1"
    wsrep_node_address="192.168.1.101"
    

  3. 同步方法選擇

    wsrep_sst_method=mariabackup
    wsrep_sst_auth="sst_user:s3cret"
    

監控指標體系

  1. 集群狀態

    • wsrep_cluster_size:節點數量
    • wsrep_cluster_status:集群健康狀況
    • wsrep_ready:服務可用性
  2. 性能指標

    指標健康值說明
    wsrep_flow_control_paused<0.1流控時間占比
    wsrep_local_recv_queue<100接收隊列長度
    wsrep_local_send_queue<10發送隊列長度
  3. 復制延遲

    • wsrep_local_bf_aborts:沖突中止次數
    • wsrep_cert_deps_distance:事務依賴距離
    • wsrep_apply_oooe:無序應用比例

維護命令示例

  1. 狀態檢查

    SHOW STATUS LIKE 'wsrep%';
    

  2. 安全重啟

    systemctl stop mysql
    galera_recovery
    systemctl start mysql
    

  3. 節點移除

    SET GLOBAL wsrep_provider_options='pc.ignore_sb=true';
    

常見問題與解決方案

腦裂處理方案

  1. 預防措施

    • 使用奇數節點(3個或更多)
    • 配置網絡冗余
    • 設置合理超時:
      evs.inactive_timeout=PT15S
      evs.suspect_timeout=PT5S
      

  2. 恢復步驟

    • 識別存活分區
    • 手動選擇主分區
    • 重啟其他節點以加入:
      mysqld --wsrep_cluster_address=gcomm://primary_node
      

  3. 仲裁方案

    • 專用仲裁節點
    • 外部仲裁服務
    • 云提供商托管仲裁

SST故障處理

  1. 常見錯誤

    • 認證失敗
    • 磁盤空間不足
    • 網絡中斷
  2. 解決步驟

    # 檢查日志定位原因
    tail -f /var/log/mysql/error.log# 手動執行SST
    mysql -e "SET GLOBAL wsrep_sst_donor='node2'"
    

  3. 最佳實踐

    • 預先測試SST過程
    • 監控磁盤空間
    • 使用專用SST賬戶

性能調優建議

  1. 參數優化

    innodb_buffer_pool_size=12G
    innodb_log_file_size=4G
    wsrep_slave_threads=16
    

  2. 架構優化

    • 讀寫分離
    • 數據分片
    • 緩存層引入
  3. 硬件建議

    • 10Gbps網絡
    • SSD存儲
    • 充足內存(>64GB用于大型集群)

總結與建議

Galera Cluster 為MySQL/MariaDB提供了企業級的高可用解決方案,但在實際部署時需要注意:

  1. 適用場景

    • 需要強一致性的關鍵業務
    • 中等寫入負載(<5000 TPS)
    • 網絡延遲穩定的環境
  2. 限制因素

    • 所有節點必須具有相同數據
    • 網絡分區可能導致服務中斷
    • 跨數據中心部署需高帶寬
  3. 運維建議

    • 建立完善的監控系統
    • 定期進行故障演練
    • 保持軟件版本一致

通過合理配置和持續優化,Galera Cluster可以為企業提供穩定可靠的數據庫集群服務。

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

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

相關文章

MybatisPlus-03.快速入門-常用注解

一.MP的原理 mp究竟是如何知道我們需要對哪個表進行操作&#xff0c;并且又是如何知道要操作哪些字段的呢&#xff1f;這是因為mp使用到了反射機制&#xff0c;我們在定義mapper接口時使其繼承了BaseMapper接口&#xff0c;并指定了BaseMapper接口泛型為User&#xff0c;因此m…

ABAP+記錄一個BDC的BUG修改過程

問題背景&#xff1a; 業務顧問反饋在使用BDC 進行MEQ1進行供應商配額時&#xff0c;由于以前錄屏時用例只有3行數據&#xff0c;導致現在有5行數據的時候&#xff0c;代碼仍然只獲取了3行數據進行錄入&#xff0c;現在需要更改代碼&#xff0c;使其按照實際情況自動調整行數。…

github上傳代碼步驟(http)

github上傳步驟&#xff08;http&#xff09; 之前github上傳不了代碼&#xff0c;總是報錯。后面發現自己用的ssh上傳需要秘鑰&#xff0c;現在我介紹一個最簡單的http上傳方法&#xff08;雖然沒有ssh安全。。。但簡單嘛~&#xff09;&#xff0c;現在我做個例子&#xff0c…

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子

深入理解Nginx-以實際http通信例子改造帶ssl配Nginx的實戰-優雅草卓伊凡|麻子 SSL/TLS在Nginx中的底層實現原理 Nginx的SSL模塊架構 Nginx通過ngx_http_ssl_module模塊實現SSL/TLS功能&#xff0c;該模塊基于OpenSSL庫構建。根據Nginx官方文檔&#xff0c;SSL模塊在Nginx架構…

AT6558R-5N32介紹

作為單芯片SOC方案&#xff0c;AT6558R在片上整合了射頻前端、數字基帶處理器與32位RISC CPU&#xff0c;并具備電源管理能力。該芯片兼容北斗、GPS、GLONASS三大衛星導航系統&#xff0c;可實現多模協同定位?。 主要特征 支持 BDS/GPS/GLONASS 多系統聯合定位 和單系統獨立定…

“對象創建”模式之原型模式

目錄 Prototype 原型模式動機 Motivation引例模式定義結構 Structure要點總結 Prototype 原型模式 動機 Motivation 在軟件系統中&#xff0c;經常面臨著“某些結構復雜的對象”的創建工作&#xff1b;由于需求的變化&#xff0c;這些對象經常面臨著劇烈的變化&#xff0c;但…

Tomcat服務概述

前言&#xff1a; 作為Apache軟件基金會Jakarta項目的核心成果&#xff0c;Tomcat憑借其輕量級、開源免費的特性&#xff0c;已成為Java Web應用服務的行業基準。它實現了完整的Servlet與JSP規范&#xff0c;通過模塊化架構&#xff08;Connector請求處理層與Container業務邏輯…

HarmonyOS應用開發高級認證知識點梳理 (一) 布局與樣式

以下是 HarmonyOS 應用開發中 ?布局與樣式? 的核心知識點梳理&#xff08;針對高級認證備考&#xff09;&#xff0c;結合官方文檔與高頻考點&#xff1a; 一、布局系統核心知識點 布局容器類型? 線性布局?&#xff1a;Column&#xff08;縱向&#xff09;、Row&#xf…

【Ragflow】30.離線環境遷移方案

前言 之前的 Ragflow-Plus 在服務器上穩定運行一段時間后&#xff0c;接到任務&#xff0c;要把服務遷移到一臺古老的&#xff0c;離線的windows臺式機上。 起初認為&#xff0c;下載離線安裝包&#xff0c;加載離線鏡像&#xff0c;遷移下數據就可以了。 結果坑多得意想不到…

nrf52840藍牙學習(定時器的應用)

和其他 MCU 處理器一樣&#xff0c;在 nrf52840 中定時器的功能是十分強大的。其內部包含了 5 個定時 器 TIMER 模塊 :TIMER0 、 TIMER1 、 TIMER2 、 TIMER3 、 TIMER4 &#xff0c;如下表 10.1 所示。 1. 時鐘源 首先定時器 TIMER 工作在高頻時鐘源&#xff08…

【Bluedroid】藍牙啟動之BTM_reset_complete源碼解析

當藍牙控制器完成硬件重置后,協議棧需通過一系列初始化操作恢復各模塊狀態。本文深入分析BTM_reset_complete核心函數及其調用鏈,詳解 L2CAP 連接清理、安全模塊重置、掃描參數恢復、BLE 隱私功能初始化等關鍵流程,揭示藍牙設備在重置后如何通過標準化狀態恢復確保互操作性、…

containerd 項目主要目錄簡要說明

containerd 項目結構清晰&#xff0c;核心代碼分布在若干主目錄下。以下是 client、cmd、core、internal、pkg、plugins 這六個主要包/目錄的簡要作用說明&#xff1a; 1. client 作用&#xff1a;封裝與 containerd 守護進程通信的 Go 客戶端 API&#xff0c;主要基于 gRPC。…

有線轉無線工具,輕松創建WiFi熱點

軟件介紹 今天為大家推薦一款實用的無線網絡共享工具——MyPublicWiFi。這款軟件能夠將電腦的有線網絡轉換為無線WiFi&#xff0c;方便其他設備連接使用。 安裝與設置 該軟件為安裝版程序&#xff0c;安裝完成后會自動識別當前電腦的IP地址。用戶可在軟件界面中自定義設…

Linux下,通過標準I2C驅動讀取Sensor ID

sensor型號&#xff1a;OS04L10&#xff0c;sensor引腳以及時鐘要先配置好&#xff0c;源碼如下&#xff1a; #include <fcntl.h> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include <stdint.h> #include <stdio.h> #include <sy…

人工智能基石:SVM支持向量機全解析(附Python實戰)

大家好&#xff01;今天我們來深入探討支持向量機&#xff08;Support Vector Machine, SVM&#xff09;——這個在??圖像識別、文本分類??等領域廣泛應用的強大算法。既能處理分類問題&#xff0c;又能解決回歸任務&#xff0c;甚至在非線性數據面前也能游刃有余。本文將帶…

mysql查看數據庫

在 MySQL 中查看當前數據庫的創建語句&#xff0c;使用 SHOW CREATE DATABASE 命令&#xff0c;以下是詳細操作指南&#xff1a; 1. 查看當前數據庫的創建語句 SHOW CREATE DATABASE database_name; 替換 database_name 為你的數據庫名使用反引號 包裹特殊名稱或保留字 2.…

ArrayList剖析

大家天天在用List&#xff0c;ArrayList一般來講應該是程序員用的最多的集合類了。 我們今天研究一下ArrayList。 總體來講&#xff0c;從底層數據結構或者源碼的角度看&#xff0c;List比Map或者Set要簡單。 底層數據結構 ArryList其實就是可變長數組。 初始化的時候&…

回顧JAVA中的鎖機制

Java中的鎖機制 在Java中&#xff0c;鎖機制是多線程編程里保障數據一致性與線程安全的關鍵技術。 1. 內置鎖&#xff1a;synchronized關鍵字 synchronized是Java的內置鎖機制&#xff0c;能夠保證在同一時刻&#xff0c;只有一個線程可以執行被其修飾的代碼塊或方法。 用法…

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀(逐段解析)

YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目標檢測論文精讀&#xff08;逐段解析&#xff09; 論文地址&#xff1a;https://www.arxiv.org/abs/2410.17725 Rahima Khanam and Muhammad Hussain Ultralytics公司發布 CVPR 2024 論文寫的比較簡單&#xff…

【Erdas實驗教程】025:遙感圖像輻射增強(霧霾去除)

文章目錄 一、霧霾去除原理二、霧霾去除案例一、霧霾去除原理 遙感影像霧霾去除的核心原理是消除大氣散射對電磁波的干擾,恢復地物真實反射信息。Haze Reduction 工具的原理: 該工具基于暗目標法(Dark Object Subtraction, DOS),適用于去除因大氣散射(霧霾本質是大氣顆…