分享

apache 负载均衡

 集微笔记 2013-07-31
一般来说,负载均衡就是将客户端的请求分流给后端的各个真实服务器,达到负载均衡的目的。还有一种方式是用两台服务器,一台作为主服务器(Master),另一台作为热备份(Hot Standby),请求全部分给主服务器,在主服务器down,立即切换到备份服务器,以提高系统的整体可靠性。 

1.apache 目录中httpd.config中加入(头部信息是有的,可以将注释去掉)
LoadModule proxy_module modules/mod_proxy.so  # 提供代理服务器功能
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #提供负载均衡功能
LoadModule proxy_http_module modules/mod_proxy_http.so# 让服务器支持http协议 也可以写其它的服务
如mod_proxy_ftp 可以访问apache文档查看详细的其它配置
2.
ProxyRequests Off
<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.100:8080/
    BalancerMember http:// 192.168.1.100 :8089/
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/

# 调试信息
<Location /balancer-manager>
    SetHandler balancer-manager
    order Deny,Allow
    Deny from all
    Allow from localhost
</Location>

注:  http://192.168.1.100:8080/   http:// 192.168.1.100 :8089/  为两台服务器(本机测试)
在我的这两个服务器下都有一个test项目,test中放index.jsp  8080 服务器输出8080。。。。8089服务器输出8089。。。。
重启apache 访问 localhost:test/index.jsp,被转向的服务器是1:1的 。可以配置

 负载比例分配  
修改 BalancerMember http://192.168.1.100:8080/  loadfactor=5 
    BalancerMember http:// 192.168.1.100 :8089/ loadfactor=1  

重启apache 那么被转向到8080这台服务器的与被转向8089这台服务器的比率是5:1

分配apache是提供有算法的,比如
 需求:来自同一个session的请求,转发到同一个server上.
修改httpd.conf

LoadModule headers_module modules/mod_headers.so #  需要mod_headers来设置response headers. 

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http:// 192.168.1.100 :8080/  route=server1
BalancerMember http:// 192.168.1.100 :8089 / route=server2
</Proxy>
ProxyPass / balancer://mycluster/ stickysession=ROUTEID
ProxyPassReverse / balancer://mycluster/

这样,如果浏览器第一次访问时,如果访问了server2,那么以后来自同一个session的请求都会发送至server2。

ProxyPassReverse
如果 http://192.168.1.100:8080/test/index.jsp 被redirect到了 http://192.168.1.100:8080/test/test.jsp ,那么当访问http://localhost/test/index.jsp 时,本应被redirect到 http://192.168.1.100:8080/test/test.jsp 的响应被改成了被redirect到http://localhost/test/test.jsp 。redirect的请求仍会经过负载均衡。 

各种算法的原理请参见 http://httpd./docs/2.2/en/mod/mod_proxy_balancer.html   

热备份(Hot Standby) 
热备份的实现很简单,只需添加 status= H 属性,就可以把某台服务器指定为备份服务器: 

ProxyRequests Off
<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.100:8080/
    BalancerMember http:// 192.168.1.100 :8089/ status= H 
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/ 
如果8080 down掉则会启用8089
调试
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow 
Deny from all
Allow from all
</Location>
访问localhost/
balancer-manager可以看到服务器信息
最后将我做的全部配置拿出来:
LoadModule proxy_module modules/mod_proxy.so#提供代理服务器功能
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so#提供负载均衡功能
LoadModule proxy_http_module modules/mod_proxy_http.so#请求支持http协议
LoadModule headers_module modules/mod_headers.so#设置response headers


Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

ProxyRequests Off
<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.100:8080/ route=server1 # 分配的8080服务器
    BalancerMember http://192.168.1.100:8089/ route=server2 #分配的8089服务器
</Proxy>
ProxyPass / balancer://mycluster/ stickysession=ROUTEID #根据sessionid请对到对应服务器
ProxyPassReverse / balancer://mycluster/ 
<Location /balancer-manager>#调试
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location>
8080服务器中放test项目 index.jsp test.jsp  index.jsp中response.setRedirect("test.jsp")
8089服务器中放test项目index.jsp test.jsp

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多