上文中主要介绍了tomcat的集群方式,下边再来说下apache的反向代理。反向代理可以这样来理解,我们通常认为的代理(正向代理)是局域网内部机器本身不能上网,网关可以上网,大家在局域网内是通过网关上网的,这个网关就是个代理机器。反向代理意思就反了过来,现在网关并不是给内部局域网做代理的,而是给外部请求内部局域网做代理的,例如,当前一个应用系统在局域网内的A机器上,外部网络不能直接访问A机器,而是通过网关访问到了A,这里网关就是个反向代理了。
总结:正向代理---为在防火墙内的局域网客户端提供Internet的途径,反向代理---将防火墙后面的服务器提供给Internet用户访问。
大家常说的Apache负载均衡就是利用了Apache的反向代理,再加上负载均衡策略实现的。下边说下apache如何做负载均衡。
打开apache的反向代理功能
在Apache2.2x版本后已经加入了mod_proxy(反向代理)模块,只是默认没有启用而已,下边打开自己机器上Apache目录下的httpd.conf文件,去掉mod_proxy模块前的注释:
<span style="font-size:18px;">#加载mod_proxy LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so </span>
这样即打开了Apache的mod_proxy模块
增加Apache监听端口
在httpd.conf的最后加上如下配置:
<span style="font-size:18px;"><VirtualHost *:8011> ServerAdmin [email]****.com[/email] ServerName localhost ServerAlias localhost ProxyPass / balancer://cluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse / balancer://cluster/ ErrorLog "logs/error.log" CustomLog "logs/access.log" common </VirtualHost> </span>
其中VirtualHost *:80代表笔者本机的http server端口。一般项目都监听在HTTP服务的默认端口80上。
ProxyPass / balancer://cluster/代表所有的请求都会重定向到balancer://cluster/处理。balancer是内置负载。cluster为下边配置中的负载名称(名字随意但上下要保持一致)
ProxyPassReverse / balancer://cluster/是反向代理,也就是将所有的请求反向代理到负载均衡后的应用url路径中。
stickysession=JSESSIONID nofailover=Off是做Session复制用的。(粘性session)
增加负载均衡处理配置
继续在httpd.conf文件尾处增加如下配置:
<span style="font-size:18px;">ProxyRequests Off <proxy balancer://cluster> BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1 BalancerMember ajp://127.0.0.1:28009 loadfactor=1 route=tomcat7_node2 # status=+H为配置热备,当所有机器都over时,才会请求该机器 #BalancerMember http://192.168.1.218:8009 status=+H #按照请求次数均衡(默认) #ProxySet lbmethod=byrequests #按照权重 #ProxySet lbmethod=bytraffic #按负载量,也就是往负载少的派发新请求 #ProxySet lbmethod=bybusyness ProxySet lbmethod=bybusyness </proxy> </span>
其中ProxyRequests Off为关闭正向代理,因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。这里用Apache的反向代理,所以先把正向代理给关了。
<span style="font-size:18px;">BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1</span>
为负载的成员都有哪些(将外部请求转发到哪些集群成员上),18009为tomcat的ajp端口,注意在同一机器上两个tomcat的端口不要一致。
route为路由标识,为上文tomcat中的jvmRoute,注意要跟上文中的tomcat中的名字保持一致
ProxySetlbmethod即是负载均衡算法策略。此处使用的是按照负载量,吞吐量少Node的之后可要小心喽,分配到你的任务可就多了。而byrequests策略更偏重的是次数。
Apache的负载均衡配置已结束,下边就开始测试吧,测试前需要注意一点,如果需要将tomat中的web项目作为默认项目启动(即输入http://localhost:8080即可访问到该项目)时,需要也将apache的负载均衡配置中的
<span style="font-size:18px;">BalancerMember ajp://127.0.0.1:18009 loadfactor=1 route=tomcat7_node1</span>
端口号后也不用加项目名称。如果是非作为tomcat的默认项目,则需要改Apache的配置为ajp://127.0.0.1:18009/WebProject(即加上项目名称),总之就是tomcat和apache的项目路径保存一致即可,否则session信息将无法共享。
测试步骤
1、启动Apache、2个tomcat(不分先后启动,只有都启来即可)
2、访问本机的http://localhost(或者http://localhost/WebProject,根据自己的项目路径)
3、可以看到apache将请求转发到不同的用用服务器上
Apache反向代理结合Tomcat集群来实现负载均衡(四)、Apache反向代理