1. MySQL单点故障的本质与危害
当数据库服务器只有单一节点时,任何硬件故障、网络中断或软件崩溃都会导致整个系统不可用。去年我们电商平台就经历过一次惨痛教训——主数据库SSD损坏导致服务中断6小时,直接损失订单金额超百万。
单点故障的典型表现包括:
- 服务器硬件故障(磁盘、内存、电源等)
- 操作系统崩溃或MySQL进程异常终止
- 网络连接中断(网卡故障、交换机问题)
- 机房级灾难(断电、火灾、自然灾害)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高可用架构方案选型
2.1 主从复制(Replication)
这是最基础的容灾方案,通过binlog实现数据同步:
sql复制-- 主库配置
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
-- 从库配置
[mysqld]
server-id = 2
relay_log = mysql-relay-bin
read_only = ON
关键点:建议使用GTID复制模式,避免传统binlog位置复制的主从切换问题
2.2 组复制(Group Replication)
MySQL 5.7+提供的原生方案,基于Paxos协议:
sql复制-- 所有节点配置
[mysqld]
plugin_load_add = 'group_replication.so'
transaction_write_set_extraction = XXHASH64
group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot = OFF
group_replication_local_address = "node1:33061"
group_replication_group_seeds = "node1:33061,node2:33061,node3:33061"
2.3 MGR与主从复制的对比
| 特性 | 传统主从复制 | 组复制(MGR) |
|---|---|---|
| 数据一致性 | 最终一致 | 强一致 |
| 故障检测 | 手动 | 自动(秒级) |
| 写节点扩展 | 单点写入 | 多点写入(可选) |
| 适用版本 | 所有MySQL版本 | MySQL 5.7.17+ |
3. 生产环境部署实战
3.1 基于Keepalived的VIP方案
拓扑结构:
code复制[Master] <-心跳-> [Backup]
| |
VIP(192.168.1.100)
keepalived配置示例:
conf复制vrrp_script chk_mysql {
script "/usr/bin/mysql -uroot -p密码 -e 'select 1'"
interval 2
fall 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_mysql
}
}
3.2 使用ProxySQL实现读写分离
典型架构:
code复制App -> ProxySQL -> [Master]
|--> [Slave1]
|--> [Slave2]
关键配置:
sql复制-- 添加服务器
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES
(10,'master',3306),
(20,'slave1',3306),
(20,'slave2',3306);
-- 配置路由规则
INSERT INTO mysql_query_rules (rule_id,active,match_pattern,destination_hostgroup,apply) VALUES
(1,1,'^SELECT.*FOR UPDATE',10,1),
(2,1,'^SELECT',20,1),
(3,1,'^INSERT',10,1);
4. 云环境下的特殊考量
4.1 AWS Aurora架构
Aurora采用存储与计算分离的设计:
code复制[Writer] -+
|--> [Shared Storage Volume]
[Reader] -+
4.2 阿里云RDS高可用版
其实现原理为:
code复制主库 -> 备库(同步复制)
|
+-> 日志节点(保障日志不丢失)
5. 监控与故障处理
5.1 关键监控指标
bash复制# 复制延迟监控
mysql -e "SHOW SLAVE STATUS\G" | grep Seconds_Behind_Master
# MGR状态检查
SELECT * FROM performance_schema.replication_group_members;
5.2 常见故障处理
案例1:主从复制中断
sql复制-- 查看错误原因
SHOW SLAVE STATUS\G
-- 常见修复方法
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
案例2:脑裂问题处理
- 确认各节点状态
- 强制下线异常节点
sql复制SELECT * FROM performance_schema.replication_group_members;
ALTER SYSTEM SET group_replication_force_members='192.168.1.101:33061';
6. 性能优化建议
-
网络配置:
- 建议使用万兆网络
- 设置合适的net_write_timeout(建议60-120秒)
-
参数调整:
ini复制# 组复制相关
group_replication_flow_control_mode = "QUOTA"
group_replication_flow_control_applier_threshold = 25000
- 硬件建议:
- 所有节点建议相同配置
- SSD存储必备
- 内存建议≥64GB(对于生产环境)
7. 容灾演练checklist
-
主库宕机测试
- 验证VIP漂移时间
- 检查应用重连机制
-
网络分区模拟
- 使用iptables阻断节点间通信
- 观察集群自愈过程
-
数据一致性验证
- 使用pt-table-checksum工具
- 定期进行全量校验
重要提示:所有高可用方案都必须经过真实故障演练,文档中的"理论上可行"不等于生产环境真的可用
