tomcat+apache实现负载均衡集群

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 webmaster@dummy-host.example.com
#    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了,可以去试试。
 

 


 

 

 

概念: AJP是Apache提供的完成与其它服务器通讯的一种协议。在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块。 配置过程: 1 安装apache 2 测试apache是否安装成功:http://localhost 出现It works! 3 解压、安装tocmat 4 测试tocmat是否安装成功:http://localhost:8080 5 配置tocmat的jdk: 打开startup.bat添加: rem ----------------------------------------------------JDK目录 SET JAVA_HOME=D:\progam\jdk160_05 rem ----------------------------------------------------解压后Tomcat的目录 6 复制tocmat,名字为tomcat2 7 apache 整合tomcat 1)modules目录下添加模块:jk mod_jk-1.2.26-httpd-2.2.4.so 2)修改conf/httpd.conf 最后一行添加: include conf/mod_jk.conf 3)在conf目录下创建mok_jk.conf 内容: #加载mod_jk Module LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so #指定 workers.properties文件路径 JkWorkersFile conf/workers.properties #指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller 4)在confi目录下创建workers.properties 内容为: worker.list = controller,tomcat1,tomcat2 #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=192.168.9.210 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #加权因子 越大执行的请求越多 #========tomcat2======== worker.tomcat2.port=9009 worker.tomcat2.host=192.168.9.210 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) <Server port="8005" shutdown="SHUTDOWN"> 改为: <Server port="9005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> 改为: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> 改为: <Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/> 注意:该处需要与worker.tomcat2.port=9009对应 6 修改jvmRoute 备注与worker.list = controller,tomcat1,tomcat2的tomcat1或tocmat2对应 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值