在当今数据驱动的业务环境中,数据库高可用性已成为基础设施的刚性需求。传统主从复制架构在故障切换时存在数据不一致和人工干预成本高的问题,而MariaDB Galera Cluster提供的多主同步复制方案彻底改变了这一局面。我曾在金融支付系统中部署过该方案,实测故障自动恢复时间可控制在10秒内,业务完全无感知。
Galera Cluster的核心机制在于其真正的多主架构——所有节点均可读写,且通过wsrep API实现行级同步复制。与常规异步复制不同,任何节点提交的事务都会通过认证方式广播到集群,只有当多数节点确认后才会提交。这种同步复制机制确保了数据的强一致性,避免了脑裂情况的发生。
根据生产环境经验,建议采用以下配置:
bash复制# 系统参数调优示例(CentOS 7)
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 16384" >> /etc/sysctl.conf
sysctl -p
部署前需确保:
重要提示:所有节点系统时间偏差必须控制在1秒内,否则会导致集群状态异常。
bash复制# MariaDB官方仓库设置(CentOS)
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
bash复制yum install -y MariaDB-server MariaDB-client galera-4 rsync
安装后需特别注意:
/etc/my.cnf.d/server.cnf关键配置段:
ini复制[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://node1_ip,node2_ip,node3_ip"
wsrep_cluster_name='production_cluster'
wsrep_node_address='current_node_ip'
wsrep_node_name='node1'
wsrep_sst_method=rsync
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
配置要点解析:
wsrep_sst_method:初始状态传输方式,生产环境建议xtrabackupinnodb_autoinc_lock_mode=2:多主写入必须配置wsrep_node_name必须唯一首节点启动:
bash复制galera_new_cluster
systemctl start mariadb
其他节点加入:
bash复制systemctl start mariadb
验证命令:
sql复制SHOW STATUS LIKE 'wsrep%';
关键状态指标说明:
wsrep_ready: ON表示可正常处理请求wsrep_cluster_size: 当前集群节点数wsrep_local_state_comment: Synced表示同步正常安全重启流程:
galera_new_clusterini复制innodb_buffer_pool_size = 6G # 物理内存的70-80%
innodb_log_file_size = 2G
wsrep_slave_threads = 16 # CPU核心数的2-4倍
wsrep_provider_options="gcache.size=4G" # 建议2-4G
推荐监控指标:
Prometheus监控示例配置:
yaml复制- job_name: 'mariadb_galera'
static_configs:
- targets: ['node1:9104', 'node2:9104']
metrics_path: '/metrics'
脑裂情况处理:
SST失败处理:
sql复制-- 强制重置本地节点状态
SET GLOBAL wsrep_provider_options='pc.bootstrap=YES';
-- 查看冲突事务
SHOW STATUS LIKE 'wsrep_last_committed%';
生成SSL证书:
bash复制openssl req -newkey rsa:2048 -nodes -keyout galera-key.pem -x509 -days 365 -out galera-cert.pem
配置项追加:
ini复制wsrep_provider_options="socket.ssl_cert=/path/to/galera-cert.pem;socket.ssl_key=/path/to/galera-key.pem"
建议配置:
使用xtrabackup进行热备:
bash复制innobackupex --user=backup_user --password=xxx --no-timestamp /backup_path
新节点加入步骤:
滚动升级原则:
升级检查清单:
我在实际运维中发现,Galera Cluster对DDL操作特别敏感。建议在业务低峰期执行表结构变更,并预先在测试环境验证。曾经因为一个ALTER TABLE操作导致整个集群性能下降,最终通过调整wsrep_desync参数临时解决。