提醒:配置好之后在测试的时候必须保存session在不同的应用服务器(tomcat,jboss,weblogic等)的复制。
配置工具官方下载地址:http://httpd.apache.org/download.cgi(百度有安装教程,该中间在windows下配置负载均衡比较稳定)
负载均衡就是把所有用户的访问压力分散到多台服务器上,也可以分散到多个tomcat里。
首先创建一个Web项目,在项目的web.xml中需要加上以下配置,表明该应用可多应用分流处理,能进行session的复制。
<display-name> 就是web项目的描述信息,在应用服务器控制台上可以作为标志
<distributable> 元素为空标签,它的存在与是否可分布式处理.如果web.xml中出现这个元素,则代表站台开发时,已经被设计为能在多个JSP Container之间分散执行。
<display-name>TomcatClusterDemo</display-name> <distributable/>
服务端要使用几个tomcat进行负载就配置几个tomcat服务的启动。
web服用服务器的部署工作
将两个web项目放到tomcat1,tomcat2的webapps目录下,确认通过tomcat1,tomcat2来进行分流,这两个tomcat的端口,AJP等配置要不一样。
例如tomcat1的servel.xml配置:
<Server port="10005" shutdown="SHUTDOWN">
<Connector port="10001" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" />
<Connector port="20001" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
tomcat2的servel.xml配置:
<Server port="10006" shutdown="SHUTDOWN">
<Connector port="10002" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
<Connector port="20002" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
修改apache的httpd.conf文件
1,在Apache安装目录下找到Apache24/conf/下的 httpd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(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
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
2,去掉Include conf/extra/httpd-vhosts.conf前面的注释 #(打开conf文件下extra文件的虚拟主机---httpd-vhosts.conf)
Apache虚拟主机配置的作用:现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录(方法-基于IP配置,基于域名配置,端口配置)
3,在httpd.conf文档最下面加上一下代码:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember ajp://172.16.X.X:20001/ loadfactor=1 route=jvm1
BalancerMember ajp://172.16.X.X:20002/ loadfactor=1 route=jvm2
</Proxy>
ProxyPass / balancer://mycluster/
解释值:
172.16.X.X是tomcat服务器的IP,端口号对应tomcat中server.xml里的ajp的端口号,route对应jvmRoute的配置。
# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!
# 是用来监视负载均衡的工作情况的,调试时可以加上(生产环境中禁止使用!),然后访问 http://localhost/balancer-manager/ 即可看到负载均衡的工作状况。
<Location /balancer-manager>
SetHandler balancer-manager
order Deny,Allow
Deny from all
Allow from localhost
</Location>
详解:
-- 172.16.X.X:20001 和 172.16.X.X:20002 是当前本机地址+端口号
-- 从 ProxyRequests Off 可以看出,负载均衡器就是一个反向代理,只不过它的代理转发地址不是某台具体服务器,而是一个balancer:// 协议
-- ProxyPass / balancer://mycluster协议地址可以随便定义
-- loadfactor 表负载均衡比例划分,取值参数范围1-100
配置虚拟站点
用文本编辑器打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上以下代码:
<VirtualHost *:80>
ServerName 127.0.0.1
ServerAlias localhost
ProxyPass / balancer://mycluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://mycluster/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
</VirtualHost>
---------------------
运行
将两个web项目放入tomcat1和tomcat2中,重启apache,tomcat1,tomcat2
页面多刷新几次,可以尝试轮流关闭tomcat来进行测试
测试本机地址:1270.0.1+对应tomcat中webapp下的相对路径
测试其他:ip地址+对应tomcat中webapp下的相对路径
如果将web项目部署到两个或多个tomcat中,两个tomcat可以随机打印内容到控制台,就说明apache负载均衡配置成功。
80端口是默认端口,将80端口修改成8090或者8080就要显示的通过ip+端口号去调用,不修改直接通过ip访问,因为默认访问的端口就是80。
项目常用部署负载均衡的四种方式
- 通过实现Web服务器实现负载均衡(apache/nginx对tomcat)。
- 使用网络地址转换实现多服务器负载均衡。
- 使用DNS服务器实现负载均衡。
- 通过SQL Server数据库实现负载均衡。