Answers:
一个单一的任播IP地址不会为您提供与两个具有不同IP前缀的单播IP地址相同的冗余。
通常,冗余最困难的问题不是什么时候完全失败,而是什么时候行为不正当就足以通过运行状况检查,而实际上却无法正常运行。
我已经看到DNS服务器出现故障的任播DNS设置,但是数据包仍然会路由到该DNS服务器。不管广告前缀是什么,都可能根本不知道DNS服务器已关闭。
如果所讨论的DNS服务器不是权威DNS服务器,而是递归解析器,则将变得更加棘手。
这样的递归解析器将需要具有用于接收来自客户端的查询的任播地址和用于查询权威DNS服务器的单播地址。但是,如果单播地址掉了,它看起来很健康,以至于仍然可以路由查询。
Anycast是可伸缩性和减少延迟的绝佳工具。但是为了冗余,它不应该单独存在。
但是,多个冗余的任播池是一个很好的可用性解决方案。众所周知的示例是8.8.8.8和8.8.4.4。两者都是任播地址,但绝不应将它们路由到同一台物理DNS服务器(假设Google做得很好)。
如果您有10台物理DNS服务器,则可以将它们配置为2个池,每个池中有5个服务器,或5个池,每个池中有2个。您要避免一台物理DNS服务器同时位于多个池中。
那么您应该分配多少个IP?您需要具有可以相互独立配置为任意广播的IP。这通常意味着您需要为每个池分配整个/ 24的IPv4地址空间或/ 48的IPv6地址空间。这很可能会限制您可以拥有的池数。
此外,如果我们使用的是权威服务器,则包含所有NS记录的DNS答复以及A和AAAA胶应放在单个512字节数据包中。对于根服务器,这算出了13个地址。但这不包括胶水和IPv6,因此您要达到的数量会更少。
每个池应尽可能在地理上分布。如果您在欧洲有5台服务器,在Noth America中有5台服务器,并且有2个任播IP,则不会在每个大陆上创建一个池。您将欧洲的2个和北美的3个放入一个池中,其他5个放入另一个池中。
如果您有两个以上的任意播池,则可以让一台物理服务器暂时位于多个池中。但是,您绝对不应允许物理服务器同时位于所有池中。
可以将任意播和单播结合在一起,但是必须小心。如果您有两个池的IP,我不会合并。但是,如果您只使用一个单播IP,则也可以包含单播IP。问题在于,包括单播IP不会为您提供良好的延迟和负载平衡。
如果单播和任播都可以使用物理服务器,则您可能会冒着用户访问与主服务器和辅助服务器相同的服务器的风险,如果该服务器出现故障,则可能会失去访问权限。可以通过仅使用不在任播池中的服务器的单播地址或始终向用户提供两个单播地址来避免这种情况。
您添加到组合中的单播地址越多,发送到任播地址的查询就越少,就延迟和可伸缩性而言,从任播获得的收益也就越少。
最佳做法是使用至少两个来自不同前缀的地址,并在两个不同的TLD下给它们命名。如果需要,这两个地址都可以是任播。仅拥有一个IP地址将给您单点故障。如果到该地址的路由不起作用(配置错误,任播实例无法正常工作,前缀被劫持等),则整个域将无法访问。
每个任播地址都至少需要/24
IPv4或/48
IPv6前缀才能在BGP中路由。在许多地方,较小(较长)的前缀通常在全局路由表中不被接受。
从来没有过放一个假的IP地址作为DNS服务器。这将对解析器造成严重的延迟。
RFC 1034仅声明您需要两个DNS服务器。这不是强制性要求,而是一项建议,因此请按照您的意愿去做。无论如何,如果您想要HA,则可以使用任播功能为2个DNS服务器分配相同的IP,并且当一台DNS服务器发生故障时,最终用户唯一会注意到的是,随着网络重新融合,连接暂时中断。
因此,总而言之,是的,使用任播足以满足RFC 1034的要求。
8.8.8.8
和8.8.4.4
)?他们已经有任播信息,那么为什么不简单地提供一个地址8.8.8.8
呢?