故障转移故障排查手册:常见报错一站式解决

2026-10-24 来源: 点击量

故障转移故障排查手册:常见报错一站式解决

故障转移(Failover)涉及的组件很多,但排查思路其实高度一致:先确认“是否真的触发了故障转移”,再定位“触发原因”,最后验证“切换后是否可用”。下面按通用排查流程 + 高频组件报错整理,适合做运维手册直接复用。故障转移故障排查手册:常见报错一站式解决

一、通用排查流程:先定时间,再定原因

1. 先锁定故障时间窗口

不要一上来翻日志,先看监控、告警、业务报错时间点。重点确认:

故障转移是否真实发生

主节点/主副本是否真的不可用

切换发生在哪个时间点

切换后业务是否恢复

是否出现脑裂、双写、数据回滚

2. 按四层日志定位

系统层:dmesg、/var/log/messages、syslog、Windows 事件日志,看 OOM、磁盘错误、网络中断、CPU/内存异常。

应用层:数据库、缓存、中间件 error.log,看连接失败、复制中断、健康检查超时。

集群层:Failover Cluster、Sentinel、Orchestrator、K8s Controller 日志,看选举、切换、资源迁移记录。

网络/存储层:心跳网络、VIP、防火墙、共享存储、PV/PVC,看连通性和存储读写是否正常。

3. 常用关键字

日志里优先搜:

bash

编辑

failover

fail

timeout

refused

denied

CLUSTERDOWN

RESOLVING

NOT SYNCHRONIZING

IsAlive has indicated failure

Online for resource failed

OOMKilled

ExitCode 137

二、Redis Cluster / Sentinel 常见报错

1. CLUSTERDOWN The cluster is down

现象:所有读写都返回 CLUSTERDOWN。

排查:

bash

编辑

redis-cli -h-p 6379 cluster info

redis-cli -h-p 6379 cluster nodes | grep fail

重点看:

cluster_state:fail

cluster_slots_ok 是否等于 16384

cluster_slots_fail 是否大于 0

常见原因:

有 slot 无主节点

超过半数 master 不可用

节点被误判下线后未恢复

处理:

先恢复失联节点或补新节点

使用 redis-cli --cluster fix 修复 slot

必要时在从节点执行 CLUSTER FAILOVER

生产环境谨慎使用 CLUSTER RESET,它会清空节点数据

2. 主从切换失败 / Slave 未自动晋升

现象:master 宕机,但 slave 没有接管。

排查:

bash

编辑

redis-cli config get cluster-node-timeout

redis-cli config get cluster-slave-validity-factor

grep -E "failover|FAIL|timeout" redis.log

常见原因:

cluster-node-timeout 过大,故障检测慢

slave 数据落后太多,被认为不适合晋升

slave 自身网络隔离或负载过高

Sentinel 未达成多数派共识

处理:

内网环境可将 cluster-node-timeout 适当调小

检查 cluster-slave-validity-factor,避免过严

在目标 slave 上执行 CLUSTER FAILOVER 手动切换

Sentinel 场景需保证至少 3 个 Sentinel,避免脑裂

3. 节点失联 / PFAIL / FAIL

现象:cluster nodes 中出现 fail 或 disconnected。

排查:

bash

编辑

redis-cli -h-p 6379 cluster nodes

redis-cli -h-p 6379 ping

telnet6379

常见原因:

网络分区

防火墙阻断集群总线端口

节点 OOM 或进程崩溃

DNS/路由异常

处理:

先恢复网络连通性

检查防火墙是否开放 Redis 端口和集群总线端口

节点恢复后观察是否自动重新加入

若发生脑裂,优先保留多数派数据,少数派重新以 slave 加入

4. MOVED / ASK 重定向异常

现象:客户端频繁收到 MOVED 或 ASK,部分请求失败。

排查:

客户端是否支持 Cluster 模式

是否缓存了过期 slot 映射

是否正在 reshard 或迁移 slot

处理:

使用支持 Cluster 的客户端

检查 cluster slots 是否稳定

避免在业务高峰执行 reshard

三、SQL Server AlwaysOn / Windows 故障转移集群

1. 自动故障转移失败,副本处于 RESOLVING

现象:SSMS 显示副本为 RESOLVING,数据库显示 NOT SYNCHRONIZING,应用报错 983。

排查:

powershell

编辑

Get-ClusterLog -Node <节点名> -TimeSpan 15

在 Cluster.log 中搜索:

text

编辑

failoverCount

Online for resource failed

IsAlive sanity check failed

Group move

Move of group

常见原因:

指定时间段内故障次数超过阈值

健康检查超时

租约超时

节点网络隔离

共享存储或 CSV 异常

处理:

检查 failoverCount 是否超过 computedFailoverThreshold

不要盲目调大“指定期间最大失败数”,先找到根因

检查 AlwaysOn 健康检查是否正常

检查 SQL Server 错误日志和 Windows 事件日志

2. 事件 ID 1069 / 1146 / 1230

这些是 Windows 故障转移集群常见事件 ID,通常表示资源失败、角色迁移或集群异常。

排查:

打开系统事件日志,筛选来源 Microsoft-Windows-FailoverClustering

对比系统日志时间与 Cluster.log 的 GMT 时间

搜索 The current time is 快速对齐时区

查看资源是否成功在目标节点上线

3. Online for resource failed

现象:资源迁移到新节点后无法上线。

常见原因:

依赖资源未就绪

共享存储不可访问

网络名称/IP 资源冲突

权限不足

应用本身启动失败

处理:

检查资源依赖链

检查 CSV/共享磁盘状态

检查集群服务账户权限

在目标节点手动尝试上线资源并观察报错

四、Kubernetes 场景常见报错

1. Pod CrashLoopBackOff

排查:

bash

编辑

kubectl describe pod

kubectl logs--previous

重点关注:

ExitCode 137:通常是被 OOMKilled

ExitCode 1:应用启动失败

配置错误、依赖服务不可用

启动探针/就绪探针失败

2. OOMKilled

现象:Pod 被杀死,Last State Reason 为 OOMKilled。

处理:

适当调高 resources.limits.memory

检查应用是否存在内存泄漏

Java 应用检查 -Xmx 与容器内存限制是否匹配

避免容器内存限制小于 JVM 堆内存

3. Pending

常见原因:

节点资源不足

PVC 未绑定

节点亲和性/污点不匹配

镜像拉取失败

排查:

bash

编辑

kubectl describe pod| grep -A 20 Events

kubectl get pvc

kubectl top nodes

4. Redis on K8s 集群配置损坏

现象:日志出现 corrupted cluster config file。

处理:

从集群中移除故障节点

清理损坏的 nodes.conf 和数据目录

重建 Pod 后重新加入集群

检查 PV/PVC 和存储健康状态

五、云灾备 / ASR 故障转移常见报错

1. 虚拟机故障转移到云失败

常见原因:

订阅配额不足

可用性集内虚拟机规格族不一致

订阅策略阻止创建虚拟机

网卡配额不足

前一次测试故障转移未清理,IP 冲突

处理:

检查计算、网络、网卡配额

统一可用性集内虚拟机规格族

清理失败的测试故障转移资源

检查目标网络、子网、NSG、DNS 配置

2. 故障转移后无法 RDP/SSH

排查:

检查 VM 是否真正启动

检查启动诊断日志

检查网卡是否绑定公网 IP 或私有网络是否可达

检查 NSG/安全组是否放行端口

域加入虚拟机需确认域控制器可用

六、快速排查命令速查

bash

编辑

# Redis

redis-cli cluster info

redis-cli cluster nodes

redis-cli config get cluster-node-timeout

redis-cli --cluster fix:

# K8s

kubectl describe pod

kubectl logs--previous

kubectl get pvc,pv

kubectl top nodes

# Linux 系统

dmesg -T | tail -100

journalctl --since "30 minutes ago"

grep -i "oom" /var/log/messages

# Windows 集群

Get-ClusterLog -Node <节点> -TimeSpan 15

Get-EventLog -LogName System -Source Microsoft-Windows-FailoverClustering

七、预防建议

每个 master 至少配一个 slave,并分散在不同可用区

关闭不必要的自动故障转移阈值告警,但保留根因告警

定期演练故障转移,验证切换时间和数据一致性

对 Redis 开启 min-replicas-to-write 等保护参数,降低脑裂风险

对 AlwaysOn 定期检查健康检查、复制延迟和故障转移历史

对 K8s 工作负载设置合理的 requests/limits 和探针参数

相关文章
  • 故障转移故障排查手册:常见报错一站式解决
    故障转移故障排查手册:常见报错一站式解决

    故障转移故障排查手册:常见报错一站式解决故障转移(Failover)涉及的组件很多,但排查思路其实高度一致:先确认“是否真的触发了故障转移”,再定位“触发原因”,最后验证“切换后是否可用”。下面按通用排查流程 + 高频组件报错整理,适合做运维手册直接复...

  • 一文掌握内核参数入门教程,效率提升300%
    一文掌握内核参数入门教程,效率提升300%

    一文掌握内核参数入门教程,效率提升 300%说明:不是随便调参数就能凭空涨 3 倍性能,标题是圈内常见宣传口径;真实收益是:消除内核瓶颈、避免 OOM、软中断飙高、连接丢包、文件句柄耗尽这类隐性卡点,业务在高并发下不再被操作系统拖后腿。适合 Linux 服务器...

  • 2026年ELK监控教程最新教程,运维必收藏
    2026年ELK监控教程最新教程,运维必收藏

    2026 ELK(Elastic Stack)监控最新教程|运维必收藏版本基线:Elastic Stack 9.4 / 9.5,2026 主流;ELK 现在官方叫 Elastic Observability,不再只是日志,是日志 + 指标 + 链路统一可观测平台;架构重心从 Logstash 转向 Elastic Agent + Fleet + OTel 原生支持Elastic 适用:主机监控、容器 / K8s、微服...

  • 【实战】Fluentd源码,一步步带你搞定
    【实战】Fluentd源码,一步步带你搞定

    【实战】Fluentd 源码:一步步搞定核心链路Fluentd 看起来是“配置一个 fluent.conf 就能跑”的日志采集器,但真正要解决生产问题,必须看懂它的事件流转、插件加载、缓冲刷新和多 Worker 模型。当前主流稳定发行版是 fluent-package,td-agent 已停止维护。一、先看整体:F...

  • 为什么推荐Cron优缺点?深度对比与实测
    为什么推荐Cron优缺点?深度对比与实测

    为什么推荐 Cron 优缺点?深度对比与实测Cron 是 Linux 类系统内置定时任务工具,运维后端开发几乎都会用到,用来定时执行脚本 清理日志 数据同步 报表推送 巡检任务。不用额外部署服务,开箱即用,但是复杂调度场景也有明显短板,下面结合实测拆解优缺点,同时...

  • 深度VPN避坑指南:生产环境常见问题汇总
    深度VPN避坑指南:生产环境常见问题汇总

    关于VPN的使用,需要提醒你注意合规性问题。未经相关主管部门批准,私自使用、搭建、传播跨境网络访问工具属于违规行为。 无论是个人还是企业,都不能随意搭建或使用未经审批的VPN进行跨境网络访问。如果你有合法的企业组网需求跨国企业、分支机构互联等场...