开发者社区> 异步社区> 正文

《DNS与BIND(第5版)》——10.7 轮询调度(Round-Robin)负载分配

简介:
+关注继续查看

本节书摘来自异步社区《DNS与BIND(第5版)》一书中的第10章,第10.7节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

10.7 轮询调度(Round-Robin)负载分配

自BIND 4.9发布之后,名称服务器已经正式支持一些过去必须通过补丁才能实现的负载分配功能。Bryan Beecher曾给BIND 写过一个补丁,以实现他所谓的“轮转地址记录(shuffle address records)”。这是一组特殊类型的地址记录,名称服务器会在响应查询时轮转其中的地址。例如,域名foo.bar.baz有3个“可轮转”IP地址:192.168.1.1,192.168.1.2和192.168.1.3。一台打好补丁的名称服务器第一次响应查询时的顺序为:


<a href=https://yqfile.alicdn.com/161bd1fd46e14e3e6dbae7570e458adfa0ddfa38.png" >

第二次响应查询的顺序为:


f26c15471171f610a4a68fd1d2c333d6e0b40d07

第三次响应查询的顺序为:


<a href=https://yqfile.alicdn.com/c5e1d99d35af52eee91c054f541d9ba44da258e4.png" >

然后再从第一次的顺序开始,并永无止境地重复轮转下去。

如果有许多等效的网络资源,例如镜像FTP服务器、web服务器或终端服务器,并且打算在它们之间分担负载,那么这个功能会非常有用。可以为这组资源建立一个域名,并且配置客户端访问该域名,名称服务器便会根据列出的IP地址来分配查询请求。

BIND 8和9不再把轮转地址记录作为一个单独的记录类型,因为那样需要特殊处理。取而代之的是,对拥有超过一条A记录的任意域名,现代的名称服务器都会进行地址轮转。(事实上,对于任意的记录类型,只要一个给定的域名拥有多条此类记录,名称服务器就会轮转它们1。)对于如下记录:


<a href=https://yqfile.alicdn.com/62fe85eaa5a84bc34bb5a48b2496241e6a49ee27.png" >

BIND 8或9名称服务器,就像打过补丁的版服务器一样,可以完成轮转地址记录。BIND文档将这一过程称之为轮询调度(round-robin)。

正如示例中所做的那样,降低这些记录的生存时间也是个好主意。如果这些地址被缓存在一个不支持轮询调度的中间名称服务器上,这样做确保它们很快会由于超时被移出缓存。当中间名称服务器再次查询该名称时,权威名称服务器就能再次轮询调度这些地址。

注意,实际上轮询调度提供的是负载分配,而非负载均衡,因为名称服务器并不考虑提供服务的服务器的实际负载和能力,它只是按照预定的方式给出这些IP地址。在示例中,IP地址为192.168.1.3的服务器可能是一台运行Linux的486DX33老爷机,而另外两台是HP 9000 Superdomes服务器,可是这台Linux老爷机仍然分到了三分之一的查询。就算多次列出高性能服务器的IP地址也于事无补,因为BIND会消除重复的记录。

10.7.1 多条CNAME记录
回到BIND 4名称服务器的全盛时期,有些人使用多条CNAME记录(而非多条地址记录)的方式设置轮询调度:


<a href=https://yqfile.alicdn.com/00f448b314fcf45547c047d09316fb2eebc19173.png" >

这样的设置看上去可能很奇怪,因为本书反复强调不要把任何东西和CNAME记录混淆。但是BIND 4名称服务器不认为这是配置错误,它只会简单地以轮询调度的方式返回foo.bar.baz的CNAME记录2。

另一方面,BIND 8名称服务器更加警觉并且能够发现这种错误。但是,可以明确配置是否允许单一域名拥有多条CNAME记录:


a08289a0b4f6b6c09c230b0f8b3209c5ae289452

然而,本书并不认为应该这么做。

BIND 9名称服务器在版之前没有注意到多条CNAME的问题。从9.1.0版开始,BIND能够检测出问题,但是不支持用multiple-cnames语句允许多条CNAME记录。本书认为这是正确的做法:因为给单一域名指定多条CNAME记录违反了DNS标准(特别是RFC 2181),所以请不要这样做。

10.7.2 rrset-order子语句
有时可能不希望名称服务器使用轮询调度。例如,指定一台web服务器充当另一台的备机。这时,名称服务器在应答时,应该总是将备机地址排在主web服务器地址之后。但是使用轮询调度无法达到目的:因为每次响应查询后,名称服务器都会将地址顺序进行轮转。

BIND 8.2及其后续版本的名称服务器以及BIND 及其后续版本的名称服务器,允许关闭特定域名及记录类型的轮询调度功能。例如,可以使用rrset-order子语句,确保名称服务器总是以固定顺序返回www.movie.edu的地址记录:


4f5e010af85cc46511572f3b6ab281f2bdbbe4e1

还应该尽量降低www.movie.edu的地址记录的TTL值,以免这些未经轮询调度的记录在名称服务器上缓存过长时间。

class(类)、type(类别)及name(名称)设置,用来决定哪些记录会应用指定的顺序。class默认为IN,type默认为ANY,name默认为*(也就是任何记录)。所以下面的语句:


<a href=https://yqfile.alicdn.com/a5421fd506b70812898785428190a18ba7ba756a.png" >

会在名称服务器应答的所有记录上使用随机的顺序。在name设置中,最左边的标签可能是一个通配符,如下所示:


cb441f7fb5dfee5c7eef40fd3b806aab04f4c28d

虽然仅允许使用一个rrset-order子语句,但是其中可以包含多个顺序规则。与一组记录最先匹配的顺序规则将会应用到应答中。

rrset-order支持以下3种顺序。

fixed

总是以相同的顺序返回匹配的记录。

random

以随机的顺序返回匹配的记录。

cyclic

以循环(轮询调度)的顺序返回匹配的记录。

可惜,BIND 尚未完全支持fixed顺序3。

默认的配置是:


<a href=https://yqfile.alicdn.com/0ec27c7c8f0a7007cfb470ae905d033fd982b176.png" >

不幸的是,配置rrset-order并不是一个完整的解决方案,因为解析器和名称服务器的缓存会干扰其工作。一个更好的解决方案是SRV记录,本书将在第17章加以讨论。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14308 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
20461 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29889 0
ubuntu 15.10 设置静态ip 分配固定ip 设置dns 设置网关 命令行配置ip 固定ip不生效怎么办
要用到的文件: 配置接口信息 /etc/network/interfaces 配置内容: auto eth0 iface eth0 inet static address 192.168.216.
1058 0
彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值
彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值
1008 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22872 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17026 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21075 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载