Jboss4集群配置【转】
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服務器實例。負載均衡器是全局唯一的前置機,全部用戶請求都發到負載均衡器,由其轉發到各節點。當負載均衡器發現一個節點失效后,會將請求轉發到另一個節點上,從而保證服務得以延續。負載均衡器同時負責加權靜態負載均衡調度??傊?#xff0c;負載均衡器的健康程度決定了集群的全局健康度,負載均衡器失敗將導致集群全部失效。這是前置機架構集群的主要潛在問題。
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
?
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集群。然后依次將其他節點加入到集群中?,F在訪問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>
轉載于:https://www.cnblogs.com/yecllsl/archive/2010/10/13/1849849.html
總結
以上是生活随笔為你收集整理的Jboss4集群配置【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连接数据库报“You have an e
- 下一篇: 深入delphi编程(转)