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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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),适用于去除因大气散射(雾霾本质是大气颗…