文章详情

亚马逊云账号出售 AWS 故障转移机制详解:关键业务连续性配置实践与故障切换操作指南

亚马逊aws2026-10-21 15:53:10阿里云Online

很多用户搜索“AWS 故障转移机制”时,并不是想看抽象架构图,而是已经遇到或即将遇到下面几类决策问题:单台 EC2 宕机后网站多久恢复;一个可用区异常时业务是否自动切换;数据库主实例故障后应用是否要改连接串;是否需要做跨区域容灾;Route 53、ALB、Auto Scaling、RDS Multi-AZ 应该怎么组合;切换后为什么服务仍然不可用。

如果你的目标是提升关键业务连续性,核心不是把所有组件都做“双活”,而是先明确故障面,再把最容易中断业务的环节按优先级补齐:入口解析、应用计算层、会话层、数据库层、备份恢复链路。下面直接进入操作和决策重点。

先判断你该做哪一类 AWS 故障转移

亚马逊云账号出售 用户最常卡住的不是“怎么点控制台”,而是“不知道该选哪种故障转移层级”。可以先按业务中断风险来选。

场景推荐机制恢复目标常见误区
单台 Web 服务器宕机ALB + Auto Scaling 跨多个可用区分钟级自动替换实例只做快照,不做自动扩容
单可用区异常多可用区子网 + ALB + RDS Multi-AZ应用层自动绕过异常节点EC2 跨 AZ 了,但数据库仍单点
整区域故障Route 53 故障转移 + 跨区域部署DNS 切换到备用区域只复制数据,未预建可接流量的应用栈
数据库主库故障RDS Multi-AZ / Aurora 故障切换连接端短暂重连后恢复应用连接池未设置自动重连
缓存节点故障ElastiCache Multi-AZ with Auto Failover降低缓存层中断时间把 Redis 当持久主库使用

如果你现在只有一个区域、一个可用区、一个实例,优先顺序建议是:先做多可用区高可用,再做跨区域容灾。因为多数生产故障先发生在实例、磁盘、配置、应用发布和单区资源异常,而不是整区域完全中断。

开始配置前要准备什么

账号与权限

至少需要以下 IAM 权限,否则你会在配置过程中卡在创建健康检查、修改记录集或启用数据库高可用这类步骤:

  • Route 53:修改 Hosted Zone、创建 Health Check
  • EC2:创建实例、修改安全组、创建 AMI、配置 Auto Scaling
  • Elastic Load Balancing:创建 Target Group、ALB、修改健康检查
  • RDS:创建或修改 Multi-AZ、创建只读副本、参数组和子网组管理
  • CloudWatch:查看指标和告警

所需资源与前置条件

项目是否必须说明
已备案或可管理 DNS 的域名建议做 Route 53 故障转移时必须有 DNS 控制权
至少两个可用区子网强烈建议ALB、RDS Multi-AZ、Auto Scaling 都依赖多 AZ
统一镜像或启动模板必须否则实例替换后环境不一致
应用健康检查接口必须不要只检查 200,要检查关键依赖
数据库备份与恢复策略必须故障转移不能替代备份

建议提前准备一个健康检查 URL,例如 /healthz。这个接口不要只返回“进程还活着”,而应至少检查 Web 线程池、数据库连接是否可用、磁盘是否只读、核心依赖是否异常。

操作路径一:为网站应用配置 AWS 故障转移

这是最常见的场景:前端网站、管理后台、API 服务部署在 EC2,需要避免单机故障导致服务中断。

步骤1:创建跨可用区的基础网络与实例模板

进入 AWS 控制台,打开 VPC,确认你在同一区域内至少有两个不同可用区的私有子网和公有子网。如果还没有,创建 VPC 时建议为每个 AZ 各配一组子网,便于 ALB 放公有子网、应用实例放私有子网。

随后进入 EC2,创建启动模板:

  • AMI:选择已经完成业务环境初始化的 Linux 或 Windows 镜像
  • 亚马逊云账号出售 实例类型:小型站点可从 t3.small 或 t3.medium 起步;Java、Node、Python API 生产建议至少 2 vCPU / 4GB
  • 存储:系统盘 gp3 建议 40GB 起步;日志较多的应用建议独立数据盘
  • 安全组:允许来自 ALB 安全组的 80/443 或应用端口,不要直接对全网开放应用端口
  • IAM Role:如需访问 S3、CloudWatch、SSM,提前绑定角色

注意事项:不要在 Auto Scaling 场景下依赖手工登录后再部署应用。正确做法是使用用户数据脚本、镜像固化或启动时拉取部署包。

步骤2:创建 ALB 与目标组,配置健康检查

进入 EC2 控制台的 Load Balancers,创建 Application Load Balancer。

  • Scheme:面向公网访问选择 Internet-facing;内网服务选择 Internal
  • 监听端口:HTTP 80 或 HTTPS 443
  • 可用区:勾选至少两个 AZ 的公有子网
  • 安全组:开放 80/443 给业务来源 IP 或全网访问

然后创建 Target Group,目标类型选 Instance 或 IP。健康检查参数建议如下:

参数建议值说明
ProtocolHTTP/HTTPS优先与实际业务协议一致
Path/healthz不要用首页代替
Healthy threshold2-3避免瞬时抖动误判
Unhealthy threshold2加快故障摘除
Timeout5 秒接口慢时适当提高
Interval15-30 秒平衡切换速度与探测频率

很多“故障转移失败”其实是健康检查配置不合理:例如应用首页依赖数据库,数据库慢时被整体判定失败;或者健康检查 URL 需要登录,导致所有实例一直 Unhealthy。

步骤3:创建 Auto Scaling 组,实现实例自动替换

进入 Auto Scaling Groups,基于刚才的启动模板创建组。

  • VPC 子网:选择两个及以上可用区的私有子网
  • Desired capacity:建议至少 2 台,避免单实例风险
  • Minimum capacity:生产建议不低于 2
  • Maximum capacity:按流量峰值预留,比如 4 或 6
  • Load balancing:附加到上一步的 ALB Target Group
  • Health check type:选择 ELB,并设置 Grace period,例如 180-300 秒

如果你的应用启动较慢,如 Java 首次预热需 3 分钟,Health check grace period 太短会导致实例还没启动完就被判故障并反复替换。

步骤4:用 Route 53 做入口层故障转移

如果你只是防单机故障,ALB + Auto Scaling 已经足够;如果你还要防整套站点不可用,下一步是通过 Route 53 做 DNS 层切换。

进入 Route 53:

  • 创建 Hosted Zone,并将域名 NS 切到 Route 53
  • 创建主记录,例如 app.example.com 指向主站 ALB
  • Routing policy 选择 Failover
  • Set ID 填主站标识,如 primary-ap-southeast-1
  • Failover record type 选择 Primary
  • Associate Health Check:绑定健康检查

再创建一个同名备用记录:

  • 目标指向备用区域的 ALB 或备用站点 EIP
  • Failover record type 选择 Secondary
  • TTL 建议 30-60 秒

这里最关键的是健康检查目标。若主站使用 ALB,建议 Route 53 健康检查打到一个独立探测域名或业务检测路径,而不是仅检测根域名首页。因为首页可能被 CDN 缓存,DNS 不会及时感知应用实际故障。

操作路径二:数据库故障转移如何配置才不会切换后仍报错

很多业务中断不是 Web 层挂了,而是数据库切换后应用连不上。用户真正关心的是:RDS Multi-AZ 开了以后,应用要改什么,如何验证。

步骤1:创建或修改 RDS 为 Multi-AZ

进入 RDS 控制台,新建数据库实例时,在 Availability & durability 位置启用 Multi-AZ deployment。若已有实例,也可以 Modify 后开启。

参数建议说明
数据库类型MySQL/PostgreSQL 优先生态成熟,故障切换实践多
实例规格生产至少 2vCPU/8GB 起步切换时小规格更易放大抖动
存储gp3 或 io1/io2高 IO 业务优先预配 IOPS
备份保留7-14 天故障转移不等于可回溯恢复

启用 Multi-AZ 后,不要让应用连接底层实例地址,必须使用 RDS 提供的统一 Endpoint。否则主备切换后,应用仍旧指向旧地址。

亚马逊云账号出售 步骤2:检查数据库参数与连接设置

在实际生产中,最常见问题不是数据库没切过去,而是应用连接池不重连。你需要同步检查:

  • 连接池最大重试次数和重连间隔
  • DNS 缓存时间,尤其是 JVM 的 DNS 缓存配置
  • MySQL 驱动是否开启自动重连或 failover 参数
  • 应用是否把数据库连接长期驻留而不做失效处理

如果是 Java 应用,切换期间常见现象是旧连接未释放、线程池堆积,表现为数据库已恢复但应用接口仍超时。这时需要配合连接池超时缩短,例如连接验证、闲置连接回收、请求级重试。

步骤3:需要跨区域时,配置只读副本或备份恢复链路

亚马逊云账号出售 当你的目标是区域级容灾,仅做 Multi-AZ 不够,因为它仍在同一区域。可选方式有两类:

  • 跨区域只读副本:适合需要较快提升为主库的数据库业务
  • 跨区域自动备份复制:适合恢复优先级低于成本控制的业务

进入 RDS,选择源实例,创建 cross-Region read replica。备用区域中提前准备好应用服务器、安全组、子网组、参数组。否则数据库即使切过去,应用栈也接不了流量。

操作路径三:跨区域故障转移的最小可用落地方案

亚马逊云账号出售 不少团队一开始就想做“双活”,但预算、研发配合和数据一致性往往跟不上。更现实的做法是先做“主区域运行,备用区域预热待命”。

推荐最小方案

层级主区域备用区域切换方式
DNSRoute 53 PrimaryRoute 53 Secondary健康检查触发
应用ALB + ASG 2台起ALB + ASG 1台或最小容量DNS 切换后接流量
数据库RDS 主实例跨区域副本手动或预案提升为主
静态资源S3 主桶跨区域复制桶切换域名或源站

这个方案的优点是操作清晰,缺点是数据库提升和应用配置切换通常仍有人工动作,所以适合对 RTO 有要求但不追求秒级无感切换的业务。

切换演练建议

不要等故障发生时才第一次切。建议每季度至少演练一次,验证以下项目:

  • Route 53 健康检查是否能在预期时间内摘除主站
  • 备用区域 ALB、目标组、证书、WAF 是否都已准备
  • 数据库提升为主库后,应用连接串、Secrets、参数是否同步
  • 后台任务、消息队列消费者是否会在双区域重复执行

一个常见错误案例:主站故障后 DNS 已切到备用区域,但备用区域没有同步最新 SSL 证书,导致 HTTPS 报证书错误,业务表面上“切换成功”,用户仍无法访问。

不同业务的配置建议

个人开发者

预算有限时,不建议直接上跨区域全量容灾。可采用:

  • 单区域双 AZ
  • ALB + Auto Scaling 最小 2 台
  • RDS Multi-AZ 或定时快照
  • Route 53 可先不用故障转移,只保留低 TTL

适合中小网站、测试到生产过渡阶段。

企业用户

亚马逊云账号出售 建议把故障转移拆成两层:

  • 层1:区域内高可用,保障日常故障
  • 层2:跨区域容灾,保障严重故障

至少应具备:多 AZ 计算层、RDS Multi-AZ、集中日志、CloudWatch 告警、演练手册。

跨境业务

优先考虑用户所在地区与数据库写入路径。若访问分布在多个国家,不要简单把故障转移等同于“选最远备份区”。应先做延迟测试,再决定主备区域组合,并注意 Route 53 TTL 与本地 DNS 缓存带来的切换延迟。

网站应用

如果有登录态,不要把会话放本地内存。实例切换后会话丢失会被误判为“故障转移失败”。建议会话放 Redis、数据库或使用无状态 JWT,并配合共享存储或对象存储处理上传文件。

数据库业务

写多读多的场景要重点控制故障切换后的连接风暴。建议在应用层限制重试速率,避免数据库刚切换完成就被瞬时连接打满。

常见问题排查

DNS 已切换,为什么用户仍访问旧站点

通常是 TTL、客户端本地 DNS 缓存、运营商缓存或浏览器缓存导致。解决方法:

  • 故障转移记录 TTL 控制在 30-60 秒
  • 在应用侧准备维护页,避免缓存期间出现完全不可用
  • 排查是否 CNAME 链路上还有更长 TTL 的上游记录

ALB 健康检查失败,但实例里服务明明正常

重点排查:

  • 安全组是否允许 ALB 到实例端口
  • 健康检查路径是否返回 200-399
  • 亚马逊云账号出售 实例是否绑定错误端口
  • 应用启动慢,Grace period 太短

RDS 已切换,应用仍然报 MySQL 连接失败

多半是连接池、驱动、DNS 缓存或安全组问题。确认应用使用的是 RDS Endpoint,而不是底层 IP;确认安全组入站放行应用子网或应用安全组;确认连接池的失效连接能及时剔除。

切换后网站可以打开,但用户登录状态丢失

这是典型的会话设计问题,不是 AWS 切换机制本身的问题。把 Session 放本地文件或本地内存的应用,在实例替换或跨区域切换后会失效。应改为集中式会话存储。

跨区域容灾恢复时间比预期长很多

常见原因包括:备用区域实例未预热、镜像拉取慢、数据库提升步骤依赖人工、DNS TTL 过高、证书和密钥未同步。要缩短恢复时间,必须减少人工干预和环境临时创建动作。

优化故障转移效果的四类建议

安全优化

  • 应用实例尽量放私有子网,通过 ALB 暴露入口
  • 安全组使用“来源安全组引用”,不要大范围开放端口
  • 数据库禁止公网直连,运维通过堡垒机或 SSM Session Manager 进入
  • 跨区域复制的 Secrets、证书、KMS 权限提前验证

性能优化

  • 健康检查接口轻量化,避免把慢 SQL 放进去
  • 应用启动流程前置优化,减少 Auto Scaling 替换时间
  • 对外服务使用 gp3 并根据 IO 负载调优
  • 跨区域访问要实测延迟,不要只按地理距离判断

成本优化

  • 备用区域采用最小容量常驻,而非完全空置后临时拉起
  • 亚马逊云账号出售 测试环境不必全量复制生产级容灾
  • 日志与备份设置生命周期,避免长期存储膨胀
  • 按业务等级区分容灾层级,核心系统与非核心系统分开投入

稳定性优化

  • 每次发版后都验证健康检查路径是否仍有效
  • CloudWatch 为 ALB 5XX、Target Unhealthy、RDS Failover、CPU/内存异常建立告警
  • 将切换步骤写成 runbook,包括回切条件
  • 亚马逊云账号出售 至少季度演练一次,记录真实 RTO、RPO 和失败点

如果你当前正处于方案选型阶段,最实用的判断标准只有两个:第一,故障发生后多久必须恢复;第二,恢复时允许丢多少数据。先据此决定是做多 AZ、跨区域、数据库同步副本,还是备份恢复链路。不要一开始就追求复杂架构,先让 Route 53、ALB、Auto Scaling、RDS 的基础故障转移链路跑通,再逐步增加跨区域能力,通常才是 AWS 关键业务连续性最稳妥的落地方式。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系