0Pricing
Cloud & IT Cert Prep · 课时

有状态服务的多 AZ 模式

将多 AZ 应用于 RDS、ElastiCache、EFS 和 ELB,以消除一个 Region 内的单点故障

有状态服务的多 AZ 模式 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

有状态服务为何需要多 AZ

有状态服务——数据库、缓存和文件系统——是实现高可用最困难的组件,因为它们持有必须在故障后保留的数据。如果单 AZ 数据库发生故障,整个应用都会失去其数据存储。AWS 的解决方案是多 AZ 部署:服务在第二个可用区中维护一个同步或近乎同步的副本,当主实例发生故障时,该副本可以快速接管。

RDS Multi-AZ:同步备用实例

RDS Multi-AZ 会在不同的 AZ 中维护一个同步备用副本。主实例的每次写入都会先进行同步复制,然后才确认成功——这意味着零数据丢失(RPO=0),但写入延迟会略有增加。当主实例发生故障时,RDS 会在 60–120 秒内自动更新 DNS 端点,使其指向备用实例。您的应用只需重新连接到同一个端点,无需修改代码。

# Enable Multi-AZ on existing RDS instance
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --multi-az \
  --apply-immediately

# RDS endpoint stays the same after failover
# Application reconnects to same DNS name

Aurora Multi-AZ 架构

亚马逊 Aurora 通过共享分布式存储层进一步增强了 Multi-AZ,可在三个 AZ 中自动复制数据,共保存六份副本。Aurora 实例是无状态的——它们从这一共享存储中读取和写入数据。当 Aurora 主写入实例发生故障时,另一个 AZ 中的读取副本会在 30 秒内提升为写入实例。这比 RDS Multi-AZ 故障转移更快,而且无需显式的备用复制,数据始终能在各个 AZ 之间保持一致。

# Aurora cluster endpoint automatically handles failover
# Writer endpoint: mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# Reader endpoint: mydb.cluster-ro-xxx.us-east-1.rds.amazonaws.com

# Failover time: typically under 30 seconds

ElastiCache Multi-AZ 复制

ElastiCache for Redis 通过复制组支持 Multi-AZ。主节点接受写入,并以异步方式将数据复制到其他 AZ 中的读取副本。当主节点发生故障时,ElastiCache 会自动将某个副本提升为主节点。对于已启用集群模式的 Redis,数据会分片到多个节点组中,每个节点组都有自己的主节点和副本,并分布在各个 AZ 中——这同时提供了 HA 和水平扩展能力。

# Create Redis replication group with Multi-AZ
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --replication-group-description 'Multi-AZ Redis' \
  --num-cache-clusters 3 \
  --cache-node-type cache.r6g.large \
  --multi-az-enabled \
  --automatic-failover-enabled

EFS:天生支持 Multi-AZ

亚马逊 Elastic File System(EFS) 天生支持 Multi-AZ——它是一项区域级服务,会在一个区域内的多个 AZ 中冗余存储数据。您可以在每个 AZ 的子网中创建挂载目标,任何 AZ 中的 EC2 实例都可以通过本地挂载目标挂载文件系统。无需手动配置 Multi-AZ。EFS 提供共享 POSIX 文件存储,多个 AZ 中的实例可以同时访问这些存储。

# Mount EFS from EC2 in any AZ
# Mount target is created per AZ automatically
sudo mount -t efs -o tls fs-12345678:/ /mnt/efs

# Or use EFS mount helper
sudo mount -t efs fs-12345678 /mnt/efs

Elastic Load Balancer 跨区域

Elastic Load Balancer 本身支持 Multi-AZ——ALB 和 NLB 会在您指定的每个 AZ 中部署负载均衡器节点。启用跨区域负载均衡后(ALB 默认启用),每个负载均衡器节点都会将流量均匀分配到所有 AZ 中注册的目标,而不仅是自身所在 AZ 的目标。这样,即使某个 AZ 中的所有实例都发生故障,负载均衡器仍可通过其余 AZ 中的实例继续提供流量。

# ALB automatically created in multiple AZs
aws elbv2 create-load-balancer \
  --name my-alb \
  --subnets subnet-AZ1 subnet-AZ2 subnet-AZ3 \
  --security-groups sg-12345

# Cross-zone load balancing is ON by default for ALB

NAT Gateway Multi-AZ 模式

一种常见错误是只在一个 AZ 中部署单个 NAT Gateway,而其他 AZ 中的私有子网都通过它进行路由。如果该 AZ 发生故障,所有私有实例都会失去互联网访问能力。正确的 Multi-AZ 模式是每个 AZ 部署一个 NAT Gateway,并将每个 AZ 的私有路由表配置为通过自身的 NAT Gateway 路由 0.0.0.0/0。这样可以消除 NAT Gateway 这一跨 AZ SPOF,并降低跨 AZ 数据传输成本。

# Create NAT Gateway in each AZ
aws ec2 create-nat-gateway \
  --subnet-id subnet-public-AZ1 \
  --allocation-id eipalloc-AZ1

aws ec2 create-nat-gateway \
  --subnet-id subnet-public-AZ2 \
  --allocation-id eipalloc-AZ2

# Each AZ's private route table points to its own NAT GW

DynamoDB 默认支持 Multi-AZ

DynamoDB 是一项完全托管的服务,会自动在一个区域内的三个 AZ 之间复制数据——您无需手动配置 Multi-AZ。每次写入都会在三个 AZ 中全部持久存储后,系统才会返回成功。DynamoDB 开箱即用地实现了 AZ 级容错。这就是为什么在考试题强调以最低运维负担实现高可用性时,DynamoDB 通常是推荐的数据库选择。

RDS Proxy 实现更快的连接处理

在 RDS Multi-AZ 故障转移期间,维护持久数据库连接的应用可能会因 Endpoint 发生变化而遇到故障。RDS Proxy 位于应用与 RDS 之间,负责维护数据库连接池。发生故障转移时,RDS Proxy 会自动将连接重新路由到新的主实例——对于使用代理 Endpoint 的应用,可将故障转移影响从 60–120 秒缩短到不到 30 秒。RDS Proxy 也有助于处理会创建大量短生命周期连接的 Lambda 函数。

# Application connects to RDS Proxy endpoint
# Proxy endpoint: myproxy.proxy-xxx.us-east-1.rds.amazonaws.com

# RDS Proxy handles:
# - Connection pooling
# - Failover routing
# - IAM authentication
# - Secrets Manager integration

数据复制模式:同步与异步

理解复制模式对于选择 Multi-AZ 模式至关重要。同步复制(RDS Multi-AZ、EFS)可确保 RPO=0,因为每次写入都必须在两个 AZ 中确认完成后才会返回成功。代价是写入延迟略有增加。异步复制(ElastiCache Redis 副本、RDS Read Replicas)具有更低的写入延迟,但会接受少量复制延迟——这意味着如果主实例在复制完成前发生故障,部分数据可能会丢失。

# Synchronous replication: RPO = 0, higher write latency
# Used by: RDS Multi-AZ, Aurora storage layer

# Asynchronous replication: RPO > 0 (replication lag)
# Used by: RDS Read Replicas, ElastiCache Redis replicas
# Replication lag can be monitored:
# aws cloudwatch get-metric-statistics \
#   --namespace AWS/RDS --metric-name ReplicaLag

测试 Multi-AZ 故障转移

您应定期测试 Multi-AZ 故障转移,以验证对 RTO 的预期。对于 RDS,您可以使用控制台中的使用故障转移重新启动选项或 CLI 来触发故障转移。请在 CloudWatch 中监控 FailedSQLServerAgentJobsCount 指标,并查看应用日志以确认应用已成功重新连接。请记录实际的故障转移持续时间——具体时长可能因您的实例类别和工作负载而与 AWS 文档不同。

# Trigger RDS Multi-AZ failover test
aws rds reboot-db-instance \
  --db-instance-identifier mydb \
  --force-failover

# Monitor failover in CloudWatch
aws cloudwatch get-metric-statistics \
  --namespace AWS/RDS \
  --metric-name DatabaseConnections \
  --dimensions Name=DBInstanceIdentifier,Value=mydb

快速检查

测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。

课程回顾

本课中您学到了:RDS Multi-AZ 使用同步复制和自动 DNS 故障转移,Aurora 使用跨三个 AZ 的共享存储层来实现更快的故障转移,并且EFS 和 DynamoDB 天生支持 Multi-AZ,无需手动配置。请在每个 AZ 中部署一个 NAT Gateway,以避免跨 AZ SPOF。接下来我们将探讨多区域主动-主动和主动-被动模式。

常见问题解答

「有状态服务的多 AZ 模式」课时是免费的吗?

是的 — 「有状态服务的多 AZ 模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「有状态服务的多 AZ 模式」这节课中我会学到什么?

将多 AZ 应用于 RDS、ElastiCache、EFS 和 ELB,以消除一个 Region 内的单点故障 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「有状态服务的多 AZ 模式」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. HA 与容错:定义与权衡
  2. 有状态服务的多 AZ 模式
  3. 多 Region 主动-主动与主动-被动
  4. 运行状况检查、断路器与重试逻辑
← 返回 Cloud & IT Cert Prep