Jboss集群(三)
1 集成配置
1.1 Apache+mod_jk设置
1.1.1 改变Apache 端口号
- 因为默认的80端口经常是被占用的,所以我改成了8081,当然也可以不改,修改方式如下:文件路径:D:\Program Files\Apache Software Foundation\Apache2.2\conf\ httpd.conf 找到这一行:Listen 8081
- 也需要配置一下ServerName,如果没有配置在mod_jk.log里会报错,同样在上面的文件中找到这行改为:ServerName localhost:8081
1.1.2 拷贝mod_jk-1.2.30-httpd-2.2.3.so
将上面下载的mod_jk-1.2.30-httpd-2.2.3.so文件拷贝到D:\Program Files\Apache Software Foundation\Apache2.2\modules目录下,因为在配置文件中要求引用这个文件,所以我们改一个简单的名叫mod_jk.so
1.1.3 在httpd.conf增加载入mod_jk配置
l 在上面提到httpd.conf文件中增加:LoadModule jk_module modules/mod_jk.so 根据测试这行不加也行,可能是因为在mod_jk.conf文件已经有了这个引用。
l 在上面提到httpd.conf文件中增加:include conf/mod_jk.conf
1.1.4 新建mod_jk配置文件mod_jk.conf
在在上面提到httpd.conf文件中增加:include conf/mod_jk.conf 配置,所以需要在D:\Program Files\Apache Software Foundation\Apache2.2\conf\文件夹下新建一个mod_jk.conf文件,其内容如下:
# Load mod_jk module
# Specify the filename of the mod_jk lib
#加载mod_jk Module: 将下载的 mod_jk-1.2.30-httpd-2.2.3.so 文件放入到Apache_Home\module 并改并为mod_jk.so
LoadModule jk_module modules/mod_jk.so
## 配置 mod_jk
#加载集群中的workers
# 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
#指定哪些请求交给jboss处理,"loadbalancer"为在 workers.propertise里指定的负载分配控制器名
JkMount /* loadbalancer
#JkMount /jkstatus* jkstatus
# 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
#加载workers的请求处理分配文件
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 jkstatus
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
其中JkMount /* loadbalancer的意思是,把所有的请求都发给loadbalancer处理。可以通过修改url来控制发送某些request。
1.1.5 增加workers.properties文件
因为在mod_jk.conf文件中配置了mod_jk的workersFile:JkWorkersFile conf/workers.properties,所以需要在D:\Program Files\Apache Software Foundation\Apache2.2\conf\文件夹下新建workers.properties文件,注意这里必须和引用的文件名相同。workers.properties的内容如下:
#定义request所要转发到的节点
#告诉 JK,哪些 worker 是可用的
worker.list=loadbalancer,jkstatus
# 定义节点 Node1
#lbfactor定义该节点的权重,数字越大分发到该节点的request越多
# modify the host as your host IP or DNS name.
worker.node1.port=8009
worker.node1.host=192.16.90.9
#server的加权比重,值越高,分得的请求越多
worker.node1.type=ajp13
worker.node1.lbfactor=1
# 定义节点 Node2
# modify the host as your host IP or DNS name.
worker.node2.port=8009
worker.node2.host= 192.16.90.87
worker.node2.type=ajp13
worker.node2.lbfactor=1
# 负载配置
#server名为loadbalancer,用于负载均衡
worker.loadbalancer.type=lb
#指定分担请求的jboss
worker.loadbalancer.balance_workers=node1,node2
#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
worker.loadbalancer.sticky_session=True
worker.loadbalancer.sticky_session_force=False
# Status worker for managing load balancer
worker.jkstatus.type=status
其中对于node的命名规则是worker.节点名.xxxx。所以上述文件定义了两个节点:node1和node2。
所有需要负载均衡的节点,都必须在worker.loadbalancer.balanced_workers参数中列举出来。
worker.loadbalancer.sticky_session=True表示当前使用的粘连session,要知道粘连session的具体情况,可以查看1.3.2
worker.loadbalancer.sticky_session_force=False表示如果与用户绑定的server连接不上时,自动转向别的server。
sticky_session=true表示某个请求始终由当前Tomcat处理,不会转移到其他Tomcat上。sticky_session_force=false表示,当前Tomcat挂掉的时候,自动将Session复制到其他Tomcat上。如果将sticky_session_force设置为true,当你关闭一台Tomcat并刷新网页,将得到503错误。但设置为false,关闭一台Tomcat并刷新网页,被关闭的那台Tomcat上的Session会被自动复制到其他Tomcat上,系统继续正常运行。(需要整个刷新页面才能进行session复制,即点浏览器地址上的刷新按钮,或者按F5键---王乐2013-1-14)。
1.1.6 增加workers的请求处理分配文件
在mod_jk.con 中配置了workers的请求处理分配文件,配置如下:
JkMountFile conf/uriworkermap.properties
所以需要求在D:\Program Files\Apache Software Foundation\Apache2.2\conf\文件夹下新建uriworkermap.properties文件,其内容如下:
#所有请求都由loadbalancer这个server处理
/*=loadbalancer
#所有包含jkstatus请求的都由status这个 server处理
#/jkstatus=jkstatus
#这里的"!”是“非”的意思。
/*.gif=loadbalancer
/*.jpg=loadbalancer
/*.png=loadbalancer
/*.css=loadbalancer
/*.js=loadbalancer
/*.htm=loadbalancer
/*.html=loadbalancer
注意:uriworkermap.properties文件中的loadbalancer、jkstatus是在worders.properties 文件中配置的名称。
1.2 Jboss的配置
说明:我使用的jboss版本为4.0.2
1.2.1 增加这个属性jmvRoute="node1"
D:\jboss-4.0.2-bap\server\default\deploy\jbossweb-tomcat55.sar\ server.xm修改为:
<Engine name="jboss.web" defaultHost="localhost" jmvRoute="node1">
请注意,jmvRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由。另外这里有一个小bug, jboss这个属性正确的写法是jvmRoute,但是官司文档、网上都上好多人写成jmvRoute。(使用jvmRoute属性字段—王乐2013-1-14)。
不配置这个属性,粘性session不会起作用,因为负载均衡器会按照这个名称记录当前的 session是属于那个节点的。
1.2.2 建立AJP连接
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3"/>
这个一般就有的,只要看一下端口号就行了,这个端口号对于workers.properties 中的配置:worker.node1.port=8009。
1.2.3 打开JK 开关
D:\jboss-4.0.2-bap\server\default\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xml
<attribute name="UseJK">true</attribute>