在 JBoss server 上開啟 cluster 非常容易,本文章是用來記錄一些備忘。
假設有兩台 AP Server S1、 S2 其相關環境如下
s1 ip 192.168.0.28/24
S2 ip 192.168.0.140/24
在 JBoss AS 下指令如下
run.sh -c all -g
CLUSTER_NAME -b
IP_ADDRESS -Djboss.mesaging.ServerPeerId=
SERVER_PEER_ID說明
CLUSTER_NAME : 指 cluster 的名稱,用以區隔不同的 cluster
IP_ADDRESS : 指JBoss AS 綁定 ip 位置
SERVER_PEER_ID : 設定 serverPeerId,預設都會是0,必須指定不同的數字用以區隔。否則啟動第二台 AP 時會引發錯誤
如 run.sh -c all -c c1 -b 192.168.0.28 -Djboss.messaging.ServerPeerId=1
如 run.sh -c all -c c1 -b 192.168.0.140 -Djboss.messaging.ServerPeerId=2
上述兩個 JBoss AS 綁在不同的 IP 上,具有相同的 cluster 名稱, 不同的 ServerPeerId。
jboss.message.ServerPeerID 參數設定以可以設定在 JBOSS_HOME/server/all/deploy/messaging/messaging-servie.xml檔中,修改屬性 ServerPeerId 的預設值即可,如此就不用每次啟動時都指定 serverPeerId 值。
如果要提供 Web cluster 的功能,另外需要設定 Web container 的 server.xml 設定檔, 在JBOSS_HOME/server/all/deploy/jbossweb.sar/server.xml 中 Engine tag 中加入 jvmRoute="node1" 這樣屬性,用以使前端的 apache server 用以辦視是那台 AP 在服務現的連線。
前端 HTTP Server 設定
除了設定 cluster 外尚設定前端 apache server 使其能負責分流的工作。
在這邊我們採用 apache mod_proxy_ajp 模組來擔任 load balancer 的角色
所以在 apache server 必須要 load 進 mod_proxy.so、 mod_proxy_balancer.so、mod_proxy_ajp.so 等3個模組
apache 的設定檔如下
接下來我們寫一個應用範列
web.xml
要注意要設定 <distributable/> 這個 tag 否則 session 不會進行複製。
jsp 內容 :
連線後我們可以看到 header
因為有設 jvmRoute 的關系,連線請求會送至上次所服務的主機,所以我們會看到主機名稱都相同。
我們可以關閉目前服務的 JBoss Server,這時我們可以看到網頁由另一主機繼續提供服務。
透過 Balancer Manager 來關閉與設定主機連機
可以觀察雖然關閉與其中主機連線 counter 的號碼還是繼續進的。
主機1
主機2
或者也可透過 mBean 來觀察
連線方式:開啟 JConsole 以遠端方式連線
service:jmx:rmi://
your_ip/jndi/rmi://
your_ip:1090/jmxconnector
mBean 路徑: jboss.web:type=Manager,host=localhost,path=/
your_contextName