高可用实验:故障排查与值班交接
分别检查 MySQL、PostgreSQL 与 Redis 的角色和复制证据,禁止无隔离强制提升并保全争议事务。
状态与接管边界
状态:PENDING(待目标环境验证)。本篇是实验故障排查方案,没有切主、隔离或恢复结果。MySQL 单写 GTID 复制、PostgreSQL/Patroni/etcd/HAProxy、Redis/Sentinel 是三条独立拓扑,各用独立资产、凭据和流水;不能套用同一组命令或合并比较复制位点。
接到“主库不可用”先登记最后成功事务、当前入口和客户端错误,召集数据库与业务裁决人。管理地址不通不能证明旧主停止写入;没有可靠 fencing(阻断旧主写能力)及授权,禁止强制提升任何副本。
共同只读取证与分支判断
同时记录各节点身份、角色、复制方向、采样时间,以及代理后端和应用已有连接。只看代理健康不够:旧连接、直连任务和批处理可能绕过新入口。证据矛盾时停止故障注入,升级裁决,不以“哪个先恢复连接”决定数据权威。
若数据库角色正常而应用失败,检查认证、连接池和路由;若复制异常而写入口正常,先评估冗余和丢失风险;若发现两个可写节点,进入角色争议流程。按预案控制受影响写入口仍需授权,并保存两侧证据,不能立即重建一侧。
MySQL:线程、GTID 与业务流水
在已认证的获准 MySQL 连接中分别读取节点和副本状态;多复制通道需按实际通道核对。口令不放进命令参数或交接单。
SELECT @@server_uuid, @@read_only, @@super_read_only;
SELECT @@GLOBAL.gtid_executed;
SHOW REPLICA STATUS;接收线程失败优先看源连接及 Last_IO_Error,应用线程失败看 Last_SQL_Error 与失败事务。Seconds_Behind_Source 为零不保证副本已追到真实源端,NULL 也不能解释为无延迟,见 MySQL 副本状态说明。禁止跳过错误事务来换取“复制正常”;候选 GTID 与业务流水需由负责人核对。
PostgreSQL:角色、WAL 与协调证据
以下 SQL 分别在已确认身份的节点执行。主库查询复制连接,副本查询接收和重放位置,不把空结果直接解释成系统健康。
SELECT pg_is_in_recovery();
-- 主库连接
SELECT application_name, state, sync_state, sent_lsn, replay_lsn
FROM pg_stat_replication;
-- 副本连接
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();这些位置应结合时间线、采样时间和当前拓扑解释;复制连接字段见 PostgreSQL 17 统计视图,位点函数见恢复信息函数。Patroni 领导信息、etcd 多数和 HAProxy 路由要相互核对。旧主可能因进程卡死未及时降级,watchdog 的作用与限制见官方隔离说明,不能仅凭租约变化批准提升。
Redis:复制角色与 Sentinel 分歧
在已认证的数据节点会话读取下例;Sentinel 会话中的查询必须指向本实验监控名称,不能在其他拓扑复用。
INFO replication
ROLESENTINEL MASTER <MONITORED_MASTER_NAME>
SENTINEL REPLICAS <MONITORED_MASTER_NAME>
SENTINEL CKQUORUM <MONITORED_MASTER_NAME>比较各 Sentinel 观察的主地址与客户端实际连接。CKQUORUM 用于检查仲裁及故障转移所需多数条件,不证明副本包含全部已确认写入。Sentinel 的选举条件与异步复制风险见 Redis Sentinel 设计;复制状态字段见 INFO 文档。
高风险动作与恢复验收
提升、入口切换、复制重配置、解除隔离及副本重建都必须单独批准,并写明旧主隔离证据、候选依据、可接受丢失范围和中止条件。发现未知直连或隔离无法验证时保持冻结;禁止强制提升、降低仲裁绕过问题,或覆盖数据目录销毁分叉证据。
新主已有写入后不能简单“切回旧地址”。先核对确认成功、明确失败和结果不明三类业务请求,处理重复重试风险,再把旧主按权威数据重同步为副本。恢复验收分别记录写入恢复、客户端稳定、冗余恢复和独立备份恢复结果;连接成功不能代替一致性证明,详见实验验收。
分拓扑交接模板
状态:PENDING / 角色争议 / 恢复中 / 已验收(附证据)
独立拓扑、节点身份、当前权威裁决人:待填写
故障时间、最后确认事务、角色与复制证据:待填写
旧主 fencing 方法、验证时间、遗留写入口:待填写
批准动作、候选依据、争议数据保全位置:待填写
确认成功/失败/不明请求的核对结果:待填写
实测 RPO/RTO、冗余及备份恢复缺口:待填写
接班人、下次检查、禁止动作与升级联系人:待填写每条实验单独签收,任何未做检查都保留 PENDING,不填写推测成绩。