我正在尝试在测试环境中设置名称服务器,以使用简单的循环方法将流量路由到两个不同的 OpenStack Swift 代理服务器。我尝试使用 BIND9 来实现这一点,但在正确解析 IP 时遇到了问题。我通过互联网研究反复试验才解决了这个问题,因此我对 BIND 的理解可能存在差距。
所有服务器都是 Ubuntu 11.04 服务器镜像
我已经更新了/etc/resolv.conf在当前名称服务器行上方添加一个带有网关盒 IP 地址的名称服务器行。
这命名的.本地.conf:
zone "mygateway.com" {
type master;
file "mygateway.com.db";
};
zone "183.9.15.in-addr.arpa" {
type master;
file "rev.183.9.15.in-addr.arpa";
};
这mygateway.com.db文件:
; BIND data file for local loopback interface
;
$TTL 499
@ IN SOA ns admin (
201006 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1
ns1 IN A 15.9.183.217
gw.mygateway.com IN A 15.9.183.217
TXT "Swift Gateway"
www IN A 15.9.183.223 ; IP address of server1
www IN A 15.9.183.216 ; IP address of server2
这rev.183.9.15.in-addr.arpa文件:
;
; BIND data file for local loopback interface
;
$TTL 499
@ IN SOA ns1.mygateway.com admin.mygateway.com (
201007 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1
ns1 IN A 15.9.183.217
217 IN PTR mygateway.com
www IN A 15.9.183.223
www IN A 15.9.183.216
dig 输出为:
$ dig -x 15.9.183.217
; <<>> DiG 9.7.3 <<>> -x 15.9.183.217
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9011
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;217.183.9.15.in-addr.arpa. IN PTR
;; ANSWER SECTION:
217.183.9.15.in-addr.arpa. 499 IN PTR mygateway.com.183.9.15.in-addr.arpa.
;; AUTHORITY SECTION:
183.9.15.in-addr.arpa. 499 IN NS ns1.183.9.15.in-addr.arpa.
;; ADDITIONAL SECTION:
ns1.183.9.15.in-addr.arpa. 499 IN A 15.9.183.217
;; Query time: 0 msec
;; SERVER: 15.9.183.217#53(15.9.183.217)
;; WHEN: Wed Jul 20 01:30:34 2011
;; MSG SIZE rcvd: 105
我正在运行swauth-prep命令,它将网关 http 作为参数来访问 REST api,例如(代理服务器上为 https 配置了 8080):
swauth-prep -K mykey -A https://15.9.183.217:8080/auth
对于循环分布来说,这个配置看起来正确吗?
有什么方法可以验证循环是否正常工作?(通过 dig 或其他命令行操作)
答案1
您的正向区域对于 DNS 循环 (一个主机名,两个地址) 是正确的。您可以通过运行 来确认 DNS 服务器是否返回了两个记录dig www.mygateway.com
。您应该会收到两个 A 记录。
你的反向区域不是正确配置了循环 DNS。您在此处创建的是 www.183.9.15.in-addr.arpa 的条目,这两个条目都会被返回,并且客户端的解析器库会挑选一个。这绝对不是您想要的。
您可能想要的是这样的记录:
216 IN PTR www.mygateway.com.
223 IN PTR www.mygateway.com.
这将确保 15.9.183.216 和 15.9.183.223 的反向 DNS 查找返回“www.mygateway.com”(因此与正向A
记录匹配)。
请记住,循环 DNS 不能保证均匀的负载分配:使用哪条记录的选择由客户解析器库,并且可以随机决定,通过首先接收哪个记录,通过最后接收哪个记录,或者一些醉酒的程序员在破解解析器库时想出的任何其他方法。
DNS 轮询成本低且相当有效,但如果您需要良好的负载平衡,您可能需要投资负载平衡硬件(或软件 -普法,HAProxy, ETC。)。
必须插入:你的问题和你上面犯的一些错误意味着对一些基本 DNS 概念存在根本性的误解。我强烈建议拿起一份DNS 和 BIND(电子版或从您当地的书店购买)并通读它 - 至少第 1、5 和 6 章,以及在您的情况下第 10 章的相关部分。
这样做所节省的时间将远远超过书的价格。