基于DNS的多机均衡负载的实现-
! A( x' e4 `+ e) k e3 R2 c( U- ?9 \4 t0 K0 ^0 Y% q/ n
前二天为一个客户添加了一台
服务器。共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
5 v! H! ]$ T, e$ M) f# m之前有试过几个方法,
* i- T3 m" y" H7 a @! Y; f% r
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
! j* L! w% {1 w0 n" r; B1 C7 q' R二、前台
程序。。使用了一个
类似ZeusLoadBalancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
z, v1 _+ ]& ]- G/ K$ i
; C6 r3 [3 B/ D, c' M, b但以上二个方法都不太适用我的情况。。
& M: b5 W8 N8 O. J z& t* ?第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
1 w' O* h8 @! q! u
第二种。会占用更多的流量。资源也占用较大。
5 l" U. j- @+ k4 B
+ s b" b) I! [4 c' T( s* w最好。我还是采用了一个DNS均衡负载的方法---lbname。
( ]1 p% E, L& @ H0 J5 ^它的主要效果介绍:
2 W: q+ B; W, s, T! |
一、基于perl的dns服务端。应用简单。
( i% v; C4 E0 F: L二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
0 {, ]- s% B1 v# ~ f; W" `5 L三、DNS解析实时生效。不会被DNS服务器缓存。
' q9 t4 Y: @' s' i* e: C7 i( I
四、安装方法简单。。。
# m. m! t0 X9 p4 |* u
+ ?9 }8 I1 n+ s3 o2 A* ~# h
& o, ~3 a# ?9 {4 z4 L9 A8 O+ E
) l4 i3 S3 P! T- F" ]9 q) B3 E3 Clbname网页介绍
5 M8 ?6 j& |+ B zhttp://www.stanford.edu/"schemers/docs/lbnamed/lbnamed.html
$ c' k$ X" ~0 l[color=#FFFFFF']
6 s2 m, K8 c0 I e5 h6 d" i
$ s/ R% `8 e; u# M
http://www.stanford.edu/"riepel/lbnamed/2 B# W* d8 I% {% I( _
。
5 p& [8 f4 T/ U" U: e% y( c$ e, J。
! ?4 p) Q$ G; D* T- v" u S* M- d" A) b' B6 O
2 J( X- s- l. n, e, C2 p4 h
下载:
: w( K; {+ G3 C0 R \, A5 y( n
http://www.stanford.edu/"riepel/lbnamed/lbnamed-1.2.1.tar.gz
9 _5 c, m4 H! h ihttp://www.stanford.edu/"schemers/dist/lb.tar% I8 ]$ e8 S- n* w1 k4 h
.
. a( z; X5 r, k/ L.
. ^- C. _9 b4 j3 O! s* t7 R: O2 l- {" B! V& B
下载包说明:
% a( x) O( p& r( Y! t& v内存数个目录
0 S6 [5 g q$ L: b/ \; W
1)lbcd的
源代码。。。。lbcd是lbnamed所用到的服务器端检测服务器负荷程序。。每个需要均衡负荷的服务器都需要安装、运行它的。。。
! C0 A; }' s: p7 ?! \- M
建议下载使用最新的lbcd编译包。
http://www.stanford.edu/"riepel/lbnamed/lbcd-3.1.0.tar.gz 之前的常有编译错误的。(这个也有的。嘻。)
$ i" W/ J3 i, e
编译这个包时。常会出错的。如何成功安装。就看你的本事了。(
编辑util.c第123行。在前面加上//)
6 E1 N8 S* [0 c: U9 i6 { 编译lbcd成功后。将它复制到/usr/sbin。那你就可以运行它了。。不用加什么参数了。(运行后要停止它就是lbcd-s)
! R! u2 g& ?+ ^) f \$ c& K* C$ o n n: Q: \
2)lbnamed的服务器程序perl..分有二个版本。一个是perl4.另一个是perl5.我是使用perl5的。所以用它来说明。
% ]6 U2 T# \' _5 E# v
进入perl5目录。。。。。先要配置好lbnamed和poller程序。
7 l: x7 M8 Z3 [4 o
说明一下:
p% a3 p) ~ s" l3 a! b6 W
lbnamed程序是主程序。提供dns动态解析。严格来说。它已是一个dns服务器端程序了。
- `( ~3 d I, q
poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
: G6 H+ [9 _0 L6 m* g: x" w
但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。
w& _" O4 s* v+ k
. _0 K* n9 i) k' F& A$ \
然后就需要更改程序的配置文件了。
9 ]+ s7 x; x% H! F. w! `: `% P1,lbnamed.conf 要更改的地方有几个
# u; g. q8 b" _" Y* g1 ~: l# ^一、$hostmaster="schemers.leland.stanford.edu"; 将schemers.leland.stanford.edu改为你服务器的
域名。。比如host.abc.com这个无太大关系
! k) k# {# f: I" q# y$ C, C F- ^' I二、将所有stanford改为你域名的中段(比如bendy.com,就改为bendy),将所有edu改为域名的后缀(比如bendy.com,就改为com)。。这个很重要。。我建议不要更改best。当然你也可以改
1 O) s3 q2 S8 n/ ]3 u* z8 X- k
2,sweet.config 这个文件可以是用其它文件名的,具体在lbnamed.conf有设置。我建议大家先清空这文件。再重新建立新的。
I [# P' ?2 G2 Q, C
这个文件的配置方法是
$ F) e# e. k# j3 k
负荷服务器host负重 组
$ P& O0 v7 l" @* H; E" v) m% Q比如。我自己的情况。有二台服务器。分别是bbs1.bendy.com和bendy2.bendy.com那我的配置文件就是
% a+ Z2 ` _9 @+ D. b+ @) _0 D4 f
bbs11bbs
: `, Q% J0 H! p2 i
bbs22bbs
: S" T6 T5 u8 H! `
& A6 J: J, I% | j
配置好这个文件后。你需要一个能对bbs1这个域名进行解析的方法。就是修改/etc/hosts文件。我的情况就是
, p& X: j6 D, ?9 E* ?1 @: S) q
192.168.1.1 bbs1
4 n4 r5 K3 Z b. t192.168.1.2bbs2
+ |0 C/ y6 |& H/ L2 J, }' R
1 R. C3 Q) x9 T9 ~8 Q3 n. z
这样的话。poller程序就会检测111.222.333.001、111.222.333.002的负荷情况了
/ E1 _$ @5 M+ \; x4 s) X4 S" P( v7 d) A+ l. C0 b9 q
至此,DNS服务器和均衡负载的服务器的程序已完成。可能我的说明不太清楚。现在我就一一列表说明
% j- U4 r; ?( G9 w4 M4 D5 `
6 }* G" x' a% f$ zbbs1服务器lbserver1192.168.1.1编译运行lbcd
0 @' X/ q& |1 A$ Abbs2服务器lbserver2192.168.1.2编译运行lbcd
$ J9 X7 r) K. [/ Hdns服务器dnsserver10.0.0.1配置lbnamed在/etc/hosts配置bbs1、bbs2域名解析
# G2 W" P* e' n7 l
, H( t! _$ h. \" c% ^1 C
这样的情况下。。在dns服务器运行lbnamed程序。
系统就开始
动作了。。lbnamed的启动参数主要是-llogfile和-d(debug)
1 H6 E) i/ \! N: ^2 {0 f) F
./lbnamed-llb.log-d
0 r& `- q0 W u8 D5 e+ `" q" y查看记录(类似)
, P0 W) I2 q" o- Jcatlb.log
$ p, y6 ^( B, K' k
8 k8 d2 l+ O. c, L
-=====
8 j4 I( I" V+ [ a05/3000:5921442lbnamedstartingpoller
* p( p7 {/ v) R2 H( u( Y05/3000:5921442lbnamedload_config
( ^. n# I8 F3 Q/ zloading1452bbs2192.168.1.2bbs
2 S% m/ b6 M" v! c" L9 m- j1 p
loading837bbs1192.168.1.1bbs
( d% p: d7 k4 R( w4 V05/3000:5921442lbnamedreadytoanswerrequests
1 V3 \; m: U2 F05/3000:5921442lbnameddo_maint
# L( @3 }" _3 r% b' B6 S
05/3000:5921442lbnamedreloadingconfig
; v$ k0 o3 D9 S3 T. b05/3000:5921442lbnamedload_config
/ R2 n1 y! e9 l6 |
loading1671bbs2192.168.1.2bbs
, o1 I9 b) t0 {) M9 oloading1086bbs1192.168.1.1bbs
: S$ B; J1 U8 v, O$ o6 S8 E
; G" u4 c% {) P9 v; Y" c1 G; E
如果你没有那些记录。看文件sweet.config.unreach这是代表poller程序无法接收到对方服务器的负荷
信息。。请检查lbcd程序是否运行。。
0 p8 b" Q. Z5 }! P2 b5 C1 ]
' k+ Z1 z8 L2 w* A! O, r! [0 Q# Y( x 如果程序运行正常。那你的DNS服务器就正常运行了。
- H: E: U, H1 Y6 f# J6 j& z 如果检查程序是否正常。。。用我们的nslookup就可以了。。。
b! c6 f I6 p; T d0 L
9 ^& q$ Z6 U! H8 e3 v o5 g+ ?! f# T, x4 e, f' h `
C:\DocumentsandSettings\Administrator.XINGKONG-SERVER%26gt;nslookup
4 b! `% t; p; Q8 S: hDefault
Server:ns.guangzhou.gd.cn
; ?+ d2 l4 Y4 F7 Z( zAddress:202.96.128.143
+ m' A" V' G. Z& n1 _ q
n, e7 H( U4 N* V%26gt;server10.0.0.1//直接使用dns服务器
& T) K1 K3 a; iDefaultServer:[10.0.0.1]
) y7 B# C& b' ? V: a
Address:10.0.0.1
2 A. j- c+ L; y% K1 a2 p! z
# h. \/ |8 V! t7 I$ P1 y1 D%26gt;set
type=all//设置查询类型
7 b8 W4 _" Y# e) p5 Z! v2 n
/ B( Q8 u) f7 W2 S% L4 f
%26gt;bbs.best.bendy.com//bbs是sweet.config设置的组名,best.bendy.com是在lbnamed.conf设置的
! p, |( {$ O: \$ DServer:[10.0.0.1]
1 v& [6 h( Q# nAddress:10.0.0.1
% X' s2 _1 C- q9 H* J: s
8 f2 S8 A- _' Q4 m A7 T" ^- Dbbs.best.bendy.comcanonicalname=bbs2.bendy.com//返回的信息。是DNS系统分配了bbs2给你这次的查询(按二台服务器返回的负荷情况来分配的,并非随便分配的)
( d x6 t9 x: [% X3 E$ t# R
bbs2.bendy.cominternetaddress=192.168.1.2//而bbs.bendy.com在该在DNS系统的A记录是192.168.1.2//最后结果bbs.best.bendy.com得到的IP地址是192.168.1.2
/ s. A) I5 x) Z$ o
. l8 w L1 [: r( t$ t) O% _- V3 o k9 H+ H3 U6 B O
====
; O0 \' i% D: K5 m \自此。。服务器方面的配置已经完成。
: y5 a7 |6 ^/ p* V1 ?( D6 K
跟着是我们配置具体域名的dns解析。。。
/ s' W, S. F7 N) _- G& N6 b7 {0 P! A1 } j P' y
方法也是很简单,以bendy.com为例,在bendy.com的DNS
管理加上以下记录
! W" n' @8 w8 {5 W+ }7 K一、加上二个best.bendy.com的ns记录为ns1.bendy.com和ns2.bendy.com(也可以不止二个的.取决你有多少台服务器运行lbnamed
- b( G4 @0 t* P& W# k5 b% I
二、加上第一条添加的ns记录的实际指向iP,分别指向各个运行lbnamed的服务器,比如ns1.bendy.comaddress10.0.0.1/ns2.bendy.comaddress10.0.0.2等。
: L- {. A" k* s( Q三、添加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对它进行解析。
5 w6 ~$ ?/ C6 A1 C' {(ps:bbs1.bendy.com的记录并不一定要求与lbnamed程序的相同。。。)
- M& z, h$ g! M4 N$ R$ _四、最后。。添加bbs.bendy.com cnameto bbs.best.bendy.com。。。哈哈。。。大功告成。。。
+ G4 q' R0 R# f1 o$ e
6 ~9 K3 g! {! ]3 I
3 T, `* \0 L2 Q0 yDNS解析完成后,我们就完
成本次任务了。。。。
6 }. Z" Q5 s/ S5 C# ~
小弟的表达能力有限。如有什么不明白的地方。请到
http://www.discuz.net/forumdisplay.php?fid=34%26;amp;page=1这里发表意见
' H9 u' Y" o& h6 w
: V X x7 z& c( W+ e+ Y
3 q/ r& R; x: u" ]+ V/ ]3 x9 _3 V) T: X* [ t
Bendy
6 ]+ | } Z8 p5 T8 V: V原创于2004.5.30
7 }! ~3 b7 S: V& i/ q5 l$ `' ]Email%26;amp;msn:
Bendy@etang.com. F. } H, @6 q: e! h
发表于Discuz
Unix茶馆
http://www.discuz.net/forumdisplay.php?fid=34%26;amp;page=1
- L& z6 g% g" s0 P( b; F+ a转载请保留
版权和说明出处