多可用区部署是什么
可用区是同一区域内物理隔离的设施分组,各有独立的供电与网络。多可用区(Multi-AZ)部署把实例与数据副本分布到至少两个 AZ:单 AZ 发生电力或网络故障时,仍在正常 AZ 的服务可以继续提供访问,数据库通常自动切换到备用 AZ,应用仍使用同一个连接地址。
基本信息
| 适用平台 | AWS 各托管服务、阿里云多可用区部署、自建机房的双机房模式思路相通 |
|---|---|
| 典型收益 | 单 AZ 故障自动切换,数据库场景常见 RTO 为分钟级 |
| 代价 | 资源成本上浮(通常多一份备用资源),跨 AZ 调用时延略增 |
| 连接方式 | 托管数据库一般提供统一 endpoint,切换由平台完成,应用无需改配置 |
典型使用场景
- 托管数据库高可用:主实例故障时自动切换到备用 AZ 的副本
- 无状态应用多 AZ 分布:配合负载均衡,单 AZ 故障时流量自动摘除
- 缓存与消息队列:多 AZ 部署避免单设施故障造成全链路不可用
- 负载均衡与网关:跨 AZ 部署实例,避免入口单点
- 合规与可用性要求:把『不依赖单一机房』作为架构设计的基本项
AWS RDS 多可用区(示意)
AWS RDS 多可用区(示意)
# 创建时开启多可用区,指定主可用区
aws rds create-db-instance --db-instance-identifier appdb \
--multi-az --availability-zone ap-northeast-1a \
--engine mysql --db-instance-class db.m6g.large
# 故障时自动 failover 到备用 AZ,应用仍使用同一个 endpoint
# 为已有实例改为多可用区部署(会触发一次切换与短暂不可用)
aws rds modify-db-instance --db-instance-identifier appdb \
--multi-az --apply-immediately
# 查看当前可用区与多可用区状态
aws rds describe-db-instances --db-instance-identifier appdb \
--query 'DBInstances[0].{AZ:AvailabilityZone,MultiAZ:MultiAZ,Status:DBInstanceStatus}'故障域层级对照
| 层级 | 典型故障 | 防护手段 |
|---|---|---|
| 单机/单实例 | 硬件损坏、进程崩溃 | 实例级高可用与自动重启 |
| 单可用区 | 机房供电、网络故障 | 多可用区部署,跨 AZ 副本与切换 |
| 单区域 | 地震、区域级网络中断 | 跨区域部署与异地容灾 |
| 应用侧 | 连接地址写死、会话未外置 | 统一域名与连接池重连,会话外置 |
多可用区解决的是单机房级故障;区域级故障(地震、区域网络中断)仍需跨区域部署,两者是不同层级的防护,不能互相替代。
自动切换只保证数据库侧可用:应用、缓存、消息中间件如果仍集中在单一 AZ,故障时整条链路依旧不可用,架构盘点时要逐个组件确认。