在现代互联网架构中,高可用、可扩展的数据库集群是承载关键业务的基础设施核心。MariaDB 10.11 与 Galera Cluster 结合,能够实现真正的多主复制、高可用自动故障恢复和一致性保证。A5数据将基于 Ubuntu 22.04 操作系统,从硬件选型、系统调优、环境准备、MariaDB + Galera 安装、集群配置、性能测试与评估等完整流程进行技术深度讲解。
一、方案概览
在本教程中,我们将构建一个三节点的 MariaDB + Galera 多主集群:
- 节点 A / B / C:三台独立服务器(物理或云主机均可)
- 操作系统:Ubuntu Server 22.04 LTS x86_64
- 数据库:MariaDB 10.11
- 高可用组件:Galera wsrep
- 负载均衡(可选):HAProxy + Keepalived
核心目标:
二、香港服务器www.a5idc.com硬件与系统配置建议
以下为推荐的硬件配置(根据业务规模调整):
| CPU | 中等/高 | 8 核以上(Intel Xeon / AMD EPYC) |
| 内存 | 中等/高 | 32GB 或更高 |
| 存储 | NVMe SSD | 1TB NVMe SSD (至少 500MB/s+ 读写) |
| 网络 | 10GbE | 低延迟高带宽(集群节点间) |
| 操作系统 | 最新稳定版 | Ubuntu Server 22.04 LTS |
说明:
- 关键是存储和网络性能,SSD 读写延迟低可提升同步复制性能。
- 网络建议独立内网,用于 Galera 通信。
三、系统准备与优化
3.1 基础环境
以三台服务器分别命名为 db-node1、db-node2、db-node3。假设 IP 如下:
| db-node1 | 10.0.1.11 |
| db-node2 | 10.0.1.12 |
| db-node3 | 10.0.1.13 |
3.2 系统优化参数
编辑 sysctl 配置:
cat <<EOF | sudo tee /etc/sysctl.d/99-mariadb-galera.conf
net.core.somaxconn=1024
net.ipv4.tcp_tw_reuse=1
net.ipv4.ip_local_port_range=1024 65000
fs.file-max=500000
vm.swappiness=1
EOF
sudo sysctl –system
设置文件句柄限制:
cat <<EOF | sudo tee /etc/security/limits.d/99-mariadb.conf
mysql soft nofile 100000
mysql hard nofile 200000
EOF
四、安装 MariaDB 10.11 与 Galera
4.1 添加官方源
在三台节点上执行:
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository 'deb [arch=amd64] https://mirror.mariadb.org/repo/10.11/ubuntu jammy main'
sudo apt update
4.2 安装 MariaDB Server
sudo apt install -y mariadb-server galera-4 mariadb-backup
验证版本:
mysql –version
# expected: mysql Ver 15.1 Distrib 10.11.x-MariaDB
五、Galera 配置
5.1 节点共用配置片段
编辑 /etc/mysql/mariadb.conf.d/galera.cnf:
[galera]
# Galera settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# SST method (用于全量同步)
wsrep_sst_method=rsync
# 集群名字
wsrep_cluster_name="mariadb_galera_cluster"
# 三个节点的内网 IP 列表
wsrep_cluster_address="gcomm://10.0.1.11,10.0.1.12,10.0.1.13"
# Galera 序列默认端口
wsrep_node_incoming_address="10.0.1.X"
wsrep_node_name="db-nodeX"
注意:
- wsrep_node_incoming_address 与 wsrep_node_name 需分别在三台节点上设置不同值。
5.2 MariaDB 配置重要参数
在 /etc/mysql/mariadb.conf.d/50-server.cnf 中设置:
[mysqld]
bind-address=0.0.0.0
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Galera 复制优化
wsrep_slave_threads=4
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=12G
innodb_log_file_size=512M
innodb_file_per_table=1
# 允许大量连接
max_connections=1000
解释关键项:
- binlog_format=ROW:必需用于 Galera 的 row-based 复制。
- innodb_autoinc_lock_mode=2:提高多主自增性能。
- innodb_flush_log_at_trx_commit=2:在性能和安全间折中。
六、引导集群与启动
在 db-node1 上执行:
sudo systemctl stop mariadb
sudo galera_new_cluster
确认已创建集群:
mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
# expected: 1
在其他节点上:
sudo systemctl restart mariadb
检查集群大小应为 3:
mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
# expected: 3
如显示不正确,检查各节点的 /var/log/mysql/error.log。
七、验证多主写入一致性
在 db-node1:
USE test;
CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, value VARCHAR(50));
INSERT INTO t1 (value) VALUES ('node1_data');
在 db-node2:
SELECT * FROM test.t1;
# expected: 同样可见 node1_data
INSERT INTO t1 (value) VALUES ('node2_data');
在任意节点验证:
SELECT * FROM test.t1;
# expected: node1_data, node2_data
八、性能评估与指标监控
8.1 集群关键指标
| wsrep_cluster_size | 集群节点数量 |
| wsrep_ready | 是否正常接受请求 |
| wsrep_flow_control_paused | 流控等待 |
| wsrep_local_recv_queue | 本地接收队列长度 |
| Threads_running | 活跃线程数 |
一键查看:
watch -n 2 "mysql -e \\"SHOW STATUS LIKE 'wsrep_%';\\""
8.2 压力测试
使用 sysbench 进行压测:
sudo apt install -y sysbench
sysbench oltp_read_write \\
–db-driver=mysql \\
–mysql-user=root \\
–mysql-db=test \\
–tables=10 \\
–table-size=100000 \\
–threads=32 \\
–time=600 \\
run
记录 QPS、事务响应时间等。
九、自动故障转移与负载均衡设计(HA)
9.1 安装 HAProxy
在单独一台 LB 节点:
sudo apt install -y haproxy
HAProxy 配置 /etc/haproxy/haproxy.cfg 中加入:
frontend mysql_front
bind *:3306
mode tcp
default_backend mysql_back
backend mysql_back
mode tcp
balance roundrobin
option mysql-check user haproxy_check
server db1 10.0.1.11:3306 check
server db2 10.0.1.12:3306 check
server db3 10.0.1.13:3306 check
9.2 Keepalived(可选)
提供 VIP 高可用。
示例:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.1.100/24
}
}
十、SST 与 IST 机制详解
| SST | 新节点加入、大差异 | 全量复制,开销较大 |
| IST | 节点短暂中断后加入 | 增量同步,无需全量 |
本教程使用 rsync,如需更高效建议使用 mariabackup:
wsrep_sst_method=mariabackup
wsrep_sst_auth="sst_user:password"
十一、安全设置
11.1 配置 MariaDB 用户
CREATE USER 'sst_user'@'%' IDENTIFIED BY 'secure_password';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sst_user'@'%';
FLUSH PRIVILEGES;
11.2 防火墙规则
sudo ufw allow from 10.0.1.0/24 to any port 3306
sudo ufw allow from 10.0.1.0/24 to any port 4567
sudo ufw allow from 10.0.1.0/24 to any port 4568
sudo ufw allow from 10.0.1.0/24 to any port 4444
十二、常见故障排查
12.1 节点无法加入集群
检查:
grep -i "wsrep" /var/log/mysql/error.log
可能原因:
- 网络不通
- 配置间地址错误
12.2 数据不一致
使用 CHECKSUM TABLE 对比:
CHECKSUM TABLE test.t1;
结语
A5数据本教程提供了在 Ubuntu 22.04 上部署 MariaDB 10.11 + Galera 多主高可用集群的完整流程与详细技术参数,包括硬件建议、系统优化、配置文件要点、集群启动、压力测试、安全加固等。通过逐步实战操作,能够构建一个稳定、高性能、可扩展的数据库服务。
如需进一步结合业务特性(如读写分离策略、监控告警集成、备份策略规划等),可在此基础上扩展。
网硕互联帮助中心




评论前必须登录!
注册