利用DNS实现负载均衡

原文地址:http://www.chinaunix.net/old_jh/45/558805.html 

现在网络的规模越来越大,网络中服务器的负载也变得越来越重。例如:在公司的网络中安装了一台WEB服务器,用于向企业内部网中的用户提供服务,假如网络中有几千甚至上万个用户需要同时访问这台WEB服务器,那么这台服务器的性能将变得极差。 

如何来解决这个问题呢?在Windows 2000 Advanced Server中提供有Load Banlance负载均衡服务可以解决这个问题,但该服务的设置较复杂。另外我们还可以通过DNS来实现负载均衡的功能。  
Enable round robin 启用循环 

为了减轻某台服务器的负载,我们可以在网络中安装多台服务器。例如,原来网络中只有一台X235 的WEB服务器,其主机名为www.test.com,IP地址为192.168.1.100。为了减轻这台WEB服务器的负载,我们可以在网络中安装多台X235来提供WEB服务,并保证每台WEB服务器的内容都是一致的。如果可以实现让客户端分别访问不同的WEB服务器,这样就达到了分担负载的目的。那么如何让客户端分别向不同的WEB服务器访问呢?这就要用到DNS服务所提供的round robin功能。



 





 秋意正浓 回复于:2005-06-08 23:42:22

我们可以按如下步骤操作: 


在Windows200中打开管理工具中的DNS管理器。 

在DNS管理其中,用鼠标右键点击该DNS服务器图标,在弹出的菜单中选择Property属性菜单。 

在弹出的窗口中,选择Advanced选项卡。确保Enable round robin选项是处于被选中的状态。 

点击OK关闭该窗口。 

当设定好Round roubin后,接下来需要在DNS的区域(Zone)中添加主机记录: 


打开管理工具中的DNS管理器。 

用鼠标右键点击将要创建记录的区域,在弹出的菜单中选择New host新建主机记录。然后依照向导提示输入必要的信息。 

主机名  IP地址  
www  192.168.1.200  
www 192.168.1.201  
www 192.168.1.202  

当输入完所有主机的主机名与IP的对应关系后,你将看到类似于下图的窗口。



 




 秋意正浓 回复于:2005-06-08 23:43:02

在这里我们注意到,添加的三条主机记录是同一个主机名对应着不同的IP。这些不同的IP即为网络中安装的多台WEB服务器的实际IP,他们对应着同一个主机名www.test.com。 

这样当客户端们在浏览器的地址栏中输入:www.test.com去访问WEB服务器时,就会向DNS服务器发出名称解析请求。当DNS服务器收到第一个客户端的请求时,会把第一个IP 192.168.1.200响应给客户端,当第二个客户端要求解析时,服务器把第二个IP192.168.1.201响应给客户端,以此类推。通过这样的循环分配IP地址,就可以让不同的客户器访问不同的服务器,从而达到分担服务器的负载的功能。 

Enable netmask ordering 启用子网优先 

如果公司的网络是由多个子网构成的,为了使用户能够更有效地访问服务器中的资源,例如WEB服务器上的资源,我们可以在每个子网中都安装一台WEB服务器,这些WEB服务器保存的数据是完全一样的并且都使用同一个主机名,例如:www.test.com。那么如何让用户在其浏览器的地址栏中输入主机名www.test.com时,访问的是本子网的WEB服务器,而不是其他子网的web服务器呢?我们可以通过设置Enable netmask ordering 启用子网优先来实现这一功能。 

想实现Enable netmask ordering 启用子网优先,我们可以按以下步骤操作: 


打开管理工具中的DNS管理器。 

在DNS管理其中,用鼠标右键点击该DNS服务器图标,在弹出的菜单中选择Properties属性菜单。 

在弹出的窗口中,选择Advanced选项卡。确保Enable subnet ordering选项是处于被选中的状态。 

点击OK关闭该窗口。 

当设定好subnet ordering后,接下来需要在区域中添加主机记录: 


打开管理工具中的DNS管理器。 

用鼠标右键单击将要创建记录的区域,在弹出的菜单中选择New host新建主机记录。然后依照向导提示输入必要的信息。 
例如: 

主机名  IP地址  
www  192.168.1.200  
www 202.96.1.201  
www 64.35.1.202  

当输入完所有主机的主机名与IP的对应关系后,你将看到类似于下图的窗口。



 




 秋意正浓 回复于:2005-06-08 23:43:46

这样我们在DNS服务器中添加了三条主机记录:同一个主机名对应着不同的IP。这些不同的IP即为不同子网中安装的WEB服务器的实际IP地址,他们对应着同一个主机名www.test.com。 

这样当用户在其浏览器的地址栏中输入:www.test.com去访问该WEB服务器时,该客户端就会向DNS服务器发出名称解析请求。作为DNS服务器收到客户端的查询请求后,将比较客户端的IP地址,与它所请求的主机名所对应的IP地址中的哪一个在同一子网中,然后将这个IP (与客户端在同一子网中的IP地址) 响应给客户端。这样就可以实现客户端访问的总是本子网中的服务器, 把服务器的访问负载分摊到了各个子网的服务器中,并且减少了跨子网的网络流量。


 gunguymadman 回复于:2005-06-09 18:16:17

好    学习学习  。。。


 nopalh 回复于:2005-06-10 12:24:01

好东西~  继续学习


 hope365 回复于:2005-06-10 13:48:16

那么网站要更新的话是不是需要多台机器都要更新啊,也就是把在一台机器上更新的内容,在复制到其他web服务器上,是这样吗


 秋意正浓 回复于:2005-06-10 21:50:39

引用:原帖由 "hope365"]那么网站要更新的话是不是需要多台机器都要更新啊,也就是把在一台机器上更新的内容,在复制到其他web服务器上,是这样吗
 发表:



是的。 

更新一台,然后通过软件同步一下。


 纳兰婷 回复于:2005-06-10 22:30:46

原创吗?8错,学习ING。。。


 秋意正浓 回复于:2005-06-11 00:35:11

引用:原帖由 "纳兰婷"]原创吗?8错,学习ING。。。
 发表:



做试验而已。


 dudo 回复于:2005-06-11 10:53:07

收藏~~~


 ん淚及長空ぼ 回复于:2005-06-12 22:06:29

很好~~要学习!! 
谢谢~~


 KindGeorge 回复于:2005-06-13 08:51:25

引用:hope365 写到:  
那么网站要更新的话是不是需要多台机器都要更新啊,也就是把在一台机器上更新的内容,在复制到其他web服务器上,是这样吗

  


引用:是的。  

更新一台,然后通过软件同步一下。



既然服务那么繁忙,那么数据也一定是非常频繁的读写,那么几个服务器之间实时同步和互相备份一定是非常必要和重要的,可以共享一下应该怎么处理才可以实现"实时同步和互相备份"功能吗?  因为光有负载平衡而没有数据同步的方案不是太好的.虚心向大家请教. 
另谁linux下的方法呢?


 aiwowo 回复于:2005-06-14 00:07:18

再问一下,如果做了上述的设置后,在使用中,如何就能体现出Web访问时的负载均衡呢?


 radarwave 回复于:2005-06-14 16:33:40

引用:原帖由 "KindGeorge" 发表:


既然服务那么繁忙,那么数据也一定是非常频繁的读写,那么几个服务器之间实时同步和互相备份一定是非常必要和重要的,可以共享一下应该怎么处理才可以实现"实时同步和互相备份"功能吗?  因为光有负载平衡而没有数据?.........



rsync 

试试这个吧,很好用的 


但是我有个疑问,比如我2台服务性能不同,占用带宽不同,我想让用户更多的访问第一台服务器 
可不可以写成 

www  192.168.0.2 
www   192.168.0.2 
www  192.168.0.3 

这样让第一台服务器的浏览次数是第二台的2倍?


 killua 回复于:2005-06-15 11:14:05

linux 下的 bind view也可以


 gowto 回复于:2005-06-19 20:08:40

呵呵,那sina.com sohu.com是不是就是像你说的这么做的啊??


 scrate 回复于:2005-06-20 13:31:04

这和硬件有关系嘛?


 zmcc135 回复于:2005-06-23 13:03:43

引用:原帖由 "scrate"]这和硬件有关系嘛?
 发表:


如上所说,这属于软件的负载均衡,不是硬件技术。 

另外: 
1、是否有Linux/Unix下的介绍? 
2、RoundRobin就是轮流分配吧,是否还有加权算法可用,就像Proxy配置中会用到的 
3、此外,假设2台服务器按所说的进行配置,在其中一台关机或应用Crash的情况下,如未及时干预,是否有50%的访问仍会被导向这台不可访问的机器?DN Server是否可配置探测功能,就像许多商用的“智能DNS”那样?


 jianglinchun 回复于:2005-06-27 20:59:17

实际上这种负载均衡技术叫做DNS轮询, 
也就是DNS服务器器轮流将对应的DNS请求轮循影射到对应的IP地址。 

如果还需要更强大的负载均衡方案,就要用专门的负载均衡的硬件设备了。 

只要会配置linux的DNS服务的,我想在linux下配置一样,这是DNS的所支持的,而非某种OS所特有。


 strongzzj 回复于:2005-06-30 11:29:37

如果用这种方法做SMTP服务器,那会很好. 
但做WEB的话,数据同步就非常重要了. 
至少到现在,本人还没有见过高效的同类软件, 
peersync几千元一套,但用起来也不觉得怎样好,有点名过其实.


 守夜人 回复于:2005-07-03 12:44:04

对,现在讲负载的不少,但真正需要的是同步,我现在是用NFS做的,一台服务器专门做成raid(NFS)存储服务器,同步软件在那种交互环境下不好用如BBS等 
  还有一个问题,就是当一台服务器出错时,如果DNS没有将其删除,也会有问题


 gunguymadman 回复于:2005-07-03 16:49:17

说的越多 就越靠近cluster


 gaya 回复于:2005-07-05 11:16:40

很有用


 bluepigeon 回复于:2005-07-19 11:29:32

非常不错,支持,我要学习


 panbs 回复于:2005-07-21 21:26:48

我顶!好好学习,天天上网


 ilwxfe 回复于:2005-07-22 08:57:12

谁能说说LINUX下怎么实现的 ??


 jackylau 回复于:2005-12-29 08:59:28

最最关键的数据实时同步,其实做负载均衡很简单.不知道哪们有更好的方案不?


 lihangel 回复于:2006-06-05 22:25:33

真的能实现负载均衡吗? 
会不会出现这样的情况,每次当我访问WWW的时候,DNS返给我的IP都是第一条A记录,即192.168.1.200 
只有当192.168.1.200当掉后,才会解析到192.168.1.201 
前两个都当掉后,最后解析成192.168.1.202


 linux_admin 回复于:2007-03-22 10:00:22

写的不错,加十分。 
其实说白了,就是dns轮询的原理,就是还差点实现数据同步的功能。 
如果网站都是静态的供别人访问的采用这种方法还行,但是如果牵涉到动态的有数据库的采用这个就不奏效了。 
谁有这方面经验的指点下。


 flb_2001 回复于:2008-09-04 10:30:19

DNS管理器就是DNS服务器上的吗? 
也就是说你的所有这些配置都是在DNS服务器上做的吗?


 yuhuohu 回复于:2008-09-24 00:16:17

一个小问题: 

如何判断客户机的IP和WEB服务器的IP是同一子网?根据传统的ABC类来判断吗?还是有其他的文件定义子网掩码


 flb_2001 回复于:2008-09-24 13:52:33

怎样保证保证每台WEB服务器的内容都是一致的


 yuhuohu 回复于:2008-09-24 17:36:54

在你的楼上有人答复过这个问题


 lucas_lin 回复于:2009-07-24 12:07:50

load balance is a very important feature of DNS.


 前卫主义 回复于:2009-07-27 16:48:04

--------------------




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=558805
转载请注明作者名及原文出处
原文地址:https://www.cnblogs.com/niaowo/p/2933832.html