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_size | 3 | 集群节点数量,3个节点则显示3 |
| wsrep_cluster_status | Primary | 集群状态正常 |
| wsrep_ready | ON | 节点可以正常处理请求 |
也可以测试多主复制:在第一个节点创建数据库和表,插入数据,然后在第二个节点查询,看是否能立即查到数据:
-- 节点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