1,使用负载均衡集群原因
当开发一个流量小,并发量不大的系统的时候,负载均衡集群没什么大的意义。反之则意义重大。
使用apache+tomcat配置负载均衡集群流程如下:用户发送请求到Web服务器(也就是apache) apache 根据定义规则进行http转发到不同的tomcat服务器 。同时要保证各个tomcat服务器之间的消息共享(非常重要!如在tomcat改变某一个内存值的同时要更新到每一台服务器上)实现实时消息同步 。
具体步骤如下:
1.下载JDK 并且配置好
2.下载Apache应用 网址:http://archive.apache.org/dist/httpd/binaries/win32/apache_2.0.55-win32-x86-no_ssl.msi
3 .下载mod_jk(用于连接apache和tomcat) 网址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/mod_jk-apache-2.0.55.so
4.下载 tomcat 7 (tomcat8没试过。)
注意,apache版本要和mod_jk版本一致。
2,开始配置负载均衡
(1)安装配置好tomcat服务器;
(2)安装配置号两个或者以上的tomcat服务器(用于测试集群)
(3)在apache的httpd.cfg下配置加上include conf/mod_jk.conf
#<VirtualHost *:80>
# ServerAdmin [email protected]
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
include conf/mod_jk.conf
(4)把下载的mod_jk 复制到D:\xxxxxx\Apache2\modules 路径下
(5)在conf文件夹下新建mod_jk.conf:
#加载mod_jk Module 注意文件名根据实际情况而填
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.do controller
JkMount /*WEB-INF controller
JkMount /*j_spring_security_check controller
JkMount /*.action controller
JkMount /servlet/* controller
JkMount /*.jsp controller
JkMount /*.do controller
JkMount /*.action controller
JkMount /* controller
#如果想所有的访问都交给负载均衡器,那就 JkMount /* controller
(6)在同路径下(在conf文件夹下)新建workers.properties
#server 列表
worker.list = controller,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=8010
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=8011
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1
解释一下:
workers.properties中已经配置了端口和各个tomcat,从端口找到服务。
sticky_session sticky_session_force 含义
true false SESSION会复制,有粘性
true true SESSION会复制,有粘性
false false SESSION不会复制,无粘性
false true SESSION不会复制,无粘性
worker.controller.sticky_session,设置为1或true使用粘着session,设置为0或false不使用粘着session。如果sticky_session设为true时,建议sticky_session_force设为false,此参数表明如果集群中某台服务器在多次请求没有响应后,将转发当前的请求到其它服务器上处理;sticky_session=false时,影响比较大,会导致转发到其它服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。sticky_session、sticky_session_force的默认值分别为true,false。
worker.controller.sticky_session_force=true,始终转发到session创建的服务器上。
(7)修改两个tomcat的ajp13端口号(和上面myworker.properties)必须一一对应 并且修改两个tomcat中的开启端口号和服务端口号,以免重复
以上基本完成tomcat集群的基本配置 现在要做最重要的session共享; 。
(8)打开两个tomcat配置
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!---->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
把<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>注释去掉。这里的session共享有很多做法,可以查询网上。
(9)8在自己应用服务的web.xml中 <web-app> 模块下加入<distributable />
(10)这样就搭建ok了,可以去试试。