Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于DNS的多机均衡负载的实现

[复制链接]
BENDY 发表于 2004-5-30 20:40:33 | 显示全部楼层 |阅读模式
基于DNS的多机均衡负载的实现-

前二天为一个客户添加了一台服务器。共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。

但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。 

最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端。应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。



lbname网页介绍
http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
http://www.stanford.edu/~riepel/lbnamed/




下载:
http://www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
http://www.stanford.edu/~schemers/dist/lb.tar
.
.

下载包说明:
内存数个目录
1)lbcd的源代码。。。。lbcd是lbnamed所用到的服务器端检测服务器负荷程序。。每个需要均衡负荷的服务器都需要安装、运行它的。。。
建议下载使用最新的lbcd编译包。http://www.stanford.edu/~riepel/lbnamed/lbcd-3.1.0.tar.gz  之前的常有编译错误的。(这个也有的。嘻。)
编译这个包时。常会出错的。如何成功安装。就看你的本事了。(编辑util.c第123行。在前面加上//)
  编译lbcd成功后。将它复制到/usr/sbin。那你就可以运行它了。。不用加什么参数了。(运行后要停止它就是lbcd -s)

2)lbnamed的服务器程序perl..分有二个版本。一个是perl4.另一个是perl5.我是使用perl5的。所以用它来说明。
 进入perl5目录。。。。。先要配置好lbnamed和poller程序。
 说明一下:
  lbnamed程序是主程序。提供dns动态解析。严格来说。它已是一个dns服务器端程序了。
  poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
  但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。
  
  然后就需要更改程序的配置文件了。
  1,lbnamed.conf 要更改的地方有几个 
          一、$hostmaster = "schemers.leland.stanford.edu"; 将schemers.leland.stanford.edu改为你服务器的域名。。比如host.abc.com 这个无太大关系
          二、将所有stanford改为你域名的中段(比如bendy.com,就改为bendy),将所有edu改为域名的后缀(比如bendy.com,就改为com)。。这个很重要。。我建议不要更改best。当然你也可以改
  2,sweet.config 这个文件可以是用其它文件名的,具体在lbnamed.conf有设置。我建议大家先清空这文件。再重新建立新的。
          这个文件的配置方法是
          负荷服务器host 负重 组
          比如。我自己的情况。有二台服务器。分别是bbs1.bendy.com和bendy2.bendy.com那我的配置文件就是
         
          bbs1 1 bbs
          bbs2 1 bbs
         
          配置好这个文件后。你需要一个能对bbs1这个域名进行解析的方法。就是修改/etc/hosts文件。我的情况就是
          192.168.1.1 bbs1
          192.168.1.2  bbs2
         
          这样的话。poller程序就会检测111.222.333.001、111.222.333.002的负荷情况了
  
  至此,DNS服务器和均衡负载的服务器的程序已完成。可能我的说明不太清楚。现在我就一一列表说明
  
  bbs1服务器 lbserver1 192.168.1.1  编译运行lbcd   
  bbs2服务器 lbserver2 192.168.1.2  编译运行lbcd
  dns服务器 dnsserver 10.0.0.1     配置lbnamed 在/etc/hosts配置bbs1、bbs2域名解析
  
  这样的情况下。。在dns服务器运行lbnamed程序。系统就开始动作了。。lbnamed的启动参数主要是 -l logfile和-d(debug)
  ./lbnamed -l lb.log -d
  查看记录(类似)
  cat lb.log
  
  -=====
  05/30 00:59 21442 lbnamed starting poller
05/30 00:59 21442 lbnamed load_config
  loading 1452 bbs2 192.168.1.2 bbs
  loading 837 bbs1 192.168.1.1 bbs
05/30 00:59 21442 lbnamed ready to answer requests
05/30 00:59 21442 lbnamed do_maint
05/30 00:59 21442 lbnamed reloading config
05/30 00:59 21442 lbnamed load_config
  loading 1671 bbs2 192.168.1.2 bbs
  loading 1086 bbs1 192.168.1.1 bbs


  如果你没有那些记录。看文件sweet.config.unreach这是代表poller程序无法接收到对方服务器的负荷信息。。请检查lbcd程序是否运行。。

  如果程序运行正常。那你的DNS服务器就正常运行了。
  如果检查程序是否正常。。。用我们的nslookup就可以了。。。

   
C:\Documents and Settings\Administrator.XINGKONG-SERVER>nslookup
Default Server:  ns.guangzhou.gd.cn
Address:  202.96.128.143

> server 10.0.0.1                                   //直接使用dns服务器
Default Server:  [10.0.0.1]
Address:  10.0.0.1

> set type=all                                      //设置查询类型

> bbs.best.bendy.com                                //bbs是sweet.config设置的组名,best.bendy.com是在lbnamed.conf设置的
Server:  [10.0.0.1]
Address:  10.0.0.1

bbs.best.bendy.com      canonical name = bbs2.bendy.com        //返回的信息。是DNS系统分配了bbs2给你这次的查询(按二台服务器返回的负荷情况来分配的,并非随便分配的)
bbs2.bendy.com  internet address = 192.168.1.2                 //而bbs.bendy.com在该在DNS系统的A记录是192.168.1.2//最后结果bbs.best.bendy.com得到的IP地址是192.168.1.2


====
自此。。服务器方面的配置已经完成。
跟着是我们配置具体域名的dns解析。。。

方法也是很简单,以bendy.com为例,在bendy.com的DNS管理加上以下记录
一、加上二个best.bendy.com的ns记录为ns1.bendy.com和ns2.bendy.com(也可以不止二个的.取决你有多少台服务器运行lbnamed
二、加上第一条添加的ns记录的实际指向iP,分别指向各个运行lbnamed的服务器,比如ns1.bendy.com address 10.0.0.1/ns2.bendy.com address 10.0.0.2等。
三、添加bbs1.bendy.com和bbs2.bendy.com等的实际ip地址。。。正如刚才所说...bbs.best.bendy.com只将DNS记录转移为bbs1.bendy.com或者bbs2.bendy.com。而lbnamed是没权对bbs1.bendy.com和bbs2.bendy.com进行解析的。。。所以。需要bendy.com的NAMESERER对它进行解析。
(ps:bbs1.bendy.com的记录并不一定要求与lbnamed程序的相同。。。)
四、最后。。添加bbs.bendy.com cname to bbs.best.bendy.com。。。哈哈。。。大功告成。。。


DNS解析完成后,我们就完成本次任务了。。。。
小弟的表达能力有限。如有什么不明白的地方。请到https://discuz.dismall.com/forumdisplay.php?fid=34&page=1这里发表意见



Bendy
原创于2004.5.30
Email & msn: Bendy@etang.com
发表于Discuz Unix 茶馆https://discuz.dismall.com/forumdisplay.php?fid=34&page=1
转载请保留版权和说明出处

[ Last edited by BENDY on 2004-5-30 at 09:01 PM ]
cqfanli 发表于 2004-5-30 20:59:02 | 显示全部楼层
顶楼,支持的说.......
VERY GOOD,我给你加8分....
回复

使用道具 举报

haohaoo 发表于 2004-5-30 23:02:54 | 显示全部楼层
这样不就要3台服务器了吗?
域名解析到dns服务器那台?
回复

使用道具 举报

 楼主| BENDY 发表于 2004-5-31 03:23:03 | 显示全部楼层
Originally posted by haohaoo at 2004-5-30 11:02 PM:
这样不就要3台服务器了吗?
域名解析到dns服务器那台?

DNS服務器可以是任何一臺服務器啊。也可以是均衡服務器之一。或者二臺都是均衡服務器。
回复

使用道具 举报

cqfanli 发表于 2004-5-31 09:18:43 | 显示全部楼层
DNS本身對系統負擔不大,但如果被人DDOS.......... 自己會麻煩一些,所以一般很少自己安裝BIND的。
簡單的東西不容易出問題!
回复

使用道具 举报

穆亦风 发表于 2006-1-9 15:05:38 | 显示全部楼层
这个是好东西,一定要顶
回复

使用道具 举报

Nanu 发表于 2006-1-9 22:44:26 | 显示全部楼层
好东西!梦版给你+8分,我给你加精!呵呵。

不过DNS Round Robin负载均衡真正的缺点并不在于无法探测负载,而在于一旦集群中一台服务器出现故障,DNS无法即时动态的踢除该服务器的A记录,所以客户依然可能解析到故障服务器,也就无法访问了。

对于这一点LVS做的就很好,能够动态判断集群中的故障服务器并从LVS列表中踢除,待故障服务器恢复后自动再添加该服务器记录。
回复

使用道具 举报

Nanu 发表于 2006-1-9 22:53:36 | 显示全部楼层
仔细读了一下,好像是个不错的东西,但是有两点疑问:

1、Perl本身就是一个很“厉害”的GCI工具,lbname使用perl是否会有漏洞,如果有那后果不堪设想,想起当年由于AWSTATS Perl漏洞引起的灾难性后果,至今心有余悸;

2、连BIND都时不时有漏洞报出(BIND漏洞基本每年都在UNIX安全漏洞排行上榜上有名),那lbname本身有没有BUG呢?毕竟用的人不多,而且集群系统对可用性、稳定性的要求都是相当高的。不知道有没有更多的实际应用案例。
回复

使用道具 举报

lenchowong 发表于 2006-1-25 00:23:22 | 显示全部楼层
不错
以前NSLOOKUP WWW。SINA。COM。CN的时候就发现好多IP
还以为是出错
呵呵
回复

使用道具 举报

hypozhong 发表于 2007-12-13 21:13:02 | 显示全部楼层
poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
  但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。


我是一个不懂perl的人。第一样的per程序地址,是哪一断啊。这篇文章好是好,对于我这样的菜鸟讲解还不够清楚。
请问谁这么做成功了,发点详细的教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-20 01:25 , Processed in 0.032451 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表