实现基于DNS的负载均衡
转自:http://blog.sina.com.cn/s/blog_4e424e2101000c3g.html
如果你有一个很受欢迎的Web站点,你会发现当请求的连接数增加时,服务器的响应延时也会随之增加。虽然你可以增加RAM、升级处理器、使用更快的驱动器及总线,这在短期内会有一定的帮助,但最终会发现一台服务器无法完成需要的任务。
使用多台服务器平衡负载是一个不错的想法,你可以在你的服务器池中随意增加多台服务器来提高服务器的性能和增强网络的稳定性。如果你的服务器池中有多台服务器,当一台down机后,其他服务器可以接替它的工作,继续提供服务而不至于造成服务中断。
通过使用RR-DNS(Round-Robin Domain Name System)可以实现平衡负载的功能,向一个主机名发出的入站请求可以被转发到多个IP地址上。
在BIND9中实现此功能就向添加一条A记录那么简单。举例说,如果我们向somode.com区域文件中加入下面行便可实现:
www IN A 220.181.11.124 IN A 220.181.11.125
当然你还可以根据需要加入更多服务器。这样如果有人请求解析www.somode.com时将有一半的机率解析到220.181.11.124上,而另一半会解析到220.181.11.125上。
然而,使用RR-DNS方法实现负载平衡也会带来一些问题:
第一,域名服务器是一个分布式系统,是按照一定的层次结构组织的。当用户将域名解析请求提交给本地的域名服务器,它会因不能直接解析而向上一级域名服务器提交,上一级域名服务器再依次向上提交,直到RR-DNS 域名服务器把这个域名解析到其中一台服务器的IP 地址。可见,从用户到RR-DNS 间存在多台域名服务器,而它们都会缓冲已解析的名字到IP 地址的映射,这会导致该域名服务器组下所有用户都会访问同一Web 服务器,出现不同Web 服务器间的负载不平衡。为了保证在域名服务器中域名到IP 地址的映射不被长久缓冲,RR-DNS 在域名到IP 地址的映射上设置一个TTL(Time To Live)值,过了这一段时间,域名服务器将这个映射从缓冲中淘汰。当用户请求,它会再向上一级域名服务器提交请求并进行重新映射。这就涉及到如何设置这个TTL值,若这个值太大,在这个TTL 期间,很多请求会被映射到同一台Web 服务器上,同样会导致负载不平衡。若这个值太小,例如是0,会导致本地域名服务器频繁地向RR-DNS提交请求,增加了域名解析的网络流量,同样会使RR-DNS 成为系统中一个新的瓶颈。
第二,用户机器会缓冲从名字到IP 地址的映射,而不受TTL 值的影响,用户的访问请求会被送到同一台Web 服务器上。由于用户访问请求的突发性和访问方式不同,例如有的人访问一下就离开了,而有的人访问可长达几个小时,所以各台服务器间的负载仍存在倾斜(Skew)而不能控制。假设用户在每个会话中平均请求数为20,负载最大的服务器获得的请求数额高于各服务器平均请求数的平均比率超过百分之三十。也就是说,当TTL 值为0 时,因为用户访问的突发性也会存在着较严重的负载不平衡。
第三,系统的可靠性和可维护性不好。若一台服务器失效,会导致将域名解析到该服务器的用户看到服务中断,即使用户按“Reload”按钮,也无济于事。系统管理员也不能随时地将一台服务器切出服务进行维护,如进行操作系统和应用软件升级,这需要修改RR-DNS 服务器中的IP 地址列表,把该服务器的IP 地址从中划掉,然后等上一段时间,等所有域名服务器将该域名到这台服务器的映射淘汰,和所有映射到这台服务器的客户机不再使用该站点为止。
RR-DNS方法只是一个简单的负载平衡方案,如果你有更高要求,可以研究LVS集群(IPVS和KTCPVS、TCPHA),实现基于IP的负载均衡和基于内容的负载均衡。
实现基于DNS的负载均衡的更多相关文章
- 实现跨云应用——基于DNS的负载均衡
“公有云可以作为传统IT资源的延展,能帮助客户应对不断变化的需求”——这是我们在向客户介绍公有云产品时经常说的一句话.我们来看一个具体的需求: 某客户有一个web站点,部署在自有的数据中心(on-pr ...
- 基于Docker的负载均衡和服务发现
应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,clie ...
- DNS全局负载均衡(GSLB)基本原理
原理 DNS全局负载均衡通过智能DNS解析来实现,通常在不同的地区设立多个数据中心,每个数据中心又使用多个运营商的线路.目前很多DNS服务商都提供了智能DNS服务,智能DNS通常是利用各运营商分省IP ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- 使用nginx sticky实现基于cookie的负载均衡
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...
- Nginx基于TCP的负载均衡的配置例子
原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...
- 使用nginx sticky实现基于cookie的负载均衡【转】
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...
- Linux的DNS实现负载均衡及泛域名部署
DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到 ...
- Azure Load Balancer(二) 基于内部的负载均衡来转发为访问请求
一,引言 上一节,我们使用 Azure Load Balancer 类型为外部的,来转发我们的 Web 服务.今天我们看看另一种类型为 “Internal” 的 Azure Load Balancer ...
随机推荐
- 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt
题意:给你3个字符串,3个人各对自己的字符串执行n轮操作,每一次选择一个字符变为任意一个和原来不同的字符.最后问你谁能使自己的串中的任意重复子串出现的次数最大化. 显然只需关注字符而非子串. 枚举每个 ...
- WEB架构师成长之路 三
Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...
- hdu 3061 最大权闭合子图
属于模板题吧... #include <cstdio> #include <cstring> #include <vector> #define min(a,b) ...
- Java_如何等待子线程执行结束
工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...
- 在WPF中使用全局快捷键
今天写一个小程序中使用到了全局快捷键,找到了我之前写的文章在c#中使用全局快捷键翻了一下,发现它是WinForm版本的,而我现在大部分写WPF程序了,便将其翻译了为WPF版本的了. static cl ...
- Dropbox Folder Sync – 让 Dropbox 同步任意文件夹
「DropBox」可以说是目前世界上最流行的线上同步工具,非常简单的同步方式, 流畅的档桉上传下载速度,让你可以轻易的在两台.三台电脑之间同步重要资料. 而你要做的步骤只是在每一台电脑安装DropBo ...
- js删除字符串的最后一个字符三种方法
字符串 var basic = "abc,def,ghi,"; 第一种 basic = basic.substr(0, basic.length - 1); 第二种 basic = ...
- mysql 源代码编绎
http://blog.chinaunix.net/uid-20723616-id-769326.html https://software.intel.com/zh-cn/blogs/2010/08 ...
- 通过内存盘提高MSMQ的消息吞吐能力
转载:http://www.ikende.com/blog/00f2634be4704b79a3e22439edeb1343 由于MSMQ的消息交互都需要对磁盘进行读写操作,所以提高MSMQ的消息吞吐 ...
- [转载] 为Visual Studio添加默认INCLUDE包含路径的方法
原文地址 你是否曾经也有过这样的问题: 用VS的时候,有时会用到一些非自带的库,例如WTL.Boost.DX等,每次需要用到时都要在项目属性里添加相应的include目录,久而久之觉得有点麻烦.是否有 ...