具有健康检查的 DNS 负载平衡

具有健康检查的 DNS 负载平衡

我这里有一个问题。

我们在来自云提供商的两个不同云区域上设置了计算实例,我不会提及,只是说使用起来很痛苦。

这些实例使用(显然)私有的。

我们不能使用基于 VIP 的负载平衡解决方案,因为该云提供商不允许跨区域私有 IP,因此 NLB 不在考虑范围内。

我们需要的是一台具有 A 记录健康检查功能的 DNS 服务器(实际上至少需要两台)。让我举个例子:

  1. 服务:
  • 服务器 A - 区域 1 - IP 10.1.1.100
  • 服务器 B - 区域 2 - IP 172.26.1.100
  1. DNS 平衡器(共享相同的记录和配置数据库):
  • DNS A - 区域 1 - IP 10.1.1.50
  • DNS B - 区域 2 - IP 172.26.1.50
  • DNS 记录 1:whatever.local - 10.1.1.50
  • DNS 记录 2:whatever.local - 172.26.1.50
  1. 客户:
  • 客户端 A – 任何区域 – 任何 IP
  1. 场景 A:
  • 客户端 A 将 DNS A 和 DNS B 都配置为 DNS 服务器。
  • 客户端 A 向 DNS 服务器 A 请求 whatever.local
  • 服务器A离线
  • DNS 服务器 A 具有后端健康检查并检测到它并使用服务器 B 的 IP(172.26.1.50)回复
  • TTL 设置为 0(零)或同样低的值以避免缓存。
  1. 场景 B:
  • 客户端 A 将 DNS A 和 DNS B 都配置为 DNS 服务器。
  • 客户端 A 请求 whatever.local,DNS 服务器 A 已关闭,因此 DNS 服务器 B 回复
  • 服务器B离线
  • DNS 服务器 B 具有后端健康检查并检测到它并使用服务器 A 的 IP(10.1.1.100)回复
  • TTL 设置为 0(零)或同样低的值以避免缓存。

本质上:检查 DNS 记录 IP 健康状况的 DNS 服务器。

问候。

答案1

客户端 A 将 DNS A 和 DNS B 都配置为 DNS 服务器。

呃,如果一台机器使用配置了不同分割数据的多个 DNS 服务器,那么你将面临巨大的麻烦。你确实需​​要在监控主机上构建自己的解析堆栈,才能获得可预测的行为。

监控此服务的方式无需拆分DNS:

service.example.com.  CNAME region1_service.example.com.
service.example.com.  CNAME region2_service.example.com.
region1_service.example.com. A 10.1.1.50
region2_service.example.com. A 172.26.1.50

并监控以下各项:

  • 服务.example.com
  • region1_service.example.com
  • region2_service.example.com

或者您的监控代理可能支持设置显式地址 - 这样您就可以分别监控每个实例。但是这样一来,您就需要标记两个节点上的中断,这比其中一个节点上的中断要严重得多。

您还应该检查监控客户端如何实现 rrDNS。遵循规则的故障转移检测时间约为 5 分钟,但浏览器对初始连接应用大约 10 秒的阈值,对后续请求应用不到 1 秒的阈值。

答案2

最终还是有解决方案的。这基本上就是 GSLB 所提供的,有很多商业解决方案。

如果您希望以一定的简单性和开源性来实现这一点,您可以在 PowerDNS 集群上使用带有 LUA 记录的 PowerDNS。

相关内容