参考资料: Load Balancing Servers, Firewalls, and Caches / WSD产品文档
要点:
- local dns (local name server)是客户端网络设置的一部分,要么是手工配置,要么从DHCP得到。一般local dns 在从网络上靠近客户端。
- 主要的域,比如.com .net .org 等,都由Internet管理方进行管理维护,负责这些域的服务器也叫"根服务器", 根服务器里面有 foo.com 之类的子域,每个子域有一个或者多个服务器,这就是子域的权威服务器(授权DNS服务器)。
- 授权DNS服务器存储对于管理一个域名的重要信息,同时一个域名可以分为多个Zone,个Zone可以有各自的授权DNS,称为Zone of Authority(ZOA). 比如a.foo.com b.foo.com 可以有各自的ZOA
- 可以有一个或者多个授权DNS服务器,但是只有一个 primary authoritative DNS 负责分发域名name space的信息。
迭代查询和递归查询:
迭代查询:服务器可以回答确切答案,或者告知查询者其他可能知道答案的服务器。
递归查询:服务器必须回答确切答案,假如自己不知道,就要通过查询其他服务器得到答案。
客户端的DNS解析器一般无法处理迭代的回答,所以查询localDNS一般使用递归方式。服务器DNS解析器可以回答迭代或者递归查询,也可以发出递归或者迭代查询。
典型DNS查询流程:
1. 客户端向local dns查询 www.foo.com,注意这是递归查询
2.3. local dns 向 root name servers 查询 .com 的name server. 这里采用迭代方式。
4.5. local dns 向 .com 的 name server 查询 foo.com 的授权dns
6.7. local dns 向 foo.com 的授权dns得到 www.foo.com 的ip list
8. local dns 将 www.foo.com 的一个ip返回给客户端
9. 客户端访问 ip 指向的服务器
Local DNS Caching
DNS 信息有一个TTL消息, local dns 可以cache dns reply ,过期时间就是这个ttl时间。
假如dns cache信息过期,local dns 向授权dns服务器重新请求。
假如local dns 收到的dns查询响应有多个ip 地址,对于客户端的查询,将采用round-robin策略
客户端也可以cache dns 响应,但是部分客户端忽略ttl信息而采用自己的固定dns过期时间,比如微软的IE
Using Standard DNS for load balancing
DNS可以做load banlancing服务,对于一个域名可以配置多个ip地址,这些ip指向load balancer的VIP或者只是一台真实服务器。但是DNS无法知道某个ip是否能否服务或者负载情况如何(这个不是绝对的,参看下面GLSB部分),毕竟 DNS 并不是为 GLSB 设计的。
DNS−Based GSLB
需要load balancer在DNS framework框架内,为特定客户端选择最合适的server的ip地址。这里分为两个问题:
- balancer如何纳入dns框架内, 返回最合适的ip地址给客户端?
- load balancer如何知道谁是最好的site?
将load balancer嵌入 GLSB 有几种途径:
The Load Balancer as the Authoritative DNS
最简单的方法是load balancer作为域名或者Zone的授权DNS, 作为授权DNS服务器,load balancer可以智能的响应DNS查询,大部分GLSB产品可以实现这种该功能.
不同的GSLB产品的不同实现是一个需要考虑的问题. F5 3DNS有完整的DNS实现, 而 Foundry, Nortel, Cisco, Radware 的产品实现了不同的DNS功能,假如某个产品不能处理特定的查询,它就会丢弃查询,返回错误或者转寄查询到一个真实的DNS server。对于客户,这意味着他们得放弃原来使用的一些DNS功能。
The Load Balancer as Forward DNS Proxy
forward proxy server 明确的代表另一台服务器。load balancer 注册为域名的授权DNS,作为真正的授权DNS服务器的代理。对于DNS查询,load balancer 转寄给授权DNS,修改其回应来实现GLSB功能。只对于特定GLSB域名的name-address 解析命令,load balancer才会需要dns响应
这种方案有很多好处:
可以使用多个DNS server ,来得到高可用性和高扩展性
DNS server可以在私有网络内,来增强安全性
可以透明的增加和移走DNS server
Load balancer不需要实现所有的DNS功能,进一步地说,GSLB功能可以很好的和普通的load balancing功能共存。
Load balancer有两个VIP: VIPD是作为授权DNS proxy的地址,VIP1是server farm (new york)的地址。当然,这两个VIP可以使用同一个地址。
有了forward dns proxy, 我们可以把真实的授权dns服务器放在任何地方。一般是客户控制授权DNS,而服务提供商使用forward dns proxy 来提供GLSB服务。load balancer 的VIP要被注册为授权DNS服务地址。假如真实授权dns比较远,到它的查询有明显的时延,这时候为了性能,load balancer就要像local dns一样缓存dns查询。
假如有人需要不修改任何dns设置怎么办?forward dns proxy 可以把原来的授权dns换一个ip,原来的IP给load balancer,或者是设置授权DNS地址,指向新的load balancer的VIP。总之还是要修改原有授权dns的一些设置。
透明DNS proxy可以避免修改任何DNS设置。
Limitations of DNS−Based GSLB
毕竟DNS并不是为GSLB设计的。
1. LocalDNS和用户可能网络距离很远,我们无法保证这一点,特别是使用固定的DNS设置的用户。不过现在使用DHCP的用户越来越多了,一般而言local DNS和用户拥有相似的网络延时
2. 某些Local DNS和browser忽略授权DNS的TTL设置,使用固定的dns超时时间。有些browser假如不关闭重启,就不会更新dns cache