<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

apache<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.2.4
mod_jk-apache-2.2.4.so
jboss-5.1.0.GAjboss-5.1.0.GA-jdk6.zip

相关安装文件自行下载。

为了体现出负载均衡的效果,可以在机器中安装虚拟机Vmware来展示效果。本人使用Vmware5.0操作,虚拟机中同样安装winxp专业版。主机和客机之间可通过飞秋软件来传递文件。为了避免与本机软件冲突,建议在虚拟机中安装apache,安装完成后,需启动http服务。方法如下:

双击“本地连接”=》属性=》高级=》设置=》高级=>选择“本地连接”,点击右侧“设置”=》选择“WEB服务器(HTTP)”确定即可。

如果局域网中使用代理服务器,注意在主机的“局域网设置=》代理服务器”设置中添加例外地址。

首先,编辑 apacheconf/httpd.conf 文件,保证apache加载jk_mod文件,在文件中加入下面的代码

Include conf/mod-jk.conf

然后在apacheconf文件夹中创建一个新的文件,名字要和上面的 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 /application/* 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>   

 

这里注意这句话,要把你下载的mod_jk的文件拷贝到 apache安装目录的modules/下 名字要和mod_jk.so一致

LoadModule jk_module modules/mod_jk.so

 

然后,我们在apache安装目录下的conf/创建uriworkermap.properties文件,来配置哪些请求由JK处理哪些请求让APACHE处理,再文件中加入下面的代码

/jmx-console=loadbalancer

/jmx-console/*=loadbalancer

/web-console=loadbalancer

/web-console/*=loadbalancer

 

然后在apache安装目录下conf/workers.properties加入 负载均衡的配置代码             

# 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=192.168.1.188

worker.node1.type=ajp13

worker.node1.lbfactor=1

worker.node1.cachesize=10

# Define Node2

# modify the host as your host IP or DNS name.

worker.node2.port=8009

worker.node2.host= 192.168.1.100

worker.node2.type=ajp13

worker.node2.lbfactor=1

worker.node2.cachesize=10

# Load-balancing behaviour

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=node1,node2

worker.loadbalancer.sticky_session=1

#worker.list=loadbalancer

# Status worker for managing load balancer

worker.status.type=status

上述代码中:

   port是配置JBoss AJP所监听的端口号,可以在%JBoss_Home%\server\default\deploy\jbossweb.sar\server.xml 看到,如下

<!-- A AJP 1.3 Connector on port 8009 -->

<Connector port="8009" address="${jboss.bind.address}"

         emptySessionPath="true" enableLookups="false"

         redirectPort="8443" protocol="AJP/1.3"/>

     

   host定义JBoss所在机器的IP地址

   lbfactor定义该节点的权重,数字越大分发到该节点的request越多

   cachesizeservlet线程池的大小(对session复制有影响)

             

到此 JK_mod 的配置就完成了,下面配置JBOSS的,这里注意这里文档说的有些问题,因为JBOSS-5.0.0GA的目录有些变化文档上说的是下面的路径

JBOSS_HOME/server/all/deploy/jboss-web.deployer/server.xml

但正确的应该是

JBOSS_HOME/server/all/deploy /jbossweb.sar/server.xml

配置修改如下:注意这里面的jvmRoute="node1"的名字要和jk_mod里面的一致否则会有问题

<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">

... ...

</Engine>

 

到这里JBOSS的基本配置就完成了,JBOSS-5.0.0GAsession共享是默认的配置的

只要在你的APPLICATION工程中加入下面的代码就可以

<?xml version="1.0"?>

<web-app  xmlns="http://java.sun.com/xml/ns/j2ee"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

                              http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

          version="2.4">

   

               <distributable/>

           

    <!-- ... -->

</web-app>

这里还要注意一点:是JMSServerPeerId不能一样,否则启动时会报错,但不影响集群的正常运行(除JMS外)

要修改JBOSS_HOME/server/all/deploy/messaging/messaging-service.xml文件中的ID,要求是数字并且保证集群中每个JBOSSID不一样

<!-- The unique id of the server peer - in a cluster each node MUST have a unique value - must be an integer -->

      <attribute name="ServerPeerID">${jboss.messaging.ServerPeerID:0}</attribute>

启动的JBOSS

run -c all -b 192.168.2.100 注意IP地址要和JK_MOD配置的一致

 

我把我写的简单的测试放入到附件中(将test文件夹放入jboss-5.1.0.GA\server\all\deploy\ROOT.war路径下即可),测试的时候先打开一个node1 做登陆,然后启动第二个node2 然后停掉node1 还是登陆状态 http://localhost/test/index.jsp

JBOSS的配置 缺少了集群的hot-deploy 因为JBOSS5里面已经没有farm service 了,找了很多文档,没有找到解决的办法,希望和大家共同研究。