Apache jboss 集羣詳細配置
一.準備工作
下載jdk ,安裝jdk
下載jboss,安裝jboss
下載apache http,安裝apache http,下載mod_jk-apache-2.0.59.so,拷貝到apache的
modules目錄下
二.配置
1.配置jboss
說明:假設有兩臺服務器,分別安裝了jboss,兩臺服務器的ip地址 爲:192.168.1.1、192.168.1.2
a.拷貝文件
把jboss的server/all/lib目錄下的
jbossha.jar(加載org.jboss.ha.framework.server.ClusterPartition)
jgroups.jar(JBoss集羣底層通信協議)
jboss-cache-jdk50.jar (加載org.jboss.cache.aop.TreeCacheAop)文件拷貝到server/default/lib目錄下
再把jboss的server/all/deploy裏的cluster-service.xml和jboss-web-cluster.sar拷貝到
jboss的server/default/deploy目錄下
b.編輯jboss/server/default/deploy/jboss-web.deployer/server.xml文件
修改下面代碼:
<Engine name="jboss.web" defaultHost="localhost">
修改爲:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">
其中 jvmRoute是用來讓apache識別的節點名稱,一個節點一個名稱。
同理編輯192.168.1.2的jboss/server/default/deploy/boss-web.deployer/server.xml文件,注意
把 jvmRoute設置爲node2,
可以設置成別的只要和192.168.1.1的不重複就行,但是要和Apache workers.properties保持一致
c.編輯jboss/server/default/deploy/jboss-web.deployer/ROOT.war/WEB-INF/web.xml
在<web-app>節點下增加如下代碼:<distributable/>
d.編輯jboss/server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml 文件
把 <attribute name="UseJK">false</attribute>
改爲:<attribute name="UseJK">true</attribute>
這樣的話就會使用粘稠session,這樣可以保證用戶的所有請求都在同一臺服務器上
2.配置apache
說明:我們使用apache的mod_jk來做jboss的web集羣,瀏覽器請求apache服務器,apache服務器根據
workers.properties中的配置 進行request分發,apache服務器和JBoss中的Tomcat可以用ajp1.3進行
通信的,request通過ajp1.3協議的包裝被髮送到JBoss,JBoss執行後返回結果。
a.在apache\conf\目錄下 新建mod-jk.conf文件並添加如下內容:
# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk-apache-2.0.59.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 debug
# 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
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>
b.配置apache\conf\httpd.conf文件
在文件的最後一行加:
# mod_jk config
Include conf/mod_jk.conf
c.apache/conf/目錄下 新建workers.properties文件,該文件就是配置Apache所要將
request轉發到的JBoss的路徑信息,代碼如下:
worker.list=loadbalancer,status
# Node1
worker.node1.port=8009
worker.node1.host=192.168.1.1
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=10
# Node2
worker.node2.port=8009
worker.node2.host=192.168.1.2
worker.node2.type=ajp13
worker.node2.lbfactor=1
worker.node2.cachesize=10
#
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=0
worker.status.type=status
說明:port是配置JBoss AJP所監聽的端口號,可以在
jobss/server/default/deploy/jbossweb.deployer/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越多
cachesize是servlet線程池的大小(對session複製有影響)
3.配置web項目
在web項目的WEB-INF中添加jboss-web.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC
"-//JBoss//DTD Web Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>
<replication-config>
<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
<replication-granularity>SESSION</replication-granularity>
<replication-field-batch-mode>true</replication-field-batch-mode>
</replication-config>
<context-root>/</context-root>
</jboss-web>