如何利用MariaDB Galera Cluster实现MariaDB的多主复制

来源:苹果APP网作者:广州程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何利用MariaDB Galera Cluster实现MariaDB的多主复制》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何利用MariaDB Galera Cluster实现MariaDB的多主复制》有用,将其分享出去将是对创作者最好的鼓励。

MariaDB Galera Cluster是一套基于同步复制的多主数据库集群方案,所有集群节点都可以同时处理读写请求,数据会在节点间实时同步,保证各节点数据完全一致,没有传统主从复制的延迟问题,也避免了单主节点的性能瓶颈和单点故障风险。

MariaDB Galera Cluster核心原理

MariaDB Galera Cluster的核心是wsrep(Write Set Replication)协议,所有写操作都会先生成写集,写集包含操作涉及的数据变更和事务信息,然后通过组通信在集群所有节点间同步。只有多数节点确认接收写集后,事务才会提交,以此保证数据一致性。

集群节点分为两种角色:

  • 主节点:所有节点都是主节点,都可以接收读写请求
  • 仲裁节点:不存储数据的节点,仅参与投票,避免集群出现脑裂问题

环境准备

搭建3节点的MariaDB Galera Cluster,需要满足以下基础条件:

  • 3台服务器,系统建议为CentOS 7及以上或者Ubuntu 18.04及以上
  • 服务器之间网络互通,关闭防火墙或者开放对应端口(默认4567、3306、4568)
  • 所有节点安装相同版本的MariaDB,建议10.4及以上版本,同时安装Galera插件

集群搭建步骤

1. 安装MariaDB和Galera组件

以CentOS 7为例,先配置MariaDB官方yum源,然后安装对应组件:

# 添加MariaDB 10.6的yum源
cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.6/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

# 安装MariaDB服务器和Galera插件
yum install -y MariaDB-server MariaDB-client galera

2. 配置Galera集群参数

所有节点都需要修改MariaDB配置文件/etc/my.cnf.d/server.cnf,添加Galera相关配置:

[galera]
# 开启Galera插件
wsrep_on=ON
# Galera插件路径,根据实际安装路径调整
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
# 集群名称,所有节点保持一致
wsrep_cluster_name="mariadb_galera_cluster"
# 集群节点地址,填写所有节点的IP,用逗号分隔
wsrep_cluster_address="gcomm://192.168.0.101,192.168.0.102,192.168.0.103"
# 节点名称,每个节点设置不同的名称
wsrep_node_name="node1"
# 节点IP,填写当前节点的IP
wsrep_node_address="192.168.0.101"
# 同步方式,默认即可
wsrep_sst_method=rsync
# 数据库用户,用于节点间同步,需要提前创建
wsrep_sst_auth="sst_user:sst_password"

注意:第二个节点的wsrep_node_name设置为node2,wsrep_node_address设置为192.168.0.102,第三个节点对应调整即可。

3. 初始化第一个集群节点

在第一个节点执行初始化命令,启动集群:

# 初始化第一个节点,--wsrep-new-cluster参数表示创建新集群
galera_new_cluster
# 启动MariaDB服务
systemctl start mariadb
# 设置开机自启
systemctl enable mariadb

4. 创建同步用户

在第一个节点登录MariaDB,创建用于节点间同步的用户:

-- 登录MariaDB
mysql -u root -p

-- 创建同步用户,允许所有节点访问
CREATE USER 'sst_user'@'%' IDENTIFIED BY 'sst_password';
-- 授予同步所需权限
GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sst_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

5. 启动剩余节点

在第二个和第三个节点直接启动MariaDB服务即可,节点会自动加入集群:

systemctl start mariadb
systemctl enable mariadb

集群验证

登录任意节点,执行以下SQL查看集群状态:

-- 查看Galera相关状态变量
SHOW STATUS LIKE 'wsrep%';

重点查看以下几个参数:

参数名预期值说明
wsrep_cluster_size3集群节点数量,3个节点则显示3
wsrep_cluster_statusPrimary集群状态正常
wsrep_readyON节点可以正常处理请求

也可以测试多主复制:在第一个节点创建数据库和表,插入数据,然后在第二个节点查询,看是否能立即查到数据:

-- 节点1执行
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE user_info (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO user_info VALUES (1, '测试用户');

-- 节点2执行,应该能查到刚插入的数据
USE test_db;
SELECT * FROM user_info;

使用注意事项

  • Galera Cluster是同步复制,写操作的延迟会受集群节点网络影响,建议节点部署在同一局域网内
  • 不支持不支持的存储引擎,比如MyISAM,所有表建议使用InnoDB引擎
  • 集群节点数量建议为奇数,避免脑裂问题,最少3个节点,最多建议不超过8个节点
  • 如果集群所有节点都停止,重启时需要先启动最后一个停止的节点,或者指定一个节点用--wsrep-new-cluster参数启动
  • 大事务可能会导致同步延迟,建议拆分大事务,单次事务操作的数据量不要过大
搭建完成后,可以通过负载均衡组件比如HAProxy将读写请求分发到各个集群节点,进一步提升集群的整体性能和可用性。

MariaDB_Galera_Cluster多主复制数据库高可用wsrep修改时间:2026-06-22 17:10:07

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。