我有两个名称服务器,ns1 和 ns2 使用主/从类型设置运行 PowerDNS,效果很好。我想创建多个服务器来提供服务(即 Web、电子邮件等),然后让 ns1 或 ns2(无论哪个被选中)上的 PowerDNS 返回与主机名关联的多个 IP 之一,具体取决于该主机是否实际启动并运行。
例如,假设我有两个 Web 服务器,X 和 Y。然后我在 DNS 中有两个 A 记录,因此 webserver.local 有时解析为 X 的 IP,有时解析为 Y 的 IP,从而产生循环效果。完美。
现在,如果 X 发生故障,这仍然有效,但客户端必须超时才能有机会访问 Y,这意味着他们最终会到达他们想去的地方,但速度会慢得多。如果 X 发生故障,我希望将其 IP 地址从要解析的 IP 循环列表中删除,以便 DNS 在解析 webserver.local 时只返回 Y 的 IP,直到 X 修复并重新投入使用。
要求 PowerDNS 验证主机是否在每个请求上都正常运行可能需要一两秒钟(如果可能的话),这会严重降低 DNS 查询速度。我曾经想过通过 cron 定期执行一个完全独立的任务来检查服务器,并相应地修改 PowerDNS 配置。我当然可以从这个角度来解决这个问题,但我希望有一种更标准的方式来解决这个问题,而不需要太多的自定义开发。
答案1
由于无法确定这是 PowerDNS 内置的功能,还是有更“官方”的方式来处理这个问题,所以我决定自己编写一个程序来处理这个问题。这个程序更像是一个通用的“如果主机宕机,则执行用户定义的操作”,而不是专门为此设计的,因此它有更广泛的应用。
我已将其公开,以便其他人可以使用: https://github.com/hyperionworks/pulse/