我将拥有 2 台位于不同数据中心(不同国家)的服务器,我想使用 DNS 负载平衡主要是为了实现托管在这两台服务器上的网站的高可用性。它只是一个广告跟踪网站,它会在本地数据库中记录点击量并返回几行 html 代码。
由于浏览器中的 DNS 固定,我希望每次返回 2 个 A 记录(如果一台服务器出现故障,浏览器将尝试已缓存的第二个 A 记录)。
两台服务器还将充当 DNS 服务器以实现冗余。现在我提出的解决方案是:我将使用 BIND,并将两台服务器作为该区域的主服务器。每台服务器上都将运行脚本,该脚本将定期测试两台服务器的可用性 (http),并在发生故障时从 DNS 中删除 IP。
现在的问题是:)
1) BIND 是否适合此解决方案?我认为 BIND 性能良好,并且可以通过脚本轻松操作区域文件。而且由于我只会在发生故障/维护时修改区域,因此修改(以及绑定重新加载)不会经常进行。
2) 我计划使用 5 分钟的 TTL。该网站每秒将有大约 1000-3000 个请求,但来自不同的客户端(每个 IP 只有 1-3 个请求),所以我认为 DNS 负载不会太大。我猜他们的 ISP 会在这 5 分钟内缓存响应。有什么理由进一步降低 TTL 吗?
3) 我的主主方法好吗?还是我应该将其中一个服务器设为主服务器,另一个设为从服务器?现在,每个服务器都可以监视自己和另一个服务器。如果只有 webservice 发生故障,两个 DNS 节点都会注意到它。如果整个服务器发生故障,则剩余的 DNS 节点会注意到它,并且发生故障的节点无论如何都不会回答 DNS 查询。
4) 如果一台 NS 服务器不响应查询,这会是个大问题吗?如果是,我可以创建第三个 DNS,这样至少有 2 个 DNS 可以接受查询...
5)我应该通过脚本重写区域文件,还是只使用动态 DNS 更新(例如通过nsupdate
实用程序)?
答案1
1) 是的,Bind 是选项之一。但要注意其可怕的错误和缺陷历史。
2) 您可以使用任意 TTL,但为什么要将其降低到 5 分钟以下?为什么是 5 分钟而不是 10 分钟、30 分钟或 120 分钟等?定义您的目标,然后只需使用所需的值即可。
3) 如果无法访问 Web 服务器,让 DNS 停止响应查询不是一个好主意。您最好重定向到错误页面...或者什么也不做,这是标准行为。
4) 如果您有多个 DNS,那么如果一个失败,客户端将尝试列表中的另一个。大多数客户端都是 ISP DNS 服务器,并且配置良好,所以不用担心。如果这是进行直接查询的 Windows 客户端,情况就不同了,但这种情况仅适用于公司内部的 DNS。
5) 为什么要重写区域文件?这很少发生,所以只需使用您最喜欢的编辑器即可。如果这是在 Web 服务器中断期间更改区域文件,请按照您的喜好进行操作,但 nsupdate 可能不是最佳方法(不是最佳方法,但有效)。只需重写区域文件并让 bind 重新读取它。