基于DNS的多機(jī)均衡負(fù)載的實(shí)現(xiàn)-
前二天為一個(gè)客戶添加了一臺(tái)服務(wù)器。共同承擔(dān)一個(gè)論壇的運(yùn)作。但是。要實(shí)現(xiàn)負(fù)載均衡。的確是件難事。
之前有試過幾個(gè)方法,
一、DNS輪值。。優(yōu)點(diǎn):簡(jiǎn)單實(shí)現(xiàn)。缺點(diǎn):無法檢測(cè)各個(gè)服務(wù)器的負(fù)荷。難控制訪客的訪問地址(一般DNS服務(wù)器都有緩存,所以。效果不明顯)
二、前臺(tái)程序。。使用了一個(gè)類似Zeus Load Balancer的服務(wù)程序。在前臺(tái)接受訪問請(qǐng)求。再分流到各個(gè)實(shí)際的服務(wù)器。
但以上二個(gè)方法都不太適用我的情況。。
第一種。無法正確分配訪客流量。。。常發(fā)生一臺(tái)服務(wù)器的負(fù)荷很大。而另一臺(tái)就很低。。。
第二種。會(huì)占用更多的流量。資源也占用較大。
最好。我還是采用了一個(gè)DNS均衡負(fù)載的方法---lbname。
它的主要效果介紹:
一、基于perl的dns服務(wù)端。應(yīng)用簡(jiǎn)單。
二、自動(dòng)檢測(cè)各個(gè)服務(wù)器的負(fù)荷。然后再按結(jié)果優(yōu)先分配DNS解析。
三、DNS解析實(shí)時(shí)生效。不會(huì)被DNS服務(wù)器緩存。
四、安裝方法簡(jiǎn)單。。。
lbname網(wǎng)頁介紹
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
.
.
下載包說明:
內(nèi)存數(shù)個(gè)目錄
1)lbcd的源代碼。。。。lbcd是lbnamed所用到的服務(wù)器端檢測(cè)服務(wù)器負(fù)荷程序。。每個(gè)需要均衡負(fù)荷的服務(wù)器都需要安裝、運(yùn)行它的。。。
建議下載使用最新的lbcd編譯包。http://www.stanford.edu/~riepel/lbnamed/lbcd-3.1.0.tar.gz 之前的常有編譯錯(cuò)誤的。(這個(gè)也有的。嘻。)
編譯這個(gè)包時(shí)。常會(huì)出錯(cuò)的。如何成功安裝。就看你的本事了。(編輯util.c第123行。在前面加上//)
編譯lbcd成功后。將它復(fù)制到/usr/sbin。那你就可以運(yùn)行它了。。不用加什么參數(shù)了。(運(yùn)行后要停止它就是lbcd -s)
2)lbnamed的服務(wù)器程序perl..分有二個(gè)版本。一個(gè)是perl4.另一個(gè)是perl5.我是使用perl5的。所以用它來說明。
進(jìn)入perl5目錄。。。。。先要配置好lbnamed和poller程序。
說明一下:
lbnamed程序是主程序。提供dns動(dòng)態(tài)解析。嚴(yán)格來說。它已是一個(gè)dns服務(wù)器端程序了。
poller是為lbnamed提供各個(gè)均衡服務(wù)器的負(fù)荷情況。(配合我們之前安裝的lbcd程序使用)
但二個(gè)程序可能都需要更改,請(qǐng)看程序第一行的perl程序地址。。改為你的perl地址。
然后就需要更改程序的配置文件了。
1,lbnamed.conf 要更改的地方有幾個(gè)
一、$hostmaster = "schemers.leland.stanford.edu"; 將schemers.leland.stanford.edu改為你服務(wù)器的域名。。比如host.abc.com 這個(gè)無太大關(guān)系
二、將所有stanford改為你域名的中段(比如bendy.com,就改為bendy),將所有edu改為域名的后綴(比如bendy.com,就改為com)。。這個(gè)很重要。。我建議不要更改best。當(dāng)然你也可以改
2,sweet.config 這個(gè)文件可以是用其它文件名的,具體在lbnamed.conf有設(shè)置。我建議大家先清空這文件。再重新建立新的。
這個(gè)文件的配置方法是
負(fù)荷服務(wù)器host 負(fù)重 組
比如。我自己的情況。有二臺(tái)服務(wù)器。分別是bbs1.bendy.com和bendy2.bendy.com那我的配置文件就是
bbs1 1 bbs
bbs2 2 bbs
配置好這個(gè)文件后。你需要一個(gè)能對(duì)bbs1這個(gè)域名進(jìn)行解析的方法。就是修改/etc/hosts文件。我的情況就是
192.168.1.1 bbs1
192.168.1.2 bbs2
這樣的話。poller程序就會(huì)檢測(cè)111.222.333.001、111.222.333.002的負(fù)荷情況了
至此,DNS服務(wù)器和均衡負(fù)載的服務(wù)器的程序已完成??赡芪业恼f明不太清楚?,F(xiàn)在我就一一列表說明
bbs1服務(wù)器 lbserver1 192.168.1.1 編譯運(yùn)行l(wèi)bcd
bbs2服務(wù)器 lbserver2 192.168.1.2 編譯運(yùn)行l(wèi)bcd
dns服務(wù)器 dnsserver 10.0.0.1 配置lbnamed 在/etc/hosts配置bbs1、bbs2域名解析
這樣的情況下。。在dns服務(wù)器運(yùn)行l(wèi)bnamed程序。系統(tǒng)就開始動(dòng)作了。。lbnamed的啟動(dòng)參數(shù)主要是 -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
如果你沒有那些記錄??次募weet.config.unreach這是代表poller程序無法接收到對(duì)方服務(wù)器的負(fù)荷信息。。請(qǐng)檢查lbcd程序是否運(yùn)行。。
如果程序運(yùn)行正常。那你的DNS服務(wù)器就正常運(yùn)行了。
如果檢查程序是否正常。。。用我們的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服務(wù)器
Default Server: [10.0.0.1]
Address: 10.0.0.1
> set type=all //設(shè)置查詢類型
> bbs.best.bendy.com //bbs是sweet.config設(shè)置的組名,best.bendy.com是在lbnamed.conf設(shè)置的
Server: [10.0.0.1]
Address: 10.0.0.1
bbs.best.bendy.com canonical name = bbs2.bendy.com //返回的信息。是DNS系統(tǒng)分配了bbs2給你這次的查詢(按二臺(tái)服務(wù)器返回的負(fù)荷情況來分配的,并非隨便分配的)
bbs2.bendy.com internet address = 192.168.1.2 //而bbs.bendy.com在該在DNS系統(tǒng)的A記錄是192.168.1.2//最后結(jié)果bbs.best.bendy.com得到的IP地址是192.168.1.2
====
自此。。服務(wù)器方面的配置已經(jīng)完成。
跟著是我們配置具體域名的dns解析。。。
方法也是很簡(jiǎn)單,以bendy.com為例,在bendy.com的DNS管理加上以下記錄
一、加上二個(gè)best.bendy.com的ns記錄為ns1.bendy.com和ns2.bendy.com(也可以不止二個(gè)的.取決你有多少臺(tái)服務(wù)器運(yùn)行l(wèi)bnamed
二、加上第一條添加的ns記錄的實(shí)際指向iP,分別指向各個(gè)運(yùn)行l(wèi)bnamed的服務(wù)器,比如ns1.bendy.com address 10.0.0.1/ns2.bendy.com address 10.0.0.2等。
三、添加bbs1.bendy.com和bbs2.bendy.com等的實(shí)際ip地址。。。正如剛才所說...bbs.best.bendy.com只將DNS記錄轉(zhuǎn)移為bbs1.bendy.com或者bbs2.bendy.com。而lbnamed是沒權(quán)對(duì)bbs1.bendy.com和bbs2.bendy.com進(jìn)行解析的。。。所以。需要bendy.com的NAMESERER對(duì)它進(jìn)行解析。
(ps:bbs1.bendy.com的記錄并不一定要求與lbnamed程序的相同。。。)
四、最后。。添加bbs.bendy.com cname to bbs.best.bendy.com。。。哈哈。。。大功告成。。。
DNS解析完成后,我們就完成本次任務(wù)了。。。。
小弟的表達(dá)能力有限。如有什么不明白的地方。請(qǐng)到http://www.discuz.net/forumdisplay.php?fid=34&page=1這里發(fā)表意見
Bendy
原創(chuàng)于2004.5.30
Email & msn: Bendy@etang.com
發(fā)表于Discuz Unix 茶館http://www.discuz.net/forumdisplay.php?fid=34&page=1
轉(zhuǎn)載請(qǐng)保留版權(quán)和說明出處
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。