概述
负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
前提
你已经安装了Apache,并且已经可以运行。本文采用的系统是:Centos6.2,Apache:Apache 2.2。
配置Apache作为LoadBalance
在http.conf中打开下列服务:
- mod_proxy.so
- mod_proxy_ajp.so
- mod_proxy_balancer.so
- mod_proxy_connect.so
- mod_proxy_http.so
- mod_proxy_ftp.so
1 )轮询均衡策略的配置
所谓轮询均衡策略重在轮询2字,从字面理解就是不断的按照顺序去访问个个服务器,这个有点像歌曲播放里面的按照顺序循环播放。那么这种策略在访问的时候优先级来源于你配置的顺序。下面开始这种策略的详细配置。
进入Apache的conf.d目录,新建一个文件必须以.conf作为文件后缀名:michael.conf,在文件的末尾加入:
ProxyPass / balancer://proxy/ #注意这里以"/"结尾
<Proxy balancer://proxy>BalancerMember http://10.0.11.106:8088/
BalancerMember http://10.0.11.106:8888/
</Proxy>
我们来观察上述的参数“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虚拟服务器的命令,“/”代表发送Web请求的URL前缀,如:http://myserver/或者http://myserver/aaa,这些URL都将符合上述过滤条件;“balancer://proxy/”表示要配置负载均衡,"proxy"代表负载均衡名;BalancerMember 及其后面的URL表示要配置的后台服务器,其中URL为后台服务器请求时的URL。以上面的配置为例,实现负载均衡的原理如下:
假设Apache接收到http://localhost/aaa请求,由于该请求满足ProxyPass条件(其URL前缀为“/”),该请求会被分发到后台某一个BalancerMember,譬如,该请求可能会转发到 http://10.0.11.106:8088/aaa进行处理。当第二个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到http://10.0.11.106:8088/。如此循环反复,便实现了负载均衡的机制。
2) 按权重分配均衡策略的配置
理解这种策略只要理解权重2字即可,下面以一个比喻来说明:
打个比方说, 一件事情, 你给它打100分, 你的老板给它打60分, 如果平均, 则是(100+60)/2=80分. 但因为老板说的话分量比你重, 假如老板的权重是2, 你是1, 这时求平均值就是加权平均了, 结果是(100*1 + 60*2)/(1+2)=73.3分, 显然向你的老板那里倾斜了。假如老板权重是1,你的权重是3,结果是(100*3+60*1)/(1+3)=90。这就是根据权重的不同进行的平均数的计算,所以又叫加权平均数。
理解了权重我们在说说这种策略在实际中代表了什么意思。这种策略其实就是在第一种策略的基础上多加了权重,当客户端进行访问你的应用会多访问权重高的,这里有点类似与线程里面的优先级,优先级高的CPU会多分配时间让它执行,这里也是同样的意义,Apache会让权重高的被访问的次数更多。下面进行详细配置:
ProxyPass / balancer://proxy/ #注意这里以"/"结尾
<Proxy balancer://proxy>
BalancerMember http://10.0.11.106:8088/ loadfactor=3
BalancerMember http://10.0.11.106:8888/ loadfactor=1
</Proxy>
参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到http://myserver/aaa 4次这样的请求,该请求分别被负载到后台服务器,则有3次连续的这样请求被负载到BalancerMember为http://10.0.11.106:8088的服务器,有1次这样的请求被负载BalancerMember为http://10.0.11.106:8088后台服务器。实现了按照权重连续分配的均衡策略。
3) 权重请求响应负载均衡策略的配置
ProxyPass / balancer://proxy/ #注意这里以"/"结尾
<Proxy balancer://proxy>
BalancerMember http://10.0.11.106:8088/ loadfactor=3
BalancerMember http://10.0.11.106:8888/ loadfactor=1
ProxySet lbmethod=bytraffic
</Proxy>
ProxySet命令类似于Map,设置某个参数的值是什么,lbmethod是选择均衡器的负载均衡方式。可以是byrequests,进行加权请求计数,或者是bytraffic,进行加权流量字节计数均衡。默认按请求数。参数“lbmethod=bytraffic”表示后台服务器负载请求和响应的字节数,处理字节数的多少是以权值的方式来表示的。“loadfactor”表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值。根据以上配置是这么进行均衡负载的,假设Apache接收到http://myserver/aaa请求,将请求转发给后台服务器,如果BalancerMember为http://10.0.11.106:8088后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为 http://10.0.11.106:8888 服务器的3倍。
下面对以上的配置进行测试
测试准备
2.在tomcat的webapp目录中新建一个文件夹test,新建test.jsp,写入
<%
System.out.println("===========================");
%>
进行第一个测试:访问http://ip:80/test/test.jsp
测试结果:http://10.0.11.106:8088与http://10.0.11.106:8888后台会进行轮询打印结果
其他测试不在进行......
如果想知道负载均衡详细配置请参考:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass