生产要利用apache做热备了。
做了个测试,验证热备的效果和切换的时间。
测试客户端为loadruner, 10个并发用户
apache配置如下:
<Proxy balancer://databuscluster>
BalancerMember http://10.17.34.226:38085
BalancerMember http://10.17.34.226:38084 status=+H
</Proxy>
<Location /databus>
ProxyPass balancer://databuscluster/databus
ProxyPassReverse balancer://databuscluster/databus
</Location>
<Location /balancer>
SetHandler balancer-manager
Allow from all
</Location>
从 http://10.17.34.226:/balancer监控结果
step1。 启动两个server ,loadrunner开始发送请求,正常情况下,所有请求发送至38085:
LoadBalancer Status for balancer://databuscluster
StickySession Timeout FailoverAttempts Method
0 1 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.17.34.226:38085 1 0 Ok 7727 5.4M 2.4M
http://10.17.34.226:38084 1 0 Stby Ok 0 0 0
step2。 关闭主服务器(38085)后,请求转发至热备服务:
LoadBalancer Status for balancer://databuscluster
StickySession Timeout FailoverAttempts Method
0 1 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.17.34.226:38085 1 0 Err 16714 12M 5.1M
http://10.17.34.226:38084 1 0 Stby Ok 1132 805M 352M
关闭主服务时切换服务时,测试端出现10次错误(测试端并发刚好10个user)
Action.c(36): Error -26610: HTTP Status-Code=502 (Proxy Error) for "http://10.17.34.226:8001/databus/services/databus"
step3。 重启主服务(28085)一段时间后(感觉是秒级的,可能apache有参数设置吧),请求发送至主服务器(38085):
LoadBalancer Status for balancer://databuscluster
StickySession Timeout FailoverAttempts Method
0 1 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.17.34.226:38085 1 0 Ok 19467 13M 7.7M
http://10.17.34.226:38084 1 0 Stby Ok 7441 5.2M 2.3M
之后没有请求再发往备机:
LoadBalancer Status for balancer://databuscluster
StickySession Timeout FailoverAttempts Method
0 1 byrequests
Worker URL Route RouteRedir Factor Set Status Elected To From
http://10.17.34.226:38085 1 0 Ok 24340 17M 9.2M
http://10.17.34.226:38084 1 0 Stby Ok 7441 5.2M 2.3M