Apache负载均衡配置

使用 Apache HTTP Server 搭建负载均衡

* 配置方法: *
1. 找到 Apache 安装目录下的 conf 目录下的 httpd.conf 配置文件,进行如下修改:

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  

#轮询式负载均衡
<Proxy "balancer://mycluster">  
BalancerMember http://taobao.com
BalancerMember http://tmall.com
</Proxy>  
ProxyPass "/test" "balancer://mycluster"
ProxyPassReverse "/test" "balancer://mycluster"  

  前面三句都是 把一些模块 load 进来,<Proxy> </Proxy> 里面的语句就是设置负载均衡的 url 地址,例如我这里把请求(负载) 均衡分配到 taobao 和 tmall 两个 url 上,也就是把请求重定向到 这两个 url 去,因为是后台的重定向,所以前端地址栏的 url 显示地址不会改变,所以前端看到的就以为是请求的地址返回的内容,实际后台已经把请求转交给别的地址(应用)去处理了。如果是前端的重定向,例如 JSP 的重定向,则地址栏也会改变为重定向之后的 url 。后面两句 ProxyPass 是设置映射关系,这种负载均衡是通过反向代理的方式,关于反向代理的解释,参考 反向代理为何叫反向代理?–知乎

  这种配置方法使用的是轮询式负载均衡,也就是把请求轮流地分派给 BalancerMember。有其他更高级的均衡方法,见后文的参考链接或自行搜索。

  LoadModule 语句在文件内也可能自带有,但默认是被注释掉了,也可取消注释不新写一句了 Load 语句。这句话的作用是将所需的模块(可以理解成代码块)导入进来,模块统一放在 Apache 安装目录的 modules 目录下,若在 modules 目录中没有相应的模块,则会 LoadModule 失败,修改 httpd.conf 文件后重启 Apache 失败,查看 Apache 错误日志会报类似 Load Module fail 的 error 。另外, 某些版本的 Apache ,Load balancer Module 同时需要 Load 另外一个 module 进来,若发现某句 LoadModule 语句导致 Apache 无法重启,很可能就是这个原因,同理通过查看错误日志,看还需要 Load 什么其他模块。其余的重启失败的原因同理,可自行去查看 Apache 错误日志,看看报的时什么错误。

  如果 modules 目录下没有响应的 .so 模块,则需要自行导入,目测Windows下的 Apache 以上三个 modules 都齐全,而 IBM HTTP Server (IBM 定制化的Apache)则可能默认在 modules 目录下没有 balancer 模块,这时去找找 modules 目录下的 WebSphereCE 目录,应该就会发现该模块,直接把它复制到 modules 目录下即可。

  注意每次修改完该配置文件后,须重启 Apache 才能生效,若重启失败,去查错误日志解决error。

  注意要保证每个url都是可以访问的,否则不会跳转到该url去,在负载均衡中,如果某个url是不可访问的(例如机器挂掉了),自然不会把任务分给他。

参考链接:
实战,利用apache来做集群,实现负载均衡

posted @ 2017-08-24 10:10  Victor_Lv  阅读(1028)  评论(0编辑  收藏  举报