出于延迟原因,我们在全球运营多个冗余服务器。目前,如果一个站点出现故障,我们让另一个站点接管该地区的唯一方法是通过 DNS。
我们希望自动化这个过程,例如,如果通过监控工具检测到站点出现故障,则通过替换/修改区域文件。
我的 Google 技能只找到了提供此项服务的公司,但我们更喜欢自己的解决方案。对于监控,我们目前使用 Nagios,我们的名称服务器是 Bind。
有什么工具/方法可以实现这一点吗?
答案1
当然有,这些服务也是这么做的。:-)
这在一定程度上取决于您目前如何在全球范围内重定向/分配用户。假设结果实际上是一些用户从 www.example.com 重定向到 www.eu.example.com,而其他用户分别从 www.oc.example.com 重定向到 www.am.example.com。
您可以使用监控解决方案,这样当 www.am.example.com 变得无响应时,不仅会触发正常警报,而且还会进行更新,以使 www.am.example.com 指向 www.eu.example.com。
一种干净的方法是动态更新这是一种通过向主服务器发送特殊形式的 DNS 消息来添加、替换或删除主服务器中的记录的方法。这些消息的格式和含义在RFC 2136。
通过在 zone 语句中包含allow-update
或子句来启用动态更新。有关更多信息,请查看update-policy
绑定管理员参考手册。
最干净的方法可能是同时使用基于 IP 的访问控制和 DNS 公钥。
创建密钥对:
dnssec-keygen -a HMAC-MD5 -b 512 -n USER nagios.example.com.
这将产生两个文件,一个用于私钥Knagios.exmaple.com.NNNN.private
,另一个用于公钥Knagios.exmaple.com.NNNN.key
。
更新您的绑定配置:
key nagios.example.com. {
algorithm HMAC-MD5;
secret "<string with contents from Knagios.exmaple.com.NNNN.key>"; };
zone "am.example.com"
{
type master;
file "/etc/bind/zone/am.example.com";
allow-update { key nagios.example.com.; };
...
};
然后,当使用 Bind 实用程序发出警报时,执行以下操作的脚本nsupdate
:
cat<<EOF | /usr/bin/nsupdate -k Knagios.exmaple.com.NNNN.private -v
server ns1.example.com
zone am.example.com
update delete www.am.example.com. A
update add www.am.example.com. 60 A <ip-address-of-www.eu.example.com>
send
EOF
我不确定您是否被允许对A
记录以外的任何内容使用动态更新。
答案2
没有。你的方法有问题。
您似乎误以为您可以这样更改 DNS。事实并非如此。即使您将 TTL 设置为较低,某些提供商也会忽略它 - 并且仍将使用您的旧值。除了“一两天内”之外,您实际上无法控制 DNS 过期。
因此,任何基于 DNS 更改的高可用性从根本上都是有缺陷的。