I'll be back!

  Focus on BPM, celebrate PegaRULES Process Commander (PRPC)
posts - 76, comments - 161, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Apache+JK+Tomcat负载平衡配置

Posted on 2006-12-14 17:33 zolly 阅读(5230) 评论(0)  编辑  收藏

准备软件
1、  Tomcat5.5.17,下载地址:http://www.apache.org/dist/tomcat/tomcat-5/v5.5.17/bin/
2、  Apache2.2.3,下载地址:http://apache.justdn.org/httpd/binaries/win32/apache_2.2.3-win32-x86-no_ssl.msi ;
3、  mod_jk-1.2.20-apache-2.2.3.so模块,,下载地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.20/

集群与负载平衡
    使用mod_jk默认的以轮循方式进行平衡负载,而集群方式也是使用这种方法进行平衡。Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制。

    集群不同于负载平衡的是,由于集群服务需要在处理请求之间不断地进行会话复制,复制后的会话将会慢慢变得庞大,因此它的资源占用率是非常高的,如果在并发量大的应用中,复制的会话大小会变得相当大,而使用的总内存更是会迅速升高。

    但集群的会话复制,增加了系统的高可用性。由于在每台服务器都保存有用户的Session信息,如果服务器群中某台当机,应用可以自动切换到其它服务器上继续运行,而用户的信息不会丢失,这提高了应用的冗错性。

    具体采用负载平衡还是集群,这要看应用的需求了。

安装配置Apache

    安装前请确认IIS服务停止,因为Apache可能会使用80端口.

1
、下载 Apache 的安装程序 apache_2.2.3-win32-x86-no_ssl.exe 后,安装很简单,一路回车,就此略过。

2 、安装完毕后,将下载的 mod_jk-1.2.20-apache-2.2.3.so改名为mod_jk.so并 复制到 Apache 安装目录下的 modules 子目录中。

3 、然后进入 Apache 安装目录下的 conf 子目录中,打开 httpd.conf 配置文件,在最后插入以下一行: Include conf/mod_jk.conf

4、  conf 子目录下,建立一个新的配置文件: mod_jk.conf ,此文件为 Apache 加载连接器的配置文件,文件名可修改,但要与 httpd.conf Include 的文件名一致,在logs子目录下建立日志文件mod_jk.log,mod_jk.conf内容如下:

# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so

# Where to find workers.properties
JkWorkersFile conf/workers.properties

# Where to put jk logs
JkLogFile logs/mod_jk.log

# Set the jk log level 
[ debug/error/info ]
JkLogLevel info

# Select the log format
JkLogStampFormat 
" [%a %b %d %H:%M:%S %Y] "

# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat
JkRequestLogFormat 
" %w %V %T "

# Mount your applications
JkMount /* loadbalancer

# You can use external file for mount points.
# It will be checked for updates each 
60  seconds.
# The format of the file is: /url
= worker
# /examples/*
= loadbalancer
JkMountFile conf/uriworkermap.properties

# Add shared memory.
# This directive is present with 
1.2.10  and
# later versions of mod_jk
,  and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm

# Add jkstatus for managing runtime data
<Location /jkstatus/>
    JkMount status
    Order deny
, allow
    Deny from all
    Allow from 
127.0.0.1
</Location>
注: 该文件中,有两处设置比较重要:LoadModule与JkMount。LoadModule中要正确设置mod_jk的路径;JkMount指明Apache需要将哪些url进行转发,在上面 的设置中,Apache将会把url路径为 /application/* 的请求发送到mod_jk负载均衡。通过该方式,可以配置Apache提供静态Web页面服务,并把动态页面功能转发到JBOSS服务器。如果希望所有的服务都由JBOSS集群服务提供,则把JKMount设置为JkMount /* loadbalancer即可。

5、  conf子目录下,建立一个新的配置文件:workers.properties,此文件为负载平衡的配置文件,文件名不能修改,这是JK默认的名字,内容如下:
# Define list of workers that will be used
# for mapping requests
worker.list
=loadbalancer,status


# Define Node1
# modify the host as your host IP or DNS name.
worker.node1.port
=8009
worker.node1.host
=localhost
worker.node1.type
=ajp13
worker.node1.lbfactor
=1
#worker.node1.cachesize
=1000


# Define Node2
# modify the host as your host IP or DNS name.
worker.node2.port
=8009
worker.node2.host
=10.225.69.111
worker.node2.type
=ajp13
worker.node2.lbfactor
=1
#worker.node2.cachesize
=1000
#worker.node2.stopped
=1


# Define Node3
# modify the host as your host IP or DNS name.
worker.node3.port
=8009
worker.node3.host
=10.225.69.75
worker.node3.type
=ajp13
worker.node3.lbfactor
=1
#worker.node3.cachesize
=1000
#worker.node3.stopped
=1


# Load-balancing behaviour
worker.loadbalancer.type
=lb
worker.loadbalancer.balance_workers
=node1,node2,node3
worker.loadbalancer.sticky_session
=1


#worker.list
=loadbalancer
# Status worker for managing load balancer
worker.status.type
=status
    除了通过 JKMount 设置转发路径外,你可以通过 JkMountFile 详细设置哪些 url 需要通过 mod_jk 进行负载均衡转发。通过在 APACHE_HOME/conf 目录下创建文件 uriworkermap.properties 进行控制,文件格式为 /url=worker_name:
# Simple worker configuration file
# Mount the Servlet context to the ajp13 worker

/*
=loadbalancer
!/*.gif
=loadbalancer
!/*.jpg
=loadbalancer
!/*.png
=loadbalancer
!/*.css
=loadbalancer
!/*.js
=loadbalancer
!/*.htm
=loadbalancer
!/*.html
=loadbalancer

/prweb/*
=loadbalancer
#/jmx-console/*
=loadbalancer
#/web-console
=loadbalancer
#/web-console/*
=loadbalancer

注:以上定义了三个worker,分别为node1,node2,node2;8009端口是Tomcat默认的ajp端口;定义了一个负载平衡服务器loadbalancer,相关的详细说明可以看官方的网站文档:http://tomcat.apache.org/connectors-doc/,其它节点的定义可以直接Copy,修改一下节点名及IP就好了。
A
worker.list=loadbalancer

设定工作的负载平衡器,各Tomcat节点不能加入此列表。

       Bworker.server99.lbfactor

负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两个节点的权重比为1:1,则为平均分配。

Cworker.loadbalancer.balance_workers=node1,node2,node3

   指定此负载平衡器负责的Tomcat应用节点。

Dworker.loadbalancer.sticky_session=true

   此处指定集群是否需要会话复制,如果设为true,则表明为会话粘性,不进行会话复制,当某用户的请求第一次分发到哪台Tomcat后,后继的请求会一直分发到此Tomcat服务器上处理;如果设为false,则表明需求会话复制。当设置为0(false)时,是基于请求的负载均衡,为1(true)时是基于用户的负载均衡。

Eworker.loadbalancer.sticky_session_force=true

   如果上面的sticky_session设为true时,建议此处也设为true,此参数表明如果集群中某台Tomcat服务器在多次请求没有响应后,是否将当前的请求,转发到其它Tomcat服务器上处理;此参数在sticky_session=true时,影响比较大,会导致转发到其它Tomcat服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。


参考:
http://www.blogjava.net/zolly/archive/2006/12/12/Apache_Tomcat.html
http://www.qqread.com/z/apache/index-0.html
http://www.javazy.com/contentex/200641293233.shtml
http://www.newasp.net/tech/java/14456.html
http://amqir.itpub.net/

只有注册用户登录后才能发表评论。


网站导航: