JBOSS SESSION集羣配置過程

JBOSS SESSION集羣配置過程
vi /usr/local/jboss/server/all/deploy/tc5-cluster.sar/META-INF/jboss-service.xml
找到<config><udp,將><config>到</config>全部註釋掉.
jboss session複製有UDP和TCP兩種方式.UDP採用多播方式,但問題比較多,所以採用TCP方式。

找到<config> <tcp,將><config>到</config>生效.並對該部分進行以下修改:

將全部down_thread和up_thread的false都改爲true.
在<tcp bind_addr=”後填入本機的IP,比如<TCP bind_addr=”>
在<tcpping initial_hosts=”後填入本機和集羣其他全部Jboss節點的IP[7810],比如<tcpping initial_hosts=”192.168.130.95[7810],192.168.130.99[7810],192.168.130.112[7810]”></tcpping>
配置應用程序
在應用程序的web.xml的<web-app>段中增加<distributable />
測試程序
Jboss4集羣配置 (參考資料1)
1.前言
2006年,Jboss公司被Redhat公司收購了。這直接導致Jboss產品結構調整,並將以前收費的Jboss AS文檔改爲免費。jijian91本次集羣試驗的最初依據就是由此得到的Jboss 4.0.5集羣配置文檔。

但這份官方文檔並不可靠,在一些關鍵配置上含混不清,而且夾雜了很多適用於過去版本、現已作廢的Jboss集羣配置內容。這導致本次jboss集羣配置試驗很大程度上是依靠猜測和反覆嘗試完成的。究其原因,是因爲Jboss的集羣特性尚處於發展之中,Jboss開發者還在不停地修改、完善、增加特性,版本間的變化很大,文檔的更新速度和質量難以保證。所以,jijian91提醒各位對官方文檔要認準版本,只可參考,切忌盡信.切切.

2.集羣知識
集羣概念
集羣(Cluster)是一組計算機節點的集合,它們作爲一個整體向用戶提供一組網絡資源。一個理想的集羣對用戶是透明的。用戶由單一入口訪問集羣的資源,從來不會意識到集羣中的節點。在他們看來,集羣是一個系統,而非多個計算機系統。集羣還應該支持隨意增加和減少集羣系統的節點,而這同樣不會影響到用戶的訪問。

集羣分類
習慣上,把集羣分爲高可用(High Availability,簡稱HA)集羣和高性能計算(High Perfermance Computing,簡稱HPC)集羣兩類。

HA集羣的目標是提高系統的可使用性(availability),即可靠性(reliability)和可維護性(maintainability)。請不要將集羣中的可使用性(availability)與UE和交互設計中的可用性(Usability)混淆。

HA集羣的核心是防止單點失效,這一般是通過失敗轉移來實現的,即在一個節點失效後由另一個節點接替服務。不丟失用戶狀態。HA集羣的其他主要特性還包括負載均衡、session同步等。我們使用的SQL Server數據庫的雙機熱備和Oracle的RAC都屬於HA集羣。

HPC集羣採用並行計算技術提供超大規模計算和存儲能力,多數超級計算機都是HPC集羣。這不是我們關注的集羣。

Jboss集羣架構
Jboss集羣是HA集羣。

Jboss集羣有2種架構。一是客戶端攔截器(Client-side interceptor)架構,一是負載均衡器(Load balancer)架構。

客戶端攔截器架構適於用C/S結構,負載均衡器架構適用於B/S結構。本文只敘述負載均衡器架構的Jboss集羣。


負載均衡器架構由負載均衡器和n個集羣節點組成。每個節點是一個Jboss服務器實例。負載均衡器是全局唯一的前置機,全部用戶請求都發到負載均衡器,由其轉發到各節點。當負載均衡器發現一個節點失效後,會將請求轉發到另一個節點上,從而保證服務得以延續。負載均衡器同時負責加權靜態負載均衡調度。總之,負載均衡器的健康程度決定了集羣的全局健康度,負載均衡器失敗將導致集羣全部失效。這是前置機架構集羣的主要潛在問題。

Jboss的負載均衡器架構集羣實際是由Tomcat的HTTP集羣實現的。Jboss有自己的負載均衡器,但效果不佳,官方文檔沒有介紹,幾乎沒有人使用。一般情況下,都是與jijian91一樣採用apache+mod_jk作爲負載均衡器。下文敘述的都是基於這種架構。

mod_jk是apache的一個插件,負責apache與tomcat之間的通訊,是jboss集羣(tomcat集羣)的關鍵。

Jboss版本的選擇
目前,Jboss主要有3、4、5三個版本系列。

Jboss 5目前只有2個beta版,實用尚需時日。

Jboss 3的最後版本是2006年3月更新的3.2.8.SP1。隨着Jboss 4日益成熟和Jboss 5的開發,已經停止更新1年多的Jboss 3逐漸淡出歷史舞臺。

Jboss 4最新版本依次是4.2.1.GA、4.2.0.GA和4.0.5.GA。但官方網站提供的Jboss集羣文檔只更新到4.0.5 GA,所以選擇Jboss 4.0.5 GA實現Jboss集羣。

Jboss各版本的安裝和配置並不相同.不但Jboss 3和Jboss 4的配置文件完全不同,各小版本間也有細微的差別.在集羣中,Jboss、apache、mod_jk之間也存在着特定版本才能配合的情況。所以,爲避免困擾,請嚴格按照以下版本安裝軟件:

JDK 1.5.0.12

Jboss 4.0.5 GA

apache 2.2.4

apache mod_jk 1.2.23

注意,mod_jk有1.x和2.x兩個版本系列。mod_jk 2.x已經停止開發,不能使用。很多人憑直覺認爲mod_jk 2.x肯定比mod_jk 1.x好,結果走了彎路。

 

3.Jboss集羣配置實例概述
下文中,jijian91將以實例來敘述Jboss集羣配置。

該實例包含3個Jboss節點。各節點被動接收負載均衡器轉發的請求。各節點間沒有橫向的聯繫。


4.Jboss集羣負載均衡器配置
步驟
先安裝apache,然後配置mod_jk模塊。

安裝apache
下載apache代碼包,上傳到服務器。

解開代碼包
tar xfvz httpd-2.2.4.tar.gz

編譯
./configure –prefix=/usr/local/apache2 –enable-module=so –enable-module=setenvif –enable-module=rewrite –enable-rewrite=shared –enable-proxy=shared –with-mpm=prefork –enable-so –enable-auth-anon –enable-file-cache=shared –enable-cache=shared –enable-disk-cache=shared –enable-mem-cache=shared

make clean
make
make install

修改配置。本例中,jijian91使用的監聽端口是8080,請根據實際情況修改。
vi /usr/local/apache2/conf/httpd.conf
將Listen 80改成Listen 8080
將User daemon和Group daemon改爲User apache和Group apache
刪除ServerName前的#,將該行改爲ServerName 127.0.0.1:8888

添加用戶和用戶組
groupadd apache
useradd apache –g apache

apache mod_jk配置
下載mod_jk,將其改名爲mod_jk.so,拷貝到/usr/local/apache2/modules下。

順便說一句,找mod_jk模塊費了jijian91很大精力,最後纔在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/目錄下找到。我用的是mod_jk 1.2.23,看到本文的時候,mod_jk應該有新版了。但mod_jk的向下兼容做得不太好,最好先用mod_jk 1.2.23調試,成功後再嘗試換用新版mod_jk。

chmod +x /usr/local/apache2/modules/mod_jk.so

在/usr/local/apache2/conf/httpd.conf的末尾增加:
Include conf/mod_jk.conf

建立空文件/usr/local/apache2/conf/uriworkermap.properties

vi /usr/local/apache2/conf/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

JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1

 

vi /usr/local/apache2/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.130.95
worker.node1.type=ajp13
worker.node1.lbfactor=1
# Define Node2
# modify the host as your host IP or DNS name.
worker.node2.port=8009
worker.node2.host= 192.168.130.99
worker.node2.type=ajp13
worker.node2.lbfactor=0
# Define Node3
# modify the host as your host IP or DNS name.
worker.node3.port=8009
worker.node3.host= 192.168.130.112
worker.node3.type=ajp13
worker.node3.lbfactor=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

說明:
worker.node1.host、worker.node2.host和worker.node3.host要改成jboss集羣各機器的實際IP.
如果有更多的節點,順序定義更多的node段,並在worker.loadbalancer.balance_workers後全部列出.
lbfactor是負載分配權重,值越大分配的負載越多.
更多配置參數詳見tomcat配置說明

配置apache自動啓動
ln –s /usr/local/apache2/apachectl /etc/init.d/apache
chmod 777 /etc/init.d/apache
ln –s /etc/init.d/apache /etc/rc3.d/S80apache
ln –s /etc/init.d/apache /etc/rc3.d/K20apache
ln –s /etc/init.d/apache /etc/rc4.d/S80apache
ln –s /etc/init.d/apache /etc/rc4.d/K20apache
ln –s /etc/init.d/apache /etc/rc5.d/S80apache
ln –s /etc/init.d/apache /etc/rc5.d/K20apache

5.Jboss集羣節點配置
步驟
在集羣的各節點上,先安裝JDK,然後安裝配置Jboss。不用着急,跟着jijian91一步步來。

安裝JDK
http://sun.com下載JDK安裝包,上傳到服務器。

chmod +x jdk-1_5_0_12-linux-i586-rpm.bin
./jdk-1_5_0_12-linux-i586-rpm.bin
根據提示安裝。

設置Java路徑。
vi /etc/profile,在結尾增加:
JAVA_HOME=/usr/java/jdk1.5.0_12
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=.:$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

用JDK代替Redhat Linux AS4預裝的gcj:

cd /usr/bin
ln -s -f /usr/java/jdk1.5.0_12/bin/java
ln -s -f /usr/java/jdk1.5.0_12/bin/javac

執行java –version,顯示以下信息表示jdk正確安裝:
java version “1.5.0_12″
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_12-b04)
Java HotSpot(TM) Client VM (build 1.5.0_12-b04, mixed mode, sharing)

安裝Jboss
下載jboss-4.0.5.GA和jems-installer,並上傳到服務器。

完整安裝Jboss 4.0.3 sp1到4.0.5.GA各版本,必須使用jems-installer和JDK 1.5。

Jboss可以採用圖形方式和命令行方式安裝。圖形方式安裝方便,但要求服務器安裝X windows,且在服務器上操作或使用支持x windows的遠程終端(jijian91推薦用xmanager).

圖形方式
在x windows的終端窗口下,執行java –jar jems-installer-1.2.0.GA.jar,出現Jboss安裝圖形界面。

選擇“中文”。
下一步。
同意協議。
安裝路徑設置爲/usr/local/jboss,下一步。
選擇”all”,下一步。
選擇”advance”,把Name由default改爲all.其餘直接按下一步。
輸入Admin密碼,下一步。
等待安裝結束,完成。

命令行方式
java -jar jems-installer-1.2.0.GA.jar -installGroup all installpath=/usr/local/jboss
mv /usr/local/jboss/server/default /usr/local/jboss/server/all

配置Jboss
修改配置。本例中,提供服務的監聽端口是8888,請根據實際情況修改。
vi /usr/local/jboss/server/all/deploy/jbossweb-tomcat55.sar/server.xml
找到 找到.
注意,jvmRoute是節點號,要與在apache的workers.properties中的定義相對應.

vi /usr/local/jboss/server/all/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml
找到UseJK,改爲true.

配置jboss自動啓動
cp /usr/local/jboss/jboss_init_redhat.sh /etc/init.d/jboss
chmod 777 /etc/init.d/jboss
ln –s /etc/init.d/jboss /etc/rc3.d/S80jboss
ln –s /etc/init.d/jboss /etc/rc3.d/K20jboss
ln –s /etc/init.d/jboss /etc/rc4.d/S80jboss
ln –s /etc/init.d/jboss /etc/rc4.d/K20jboss
ln –s /etc/init.d/jboss /etc/rc5.d/S80jboss
ln –s /etc/init.d/jboss /etc/rc5.d/K20jboss

vi /etc/init.d/jboss
將JBOSS_HOME一行改爲JBOSS_HOME=${JBOSS_HOME:-”/usr/local/jboss”}
將JBOSS_USER一行改爲JBOSS_USER=${JBOSS_USER:-”root”}
將JAVAPTH一行改爲JAVAPTH=${JAVAPTH:-”/usr/java/jdk1.5.0_12″}
將JBOSS_CONF一行改爲JBOSS_CONF=${JBOSS_CONF:-”all”}
將JBOSSSH一行改爲JBOSSSH=${JBOSSSH:-”$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF”}
將eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &改爲eval $JBOSS_CMD_START >${JBOSS_CONSOLE} &
將$SUBIT “$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &”改爲$SUBIT “$JBOSS_CMD_START >${JBOSS_CONSOLE} &”

6.啓動Jboss集羣
步驟
先啓動負載均衡器apache,然後啓動各jboss節點。各jboss節點的啓動順序沒有要求。

啓動負載均衡器apache

在/usr/local/apache2/bin目錄下執行./httpd –k start

在/usr/local/apache2/logs/mod_jk.log中,看到apache初始化mod_jk的日誌:
[Wed Aug 01 10:36:11 2007][6636:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized
[Wed Aug 01 10:36:11 2007][6637:63168] [info] init_jk::mod_jk.c (2743): mod_jk/1.2.23 initialized
後面如有錯誤信息,是因爲集羣中的節點尚未啓動,暫時忽略。

用netstat檢查8080監聽端口存在,apache啓動成功.

啓動Jboss節點
在集羣各機器的/usr/local/jboss/bin,分別執行/run.sh –c all 1>1 2>2 &

用netstat檢查8888端口監聽存在.
用瀏覽器訪問各節點的8888端口,能夠看到jboss的狀態.
Jboss啓動成功.

集羣的生命期
apache能夠自動發現新啓動的Jboss節點。當第一個Jboss節點啓動後,自動創建Jboss集羣。然後依次將其他節點加入到集羣中。現在訪問http://192.168.8.246:8888,能夠看到jboss的狀態.說明請求已經被轉發到Jboss節點。集羣啓動成功。

apache能夠監視集羣中各節點的狀況,自動從集羣中去掉無法訪問的節點,從而保證每個請求都被響應。當集羣的全部節點都停止工作,集羣消亡。

集羣的缺陷和粘着session
截止到現在,Jboss集羣工作得很完美,除了session。

目前配置的Jboss集羣中,各節點是被動的、相互獨立的,相當於增加了節點狀態檢測的DNS輪詢,所以session也是相互獨立的。當同一用戶的2個請求被轉發到不同的Jboss節點上時,會出現session信息假”丟失”的現象。

爲此,Jboss提出粘着session(sticky session)概念。使用粘着session後,來自同一IP的請求將被髮送到同一個Jboss節點,從而保證session使用的連續性。如果應用中沒有使用session,則可以使用非粘着session的jboss集羣。這樣,負載分佈更爲合理。(jijian91的話:也更簡單。)

設置方法是編輯負載均衡器的/usr/local/apache2/conf/workers.properties的worker.loadbalancer.sticky_session。設置爲1使用粘着session,設置爲0不使用粘着session。

使用粘着session還存在一種隱患,當某個節點發生故障時,該節點的session將全部丟失。要徹底解決這個問題,就要用到jboss session複製。

7.Jboss集羣的session複製

原理

jboss session複製是jboss session同步的一種實現。原理是在各Jboss節點間建立橫向聯繫,每個節點都將本節點的session變化同步到其他所有節點上。

jboss的session複製與HTTP集羣是相互配合、相互獨立的兩個系統。session複製是節點間的橫向聯繫,HTTP集羣是負載均衡器與節點的縱向聯繫。

配置Jboss節點


vi /usr/local/jboss/server/all/deploy/tc5-cluster.sar/META-INF/jboss-service.xml

找到<config><udp,將><config>到</config>全部註釋掉.
jboss session複製有UDP和TCP兩種方式.UDP採用多播方式,但問題比較多,所以jijian91採用TCP方式。

找到<config> <tcp,將><config>到</config>生效.並對該部分進行以下修改:

將全部down_thread和up_thread的false都改爲true.
在<tcp bind_addr=”後填入本機的IP,比如<TCP bind_addr=”>
在<tcpping initial_hosts=”後填入本機和集羣其他全部Jboss節點的IP[7810],比如<tcpping initial_hosts=”192.168.130.95[7810],192.168.130.99[7810],192.168.130.112[7810]”></tcpping>
其他參數還包括:
ClusterName是集羣名稱,比如partition1.
在同一局域網內,可以存在多個jboss集羣,根據集羣名稱區分它們.所以,集羣中各節點配置的集羣名稱必須一致,而機器IP則沒有特殊要求,只要它們能相互連通. 理論上,可以在一臺機器上安裝多個Jboss實例,分屬於不同的集羣.但這會極大地增加複雜度,是不好的配置方式.jijian91嚴重不建議給自己找麻煩。

IsolationLevel是隔離等級.
可選值包括:SERIALIZABLE, REPEATABLE_READ, READ_COMMITTED, READ_UNCOMMITTED, 和 NONE。這裏的隔離級別和數據庫的隔離級別有同樣的含義,對於大多數WEB應用程序來講通常設置爲REPEATABLE_READ。

CacheMode是緩存模式。
由於session複製是通過緩存實現的,所以實際上是複製模式.可選值包括:REPL_SYNC 和REPL_ASYNC,確定改變是應該同步還是異步複製。缺省值是REPL_ASYNC.使用同步複製,確保在請求完成之前傳播改變,session同步沒有滯後,但效率低。

配置應用程序

在應用程序的web.xml的<web-app>段中增加<distributable />。

在jboss-web.xml中增加以下內容:

<jboss-web>
<replication-config>
<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
<replication-granularity>SESSION</replication-granularity>
<replication-field-batch-mode>

jboss4集羣配置至此結束。

 

Jboss4集羣配置 (參考資料2)
在default目錄下快速配置JBoss集羣(Web方面)

說起JBoss集羣好像很高深的樣子,其實一點也不恐怖,建立一個集羣很簡單,難的是怎麼針對具體的應用優化服務器和實現負載均衡(學習中^o^)。本文將帶領大家在JBoss的default目錄下建立一個簡單的Web方面的JBoss集羣。

      搭建環境

   兩臺電腦 //其實一臺也夠了,不過需要修改其中一個JBoss監聽的端口,要不然有衝突
   jboss-4.0.4.GA
   apache_2.0.59 //我使用的是apache_2.0.59-win32-x86-no_ssl,其實無所謂的
   mod_jk-apache-2.0.59.so //Apache請求分發的模塊,官網上可以找到

   首先安裝JBoss,我用的是zip格式的,直接解壓縮就可以了,在兩臺電腦裏分別安裝。

   接下來在其中一臺電腦上(這裏是192.168.0.2)安裝Apache(其實應該再找一臺電腦來安裝的),很簡單,略過^o^(偶是不是很懶^o^)

      配置JBoss

   假設兩臺電腦的IP分別爲192.168.0.2和192.168.0.3。我們這裏使用JBoss的default目錄。

   將如下文件從%JBoss_Home%/server/all/lib裏面拷到%JBoss_Home%/server/default/lib目錄下:

   jbossha.jar(加載org.jboss.ha.framework.server.ClusterPartition)
   jgroups.jar(JBoss集羣底層通信協議)
   jboss-cache.jar(加載org.jboss.cache.aop.TreeCacheAop)

   還要從%JBoss_Home%/server/all/deploy裏把cluster-service.xml和tc5-cluster.sar拷貝到%JBoss_Home%/server/default/deploy裏面。

   編輯192.168.0.2的%JBoss_Home%/server/default/deploy/jbossweb-tomcat55.sar/server.xml
   修改下面代碼:

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

 

   修改爲:

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

 

   其中 jvmRoute是用來讓apache識別的節點名稱,一個節點一個名稱,注意不要有重複的(可以結合IP設置)。

   同理編輯192.168.0.3的%JBoss_Home%/server/default/deploy/jbossweb-tomcat55.sar/server.xml
注意把jvmRoute設置爲node2,可以設置成別的只要和192.168.0.2的不重複就行,但是要和Apache的workers.properties(稍後介紹)下的配置一致。

   在%JBoss_Home%/server/default/deploy/jbossweb-tomcat55.sar/ROOT.war/目錄下添加一個新文件夾/test,並在裏面添加如下3個jsp文件:

index.jsp

 1<%@ page contentType="text/html;charset=ISO8859_1" %>
 2
 3<html>
 4<head>
 5<title>Test</title>
 6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 7</head>
 8
 9<body onload="document.form.name.focus()">
10<br><br><br>
11<center>
12The host is : <%=java.net.InetAddress.getLocalHost().toString()%><br>
13Your session id is : <%=session.getId()%><br>
14Your session detail is : <%=session.toString()%><br>
15Your session context is : <%=session.getSessionContext()%><br><br>
16Please input your name:<br>
17<form action="test_action.jsp" method="POST" name="form">
18    <input type="input" name="name"/>
19    <input type="submit" value="提交">
20</form>
21</center>
22</body>
23</html>
24
25


test_action.jsp

 1<%@ page contentType="text/html;charset=ISO8859_1" %>
 2
 3<html>
 4<head>
 5<title>Test Action</title>
 6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 7</head>
 8<%
 9    String name = request.getParameter("name");
10    session.setAttribute("name",name);
11    String host = java.net.InetAddress.getLocalHost().toString();
12%>
13<body>
14<br>
15<br>
16<center>
17The host is : <%=host%><br><br>
18Your session id is : <%=session.getId()%><br>
19Your session detail is : <%=session.toString()%><br>
20Your session context is : <%=session.getSessionContext()%><br><br>
21Your name is : <%=name%><br>
22This name is set into the session.<br>
23Please click <a href="session.jsp">here</a> to check the session valid or not.
24</center>
25</body>
26</html>
27
28


session.jsp

 1<%@ page contentType="text/html;charset=ISO8859_1" %>
 2
 3<html>
 4<head>
 5<title>Test Action</title>
 6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 7</head>
 8<%
 9    String name = null;
10    if(session.getAttribute("name")!=null)
11        name = (String)session.getAttribute("name");
12    String host = java.net.InetAddress.getLocalHost().toString();
13%>
14<body>
15<br>
16<br>
17<center>
18The host is : <%=host%><br>
19Your session id is : <%=session.getId()%><br>
20Your session detail is : <%=session.toString()%><br>
21Your session context is : <%=session.getSessionContext()%><br><br>
22<%
23    if(name!=null){
24        out.print("Your name is "+name+"<br>");
25        out.print("The session is valid.");
26    }
27    else{
28        out.print("The session is invalid!!!");
29    }
30%>
31<a href="index.jsp">Return!</a>
32</center>
33</body>
34<%
35    if(session.getAttribute("name")!=null)
36        session.invalidate();
37%>
38</html>
39
40


   編輯%JBoss_Home%/server/default/deploy/jbossweb-tomcat55.sar/ROOT.war/WEB-INF/web.xml在<web-app>節點下增加如下代碼:

1 <distributable/>

   完成後web.xml代碼如下:

 1<?xml version="1.0" encoding="ISO-8859-1"?>
 2
 3<!DOCTYPE web-app
 4    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 5    "http://java.sun.com/dtd/web-app_2_3.dtd">
 6
 7<web-app>
 8  <distributable/>
 9  <display-name>Welcome to JBoss</display-name>
10  <description>
11     Welcome to JBoss
12  </description>
13  <servlet>
14    <servlet-name>Status Servlet</servlet-name>
15    <servlet-class>org.jboss.web.tomcat.tc5.StatusServlet</servlet-class>
16  </servlet>
17  <servlet-mapping>
18    <servlet-name>Status Servlet</servlet-name>
19    <url-pattern>/status</url-pattern>
20  </servlet-mapping>
21</web-app>
22

   看到第8行了嗎?^o^

   到這裏JBoss就配置完成了^o^

      配置Apache

   JBoss的Web集羣使用apache的mod_jk,瀏覽器請求apache服務器,apache服務器根據workers.properties中的配置進行request分發,apache服務器和Jboss中的Tomcat可以用ajp1.3進行通信的,request通過ajp1.3協議的包裝被髮送到Jboss,Jboss執行後返回結果。

   將下載到的mod_jk-apache-2.0.59.so保存到%Apache%/modules/目錄下,並去掉版本號重命名爲“mod_jk.so”,如果不改也可以在mod-jk.conf文件(稍後介紹)裏修改配置。

   在%Apache%/conf/目錄下新建mod-jk.conf,並將如下代碼添加進去:

 1# Load mod_jk module
 2# Specify the filename of the mod_jk lib
 3LoadModule jk_module modules/mod_jk.so
 4# Where to find workers.properties
 5JkWorkersFile conf/workers.properties
 6# Where to put jk logs
 7JkLogFile logs/mod_jk.log
 8# Set the jk log level [debug/error/info]
 9JkLogLevel debug
10# Select the log format
11JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
12# JkOptions indicates to send SSK KEY SIZE
13JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
14# JkRequestLogFormat
15JkRequestLogFormat "%w %V %T"
16# Mount your applications
17#JkMount /application/* loadbalancer
18JkMount /* loadbalancer
19# You can use external file for mount points.
20# It will be checked for updates each 60 seconds.
21# The format of the file is: /url=worker
22# /examples/*=loadbalancer
23JkMountFile conf/uriworkermap.properties
24# Add shared memory.
25# This directive is present with 1.2.10 and
26# later versions of mod_jk, and is needed for
27# for load balancing to work properly
28JkShmFile logs/jk.shm
29# Add jkstatus for managing runtime data
30<Location /jkstatus/>
31JkMount status
32Order deny,allow
33Deny from all
34Allow from 127.0.0.1
35</Location>

   上述代碼的第3行就是配置mod_jk.so模塊的路徑。

   編輯%Apache%/conf/httpd.conf在最後一行添加如下代碼:

1Include conf/mod-jk.conf


   在 %Apache%/conf/目錄下添加workers.properties文件,該文件就是配置Apache所要將request轉發到的JBoss的路徑信息,代碼如下:

 1# 定義request所要轉發到的節點
 2worker.list=loadbalancer,status
 3# 定義節點 Node1
 4worker.node1.port=8009
 5worker.node1.host=192.168.0.2
 6worker.node1.type=ajp13
 7worker.node1.lbfactor=1
 8worker.node1.cachesize=10
 9# 定義節點 Node2
10worker.node2.port=8009
11worker.node2.host=192.168.0.3
12worker.node2.type=ajp13
13worker.node2.lbfactor=1
14worker.node2.cachesize=10
15# 負載配置
16worker.loadbalancer.type=lb
17worker.loadbalancer.balance_workers=node1,node2
18worker.loadbalancer.sticky_session=0
19worker.status.type=status


   上述代碼中:
   port是配置JBoss AJP所監聽的端口號,可以在%JBoss_Home%/server/default/deploy/jbossweb-tomcat55.sar/server.xml 看到,如下

1<!-- A AJP 1.3 Connector on port 8009 -->
2<Connector port="8009" address="${jboss.bind.address}"
3         emptySessionPath="true" enableLookups="false"
4         redirectPort="8443" protocol="AJP/1.3"/>

   host定義JBoss所在機器的IP地址
   lbfactor定義該節點的權重,數字越大分發到該節點的request越多
   cachesize是servlet線程池的大小(對session複製有影響)

   到這裏所有的配置就全部完成啦^o^

   啓動192.168.0.2上的apache和兩臺機器上的JBoss。
   打開瀏覽器,輸入網址訪問apache:http://192.168.0.2/test/index.jsp,回車!看到了吧?

   頁面上有JBoss所在機器的IP地址,刷新頁面還能看到IP在變化,說明apache將request分發到了不同的JBoss上,在輸入框中輸入隨便一個字符串並提交還能測試JBoss 的session複製情況。

^o^

很好的文章,uriworkermap.properties文件沒有創建,需要創建.不然會報錯

(轉自:http://blog.csdn.net/dong_007_007/article/details/2832970)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章