Apache+mod_jk+Tomcat/Glassfish负载均衡配置

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!

说明:这里是用Apache做前端的负载分配器,一个tomcat和一个glassfish作后端的处理器。tomcat的AJP监听端口是8010,glassfish的AJP监听端口是8009。

预备

  • Apache 1.3.33 (已经安装并配置好)
  • Tomcat 6.0.18 / Glassfish V2 (已经安装并配置好)

配置

1、打开%APACHE_HOME/conf/httpd.conf。

1
2
3
4
5
6
7
8
9
10
11
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/work_balance.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /hello/* loadbalancer

2、打开%APACHE_HOME/conf/work_balance.properties(如果不存在,则新建此文件)。配置内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Define 1 real worker using ajp13
worker.list=loadbalancer
# Set properties for worker_glassfish.(ajp13)
worker.worker_glassfish.type=ajp13
worker.worker_glassfish.host=127.0.0.1
worker.worker_glassfish.port=8009
worker.worker_glassfish.lbfactor=50
worker.worker_glassfish.cachesize=10
worker.worker_glassfish.cache_timeout=600
worker.worker_glassfish.socket_keepalive=1
worker.worker_glassfish.socket_timeout=300
# Set properties for worker_tomcat. (ajp13)
worker.worker_tomcat.type=ajp13
worker.worker_tomcat.host=127.0.0.1
worker.worker_tomcat.port=8010
worker.worker_tomcat.lbfactor=50
worker.worker_tomcat.cachesize=10
worker.worker_tomcat.cache_timeout=600
worker.worker_tomcat.socket_keepalive=1
worker.worker_tomcat.socket_timeout=300
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker_glassfish,worker_tomcat

说明:

  • worker.list=loadbalancer:设定工作的负载平衡器,各Tomcat节点不能加入此列表。
  • worker..lbfactor:负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两个节点的权重比为1:1,则为平均分配。
  • worker.loadbalancer.balanced_workers=worker_glassfish,worker_tomcat:指定此负载平衡器负责的Glassfish节点和Tomcat节点。
  • worker.loadbalancer.sticky_session =true:此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。
  • worker.loadbalancer.sticky_session_force =true:如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果负载均衡群中某台服务器在多次请求没有响应后,是否将当前的请求,转发到其它服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它 服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。

注意:sticky_session 和 sticky_session_force 设置为true时,还需要对Tomcat进行特别配置,仅对tomcat有效。

验证

打开浏览器,输入URL,进行多次请求,会发现有时请求被转发到Tomcat,有时被转发至Glassfish。如下面两个图的所示:
图1-请求转发至Glassfish

图2-请求转发至Tomcat

参考资料

1、http://tomcat.apache.org/connectors-doc/reference/workers.html