14.8.8 高可用场景下的运维流程与演练
高可用场景下的运维流程与演练需围绕“预案—监测—处置—恢复—复盘”闭环落地,并配合标准化SOP与可执行脚本,确保在故障发生时可快速切换、可量化评估。以下内容覆盖原理草图、流程规范、命令与演练示例、排错清单与练习。
原理草图(流程闭环与组件协同):
一、标准化运维流程(SOP要点)
1)故障分级与响应时限
- P1:核心业务中断,5分钟内响应
- P2:部分业务受影响,15分钟内响应
- P3:潜在风险或性能退化,60分钟内响应
2)变更与回滚
- 变更前必须明确:灰度范围、监控指标、回滚步骤
- 所有变更必须记录在“变更日志+ProxySQL配置变更记录”
3)监控指标与阈值
- 连接失败率、后端延迟、心跳异常、读写路由错配、节点剔除次数
- 与告警渠道联动(钉钉/短信/邮件)
二、运行一致性校验与配置同步(示例)
检查 runtime 与 disk 一致性:
# 进入ProxySQL管理端
mysql -uadmin -padmin -h127.0.0.1 -P6032
# 查看磁盘配置与运行配置差异
SELECT 'disk' AS src, hostgroup_id, hostname, status FROM mysql_servers
UNION ALL
SELECT 'runtime' AS src, hostgroup_id, hostname, status FROM runtime_mysql_servers;
# 若需要同步 disk -> runtime
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
检查读写规则是否生效:
# 查看规则
SELECT rule_id, match_pattern, destination_hostgroup, apply
FROM mysql_query_rules
ORDER BY rule_id;
# 应用规则到runtime
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
配置同步示例(多ProxySQL节点时):
# 将主节点配置导出
proxysql-admin --config-file=/etc/proxysql-admin.cnf --export > /tmp/proxysql_cfg.sql
# 在从节点导入
mysql -uadmin -padmin -h127.0.0.1 -P6032 < /tmp/proxysql_cfg.sql
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
三、演练场景与可执行步骤
场景1:后端主库故障演练(模拟不可达)
1)演练前检查主库状态:
mysql -uroot -p -h10.0.0.10 -e "SHOW SLAVE STATUS\G"
2)模拟主库不可达(临时封禁3306):
sudo iptables -I INPUT -p tcp --dport 3306 -j DROP
# 预期:ProxySQL监控剔除主库、写流量切换
3)ProxySQL侧验证:
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"SELECT hostgroup_id,hostname,status,weight FROM runtime_mysql_servers;"
4)恢复主库:
sudo iptables -D INPUT -p tcp --dport 3306 -j DROP
5)检查写入恢复:
mysql -uapp -papp -hVIP -P6033 -e "SELECT @@hostname, @@read_only;"
场景2:ProxySQL节点故障(模拟进程异常)
1)停止ProxySQL:
sudo systemctl stop proxysql
2)验证Keepalived/HAProxy切换(VIP漂移):
ip addr show | grep -A2 "vip"
3)恢复ProxySQL:
sudo systemctl start proxysql
场景3:网络抖动与高延迟(故障注入)
# 在ProxySQL到MySQL网络路径注入延迟
sudo tc qdisc add dev eth0 root netem delay 200ms 50ms loss 5%
# 观察慢查询与剔除
mysql -uadmin -padmin -h127.0.0.1 -P6032 -e \
"SELECT * FROM stats_mysql_connection_pool WHERE ConnUsed > 0;"
# 恢复网络
sudo tc qdisc del dev eth0 root netem
四、排错清单(快速定位)
1)连接异常:
- 检查ProxySQL端口:6032管理端、6033业务端
- 检查mysql_users是否在runtime
SELECT username, active FROM runtime_mysql_users;
2)读写分离失效:
- 检查规则是否加载
- 检查后端MySQL read_only状态
mysql -uapp -papp -hvip -P6033 -e "SELECT @@read_only;"
3)主备切换慢:
- 检查监控频率与阈值
SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor%';
五、SOP自动化脚本示例(故障注入与回滚)
文件:/opt/ha-drill/drill_mysql_primary.sh
#!/bin/bash
# 模拟主库故障并恢复
PRIMARY_HOST="10.0.0.10"
ACTION=${1:-inject}
case "$ACTION" in
inject)
echo "[Inject] Block 3306 on $PRIMARY_HOST"
ssh root@$PRIMARY_HOST "iptables -I INPUT -p tcp --dport 3306 -j DROP"
;;
rollback)
echo "[Rollback] Unblock 3306 on $PRIMARY_HOST"
ssh root@$PRIMARY_HOST "iptables -D INPUT -p tcp --dport 3306 -j DROP"
;;
*)
echo "Usage: $0 {inject|rollback}"
exit 1
;;
esac
运行:
chmod +x /opt/ha-drill/drill_mysql_primary.sh
/opt/ha-drill/drill_mysql_primary.sh inject
/opt/ha-drill/drill_mysql_primary.sh rollback
六、演练记录模板(建议字段)
- 故障类型、触发时间、告警时间
- 剔除时间、切换完成时间、RTO
- 连接失败峰值、业务探针成功率
- 复盘问题与优化项
七、练习任务
1)编写脚本:模拟ProxySQL进程崩溃并验证VIP漂移
2)新增读写分离规则并验证SQL路由
3)将演练过程指标写入CSV,计算RTO并输出日报
4)调整mysql-monitor_connect_interval,观察切换时间变化
通过以上流程、命令、脚本与练习,可形成可执行、可验证、可复盘的高可用运维演练体系,确保ProxySQL高可用场景下的切换与恢复稳定可控。