插件窝 干货文章 Galera Cluster多主集群配置与冲突解决方案详解

Galera Cluster多主集群配置与冲突解决方案详解

Galera Cluster多主集群配置与冲突解决方案

一、Galera Cluster简介

Galera Cluster是一个基于同步复制的多主MySQL集群解决方案,提供高可用性、数据一致性和读写扩展能力。相比传统主从架构,其多主特性允许所有节点同时处理写操作。

二、Galera Cluster多主配置步骤

1. 环境准备

  • 至少3个节点(推荐奇数个)
  • 相同版本的MySQL/MariaDB
  • 网络互通且低延迟
  • 同步的系统时间(NTP)

2. 安装Galera插件

# Ubuntu/Debian
apt-get install galera-3 mysql-wsrep

# CentOS/RHEL
yum install galera-3 mariadb-server-galera

3. 配置文件修改

在所有节点的my.cnf中添加配置:

[mysqld]
binlog_format=ROW
default-storage-engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera配置
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_galera_cluster"
wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip"
wsrep_node_name="node1"  # 每个节点名称不同
wsrep_node_address="current_node_ip"
wsrep_sst_method=rsync

4. 启动集群

第一个节点启动:

galera_new_cluster

其他节点正常启动MySQL服务即可加入集群

三、常见冲突类型与解决方案

1. 主键冲突

现象:多节点同时插入相同主键值

解决方案:

  • 使用UUID或全局序列生成器
  • 配置auto_increment_increment和auto_increment_offset

2. 数据不一致

现象:节点间数据出现差异

解决方案:

  • 定期运行CHECKSUM TABLE验证数据一致性
  • 使用pt-table-checksum工具检测差异
  • 配置wsrep_slave_threads增加复制线程

3. 脑裂问题

现象:网络分区导致集群分裂

解决方案:

  • 配置pc.ignore_sb=true允许自动恢复
  • 设置合理的evs.suspect_timeout
  • 人工干预选择主分区

四、性能优化建议

  • 避免大事务,拆分为小事务
  • 优化wsrep_slave_threads数量
  • 使用wsrep_causal_reads=ON保证读一致性
  • 监控wsrep_flow_control_paused指标

五、监控与维护

关键监控指标:

  • wsrep_ready
  • wsrep_connected
  • wsrep_cluster_size
  • wsrep_local_state_comment
  • wsrep_flow_control_paused