apache tomcat jk整合群集负载均衡
本文是接上面文章所做的tomcat群集,以及session的复制环境:centos5.4apache2.2tomcat6.0 jk1.3
目的:单机上2个tomcat做到负载均衡并且session在多个tomcat之间复制
1 修改server.xml配置文件(直接贴我自己的)
[*]tomcat1的配置文件
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]tomcat2的配置文件
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
2 http下配置
workers.properties配置
[*]worker.list=controller
[*]
[*]worker.worker1.type=ajp13
[*]worker.worker1.host=localhost
[*]worker.worker1.port=8009
[*]worker.worker1.lbfactor=1
[*]worker.worker1.cachesize=10
[*]worker.worker1.cache_timeout=600
[*]worker.worker1.socket_keepalive=1
[*]worker.worker1.socket_timeout=300
[*]
[*]worker.worker2.type=ajp13
[*]worker.worker2.host=localhost
[*]worker.worker2.port=18009
[*]worker.worker2.lbfactor=1
[*]worker.worker2.cachesize=10
[*]worker.worker2.cache_timeout=600
[*]worker.worker2.socket_keepalive=1
[*]worker.worker2.socket_timeout=300
[*]
[*]worker.controller.type=lb
[*]worker.retries=3
[*]worker.controller.balance_workers=worker1,worker2
worker.controller.method=B
# 如何选择最优的worker, B: 选最不忙的, R: 缺省
worker.controller.sticky_session=0
[*]worker.controller.sticky_session_force=0
[*]#ticky_session sticky_session_force 含义
# true false SESSION会复制,有粘性
# true true SESSION不复制,有粘性
# false false SESSION会复制,无粘性
# false true SESSION会复制,无粘性
# *注意*worker.controller.sticky_session=1,等同于worker.controller.sticky_session=true.此处指定集群是否需要会话复制,
#如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此
#Tomcat服务器上处理;如果设为false,则表明需求会话复制。这就是说,如果你要想进行均衡负载,并在192.168.1.5和192.168.1.3
#两台机器的Tomcat实例上实现集群全局session复制,此处值要设置成false。
#sticky_session 1: True, otherwise False, 相同sessionid一直访问同一服务器
#sticky_session_force session id出错状态不返回500(Server Error),由另一worker接手
配置uriworkermap.properties
[*]JkMount /servlet/* controller
[*]JkMount /*.jsp controller
配置httpd.vhost.conf
[*]NameVirtualHost *:80
[*]
[*] ServerAdmin webmaster@dummy-host.example.com
[*] DirectoryIndex index.html index.htm index.jsp
[*] DocumentRoot "/opt/webapps/test1"
[*] ServerName localhost
[*] ErrorLog "logs/dummy-host.example.com-error_log"
[*] CustomLog "logs/dummy-host.example.com-access_log" common
[*] Include /usr/local/apache/conf/uriworkermap.properties
[*]
[*] Options Indexes FollowSymLinks
[*] AllowOverride None
[*] Order allow,deny
[*] Allow from all
[*]
[*]
3 测试负载均衡
写一个 jsp 来进行测试
[*]
刷新这个页面(可以换浏览器刷新),然后查看
/usr/local/tomcat1/logs/catalina.out
/usr/local/tomcat2/logs/catalina.out
可以看到2边都会出现==========test========
说明负载成功
4 测试session复制
建一个index.jsp
[*]
[*]
[*]Cluster App Test
[*]
[*]Server Info:
[*]
[*] 0) {
[*] String dataValue = request.getParameter("dataValue");
[*] session.setAttribute(dataName, dataValue);
[*]} out.print("Session 列表"); Enumeration e = session.getAttributeNames();
[*]while (e.hasMoreElements()) {
[*] String name = (String)e.nextElement();
[*] String value = session.getAttribute(name).toString();
[*] out.println( name + " = " + value+"");
[*] System.out.println( name + " = " + value);
[*] }
[*]%>
[*]
[*] 名称:
[*]
[*] 值:
[*]
[*]
[*]
[*]
[*]
[*]建立/opt/webapps/test1/WEB-INF文件夹
新建web.xml文件
内容如下
[*]
[*]
[*]
[*]
[*] TomcatDemo
[*]
[*]
注意:在应用的web.xml加入即可
然后打开首页同时观察tomcat的日志,可以发现tomcat1在运行这个页面,同时记录了session,然后你停止
tomcat1,会刷新页面你会发现tomcat2依旧保存这个session,说明tomcat1和2session之间是复制了
页:
[1]