4. 跨区域DNS与流量路由

在多区域高可用架构中,DNS 不再只是“把域名解析成 IP”的静态映射,而是承担流量调度、故障切换和就近接入的第一道控制面。Amazon Route 53 通过托管区域(Hosted Zone)、记录集(Record Set)和路由策略,把用户请求引导到不同区域的入口(ALB、NLB、CloudFront、API Gateway 或自建入口)。理解各策略的判定依据与适用边界,是设计跨区域容灾的关键。

六种路由策略的判定逻辑

Route 53 的路由策略决定了“同一个域名返回哪条记录”。它们并非互斥,而是可以组合使用,例如“故障转移 + 延迟”或“地理位置 + 加权”。

  • 简单路由(Simple):一条记录对应一个或多个值,返回全部值,由客户端随机选择。不支持健康检查,适合单区域或无需调度的场景。
  • 加权路由(Weighted):为每条记录分配 0–255 的权重,按权重比例分流。权重为 0 表示不接收流量(除非全部为 0)。常用于灰度发布、A/B 测试、蓝绿切换。
  • 延迟路由(Latency):基于 AWS 测量的“用户到各区域”的网络延迟,返回延迟最低区域的记录。适合多区域主动-主动部署,追求性能最优。
  • 故障转移路由(Failover):配置 PRIMARY 和 SECONDARY 两条记录,主记录健康时返回主,不健康时返回备。是跨区域容灾最直接的策略。
  • 地理位置路由(Geolocation):按用户所在国家/大陆/美国州返回对应记录,可设置默认记录兜底。适合数据主权、合规、本地化内容。
  • 地理邻近路由(Geoproximity):按用户与资源的地理距离返回记录,并可通过 Bias(-99 到 +99)扩大或缩小某区域的吸引范围。适合需要精细调整流量分布的场景。
  • 多值答案路由(Multivalue Answer):返回最多 8 条健康记录,客户端随机选择,相当于“带健康检查的简单路由”,提供客户端侧负载均衡。

选择策略时先问三个问题:是否需要故障切换?是否需要按性能或位置分流?是否需要按比例控制流量?答案决定了策略组合。

健康检查:让 DNS 具备“感知故障”的能力

除简单路由外,多数策略都可绑定健康检查。Route 53 健康检查从全球多个检查点发起,支持三种类型:

  • 端点健康检查:对指定 IP/域名和端口发起 HTTP/HTTPS/TCP 探测,可匹配状态码和响应体关键字。
  • 计算健康检查:聚合多个健康检查的状态,用布尔逻辑(AND/OR/NOT)判断,适合多条件组合。
  • CloudWatch 告警健康检查:把 CloudWatch 告警状态映射为健康状态,可接入自定义指标。

关键参数包括:请求间隔(30 秒标准 / 10 秒快速)、失败阈值(默认 3 次)、成功阈值(默认 3 次)、超时时间。以 30 秒间隔、3 次失败阈值估算,故障被判定大约需要 90 秒,加上 DNS TTL 缓存,实际切换时间通常在 1–3 分钟。若要求更快,可启用快速健康检查(10 秒间隔),但费用更高。

健康检查本身不改变 DNS 记录,它只影响 Route 53 在应答时是否返回该记录。因此客户端和本地 DNS 的 TTL 缓存会直接影响切换速度,建议故障转移记录使用较短的 TTL(如 60 秒)。

私有托管区域与混合 DNS

私有托管区域(Private Hosted Zone)只对关联的 VPC 可见,用于内部服务发现,例如 db.internal.example.com 解析到 RDS 终端节点。它支持与公有区域同名,实现内外网分离解析。

混合 DNS 的核心是打通本地数据中心与 AWS 的解析链路。常见做法是:在本地 DNS(如 Windows DNS、BIND)上为 aws.example.com 配置条件转发器,转发到 Route 53 Resolver 的入站终端节点(Inbound Endpoint);同时在 Route 53 Resolver 上配置出站终端节点(Outbound Endpoint)和转发规则,把 corp.example.com 转发回本地 DNS。这样双向解析都能工作。

跨区域场景下,若多个 VPC 需要共享私有区域,可通过关联(Association)把同一私有托管区域关联到多个 VPC,或使用 Route 53 Profiles 集中管理。对于跨账号、跨区域的混合解析,Resolver 终端节点需部署在可路由的子网中,并确保安全组放行 53 端口。

策略组合与切换流程示例

假设业务部署在 us-east-1 和 eu-west-1,要求欧洲用户优先访问 eu-west-1,同时具备故障切换能力。可采用“延迟路由 + 故障转移”的组合:为每个区域创建延迟记录,并各自绑定健康检查;当 eu-west-1 不健康时,其记录被摘除,流量自动落到 us-east-1。若还需灰度,可在延迟记录之上叠加加权记录。

Route 53 跨区域流量路由与健康检查 用户请求 app.example.com Route 53 托管区域 延迟路由 + 故障转移 TTL = 60s 健康检查绑定 健康检查 间隔 30s 失败阈值 3 HTTP 200 匹配 us-east-1(主) ALB → 应用集群 健康状态:正常 延迟记录 · 权重 100 eu-west-1(备) ALB → 应用集群 健康状态:异常 延迟记录 · 权重 0(摘除) 正常返回 故障时摘除 故障切换判定过程 健康检查连续 3 次失败(约 90s)→ eu-west-1 记录被标记为不健康 → Route 53 停止返回该记录 客户端 TTL 缓存到期(60s)后重新查询 → 全部流量落到 us-east-1 → 总切换时间约 1–3 分钟

混合 DNS 的解析路径

在混合架构中,一条内部域名查询可能跨越本地和云上两套 DNS。以本地服务器访问 AWS 私有区域为例:本地服务器向本地 DNS 发起查询,本地 DNS 根据条件转发规则把请求发给 Route 53 Resolver 入站终端节点,Resolver 在关联的私有托管区域中查找记录并返回。反向路径则由 Resolver 出站终端节点把 corp.example.com 的查询转发回本地 DNS。

设计时需注意三点:一是转发规则要精确匹配域名后缀,避免把公网查询误转发;二是入站/出站终端节点需部署在两个可用区,保证自身高可用;三是安全组和网络 ACL 要放行 UDP/TCP 53。若使用 Direct Connect 或 VPN,还需确保路由表包含终端节点所在子网的路由。

参数选择与常见误区

策略判定依据是否支持健康检查典型场景
简单固定值否单区域入口
加权权重比例是灰度、蓝绿
延迟网络延迟是多区域主动-主动
故障转移主备健康状态是跨区域容灾
地理位置用户国家/大陆是合规、本地化
地理邻近地理距离 + Bias是精细流量调整
多值答案随机 + 健康过滤是客户端负载均衡
常见误区:把故障转移记录的主备都指向同一区域的同一负载均衡器,这样区域级故障时无法切换;或忘记为备用记录也绑定健康检查,导致备用不可用时仍被返回。另一个误区是 TTL 设置过长(如 3600 秒),使故障切换被 DNS 缓存拖慢。

综合来看,跨区域 DNS 设计的核心是:用健康检查赋予 DNS 故障感知能力,用合适的路由策略表达流量意图,用私有托管区域和 Resolver 终端节点打通混合解析。策略选择没有唯一答案,关键是让判定依据与业务目标一致,并用 TTL 和健康检查参数控制切换速度。