下面以在apachemod_proxy下做的反向代理负载均衡为配置实例:在站点www.test.com,我们按提供的内容进行分类,不同的服务器用于提供不同的内容服务,将对http://www.test.com/news的访问转到IP地址为192.168.1.1的内部服务器上处理,对http://www.test.com/it的访问转到服务器192.168.1.2上,对http://www.test.com/life的访问转到服务器192.168.1.3上,对http://www.test.com/love的访问转到合作站点http://www.love.com上,从而减轻本apache服务器的负担,达到负载均衡的目的。
) L+ C2 D6 t9 b* W* X, T+ V9 U 首先要确定域名www.test.com在DNS上的记录对应apache服务器接口上具有internet合法注册的IP地址,这样才能使internet上对www.test.com的所有连接请求发送给本台apache服务器。* ~1 C+ h; o- r! f; \1 r' k& w
在本台服务器的apache配置文件httpd.conf中添加如下设置:
# [" N1 m. m- L: ^: n& ` proxypass /news http://192.168.1.1proxypass /it http://192.168.1.2proxypass /life http://192.168.1.3proxypass /live http://www.live.com注重,此项设置最好添加在httpd.conf文件“Section 2”以后的位置,服务器192.168.1.1-3也应是具有相应功能的www服务器,在重启服务时,最好用apachectl configtest命令检查一下配置是否有误。( l6 X: c8 ?% S& C; k
接下来也是我真正想要介绍的2.2版本后在mod_proxy中新添加的mod_proxy_balancer模块给我们带来的新功能。
$ i7 Y# c) T0 m 首先将在主配置文件http.conf以下Module的注释去掉
4 ?4 i0 r; y+ I; b( f) Y) g- g& r LoadModule proxy_module modules/mod_proxy.so
V9 Q+ A6 |5 r) L LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
# ~- k; t; `2 n, Y; x LoadModule proxy_http_module modules/mod_proxy_http.so, h* }6 e' D" o. ?
再并增加以下元素# x* P, p) i" G) A7 d+ v2 Z% s! D- w
ProxyRequests Off3 h( l5 |/ w7 W# l* R& f! [0 t) J1 u
ProxyPass /test balancer://xuanfei stickysession=jsessionid nofailover=On4 G$ z: v; Q) \
proxy balancer://xuanfei/6 d( ?7 W) v3 t" n7 w( ]: c4 C
BalancerMember http://192.168.28.131 loadfactor=1
. @. p" Q4 i9 U) w3 \7 v, a' \ BalancerMember http://192.168.28.130 loadfactor=1
5 ?. {! X, m( H2 {) m /proxy
6 e4 e4 t1 d# g! k( T5 ~- | ProxyPass为代理转发的Url,即将所有访问/test的请求转发到群集balancer://xuanfei$ h( ?6 J& I3 l
loadfactor为各主机间的负载比例参数,可是设置不同指数
( d1 f* x$ Y; ^( Z0 Q/ k% Z% _# r, @ BalancerMember为群集的成员,即群集服务器A或B,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember。
3 f2 @! G L: b 配置好后,启动Apahce服务Location /server-status
" S* w4 c( x/ V- F2 y1 y* r SetHandler server-status
% O& |" r# H3 l+ Z Order Deny,Allow" I8 N# w" v, @: Q m3 ?$ M. s& ~
Deny from all0 Y( f5 ]) Y+ c. A8 A$ T5 d7 ^& C' Q
Allow from all
$ J! q6 {, o1 [ ?" {! r% L /Location; F2 J' ] l0 d7 N
访问xuanfei/test就会看到群集服务器中应用返回的结果。恭喜你,负载均衡和群集已经配置成功了!
% o1 Y" s/ x5 F/ e 而且还可以同样在http.conf主配置文件主添如下元素:
4 O# F b* R* E2 D4 S Location /balancer-manager: Q1 h. h1 F! ]6 z9 W% M$ O7 c, ^/ r+ K
SetHandler balancer-manager
4 E% m( B$ u; j0 f$ v Order Deny,Allow- [5 i# R2 B! _$ ]( d, ^; ^
Deny from all
' ]" Q7 K, @8 U3 ~3 J; C8 C, j0 Z Allow from all" r; s8 o+ A) [: ]6 [
/Location
2 i* O' g' r0 g* H+ v 假如配置成功后你可以可以在地址栏输入 xuanfei/balancer-manager,将可以清楚的看到各节点的工作运行状态:)- y2 A$ s6 e5 D* X9 U
同样还可以同样在http.conf主配置文件主添如下元素:+ q% z: h, ?% G" y" A
Location /server-status
# L Y" x- q2 f0 R, D: O SetHandler server-status; \. r; i& c6 q1 [4 T
Order Deny,Allow
" ^& `6 k7 `) N( d, I) ] Deny from all
1 m# ?3 c* a/ F) R7 T9 w% E Allow from all% V, `; S4 ~: r/ E: I) B
/Location
% y2 \' ]1 {' D3 e 便可以方便的观测到主服务器的当前运行状态,只要在地址栏输入 xuanfei/server-status
4 z8 M* ]+ s) U! v* c9 s# X 用ab对apache负载均衡集群的性能测试对比报告
7 E$ a8 x* k; V& X' Q 小结:apache自带mod_proxy功能模块中目前可以实现两种不同的负载均衡集群实现方式,第一种是分工合作的的形式,通过各台主机负责不同的任务而实现任务分工。第二种是不同的机器在担任同样的任务,某台机器出现故障主机可以自动检测到将不会影响到客户端,而第一种却不能实现但第一种实现方式的优点在于他是主服务器负担相应没第二种大因为台只是提供跳转指路功能,形象的说他不给你带路只是告诉你有条路可以到,但到了那是否可以看到你见的人他已经不会去管你了:)。相比之下第二种性能要比第一种会好很多;但他们都有个共同点都是一托N形式来完成任务的所以你的主机性能一定要好。 |