什麼是公司專屬應用程式叢集
叢集是指把不同的伺服器集中在一起,組成一個伺服器集合,這個集合給用戶端提供一個虛擬平台,使用戶端在不知道伺服器集合結構的情況下可以對這一伺服器集合進行部署應用,擷取服務等操作。叢集是公司專屬應用程式的主要特點,它可以提供:
高擴充性:可以根據自己業務需求添加任意多的伺服器到叢集 高可用性:使用透明的負載平衡和容錯機制,對用戶端隱藏叢集內部的錯誤
不管是擴充自己的叢集的節點數,還是配置負載平衡、容錯,叢集中各節點之間狀態必須保持一致,叢集中狀態保持一致需要藉助與緩衝機制實現(JBoss使用JGroups,Infinispan我們在後面的系列介紹)。如下圖為一傳統公司專屬應用程式叢集模式:
圖-1傳統公司專屬應用程式叢集
圖 中各個步驟描述如下:
1. 用戶端瀏覽器發送請求
2. 負載平衡器轉寄請求到節點1
3. 節點1處理業務時發生異常
4. 負載平衡切換請求到節點2
5. 節點2完成業務請求返回結果給用戶端請求
上述業務請求完成過程中用戶端不知道伺服器端節點1發生異常。業務能夠完成的核心是兩個節點之間即時進行著狀態複製,而狀態複製需要藉助於緩衝架構和產品(JBoss使用JGroups,Infinispan我們在後面的系列介紹)。 使用Apache httpd和JBoss構架高可用叢集環境
Apache httpd作為負載平衡器和後台中介軟體伺服器構建構架高可用公司專屬應用程式叢集是非常普遍的一種方式,當前主要三大中介軟體JBoss,Weblogic,Websphere都支援Apache httpd作為負載平衡器。JBoss做為開源的產品是最被廣泛使用的中介軟體,JBoss在被Red Hat公司收購後又推出企業版EAP(EnterpriseApplication Platform),從而使JBoss在許多核心業務領域被使用。比如印度鐵路系統底層為JBoss; 2012倫敦奧運會系統底層是4台JBoss的叢集等。如下我們將使用JBoss和Apache httpd給出一個構建高可用公司專屬應用程式叢集的解決方案。
方案簡介與目的
本方案使用開源JBoss社區的產品搭建一個高可用企業叢集環境,負載平衡器位於叢集節點之上。通過本方案我們可以體會到公司專屬應用程式的高可用性主要是因為叢集節點之間狀態保持同步,即會話複製(Session Replication),而如何進行會話複製則是本書主要論述的主題。我們先給出本方案的架構圖:
圖-2 方案設計架構
如上,使用JBoss AS7做為叢集節點,為了簡單我們只使用兩台JBoss,即叢集中就有兩個節點。Apache httpd 和 mod_cluster 做負載平衡器,mod_cluster作為Apache的外掛程式模組負責串連Apache和JBoss,根據負載平衡策略分發和請求給後台JBoss,所以我們可以將Apache httpd 加mod_cluster作為負載平衡器。
本方案會話複製是通過JBoss社區產品JGroups和第二代JBossCache產品Infinispan完成的,但本處我們不對JGroups和Infinispan做任何探討,我們將在後面的系列詳細討論JGroups和Infinispan。
另外,本方案是在開源Linux作業系統Fedora 15上進行,我們列出本方案使用的硬體和軟體,三台物理機器,記憶體4GB或以上,安裝Fedora 15後IP地址分別為10.66.192.48,10.66.192.231,10.66.192.232,我們分別對這三台物理機器做相應的安裝如下:
10.66.192.231 – 安裝JDK 1.6,JBoss 7,JBoss節點名稱為node1
10.66.192.232 – 安裝JDK 1.6,JBoss 7,JBoss節點名稱為node2
10.66.192.48 – 安裝Apache httpd,mod_cluster
接下來我們將從方案配置,測試應用的安裝,及結果分析等方面展開討論此方案。 方案配置 下載mod_cluster相關安裝包
在 JBoss 社區mod_cluster頁面(http://www.jboss.org/mod_cluster)選擇下載(Downloads),選定相應的版本(1-2-0-Final),彈出頁面會列出所以相關的 Java 模組(主要用來與JBoss AS 6以及之前的版本完成叢集配置)、編譯完成的Apachehttpd、Apache httpd端動態模組包。根據您的平台選擇相關包進行下載我們會得到如下檔案:
mod_cluster-1.2.0.Final-bin.tar.gz
mod_cluster-1.2.0.Final-linux2-x86-so.tar.gz
mod_cluster-1.2.0.Final-linux2-x86-ssl.tar.gz
解壓mod_cluster-1.2.0.Final-bin.tar.gz我們會得到一些用於JBoss AS 6及之前版本的Java組件和測試例子等。
解壓mod-cluster-1.0.0-linux2-x86-ssl.tar.gz我們會得到一個安裝配置完成的httpd位於opt/jboss目錄下。這裡我們不使用此安裝,我們使用從作業系統層面以安裝包方式安裝,如下文所示。 解壓 mod_cluster-1.2.0.Final-linux2-x86-so.tar.gz ,我們會得到如下包:
mod_advertise.so
mod_manager.so
mod_proxy_cluster.so
mod_slotmem.so
同樣如下文所示我們需要將這些動態包拷貝到Apache httpd 的modules 目錄下,這些包用來維護、管理Apache httpd與後台JBoss之間的串連,通訊。 安裝 Apache httpd
請參照系列一 Apache httpd 安裝(http://blog.csdn.net/kylinsoong/article/details/12291173)
Apache httpd端配置
編輯httpd/conf/httpd.conf,讓httpd監聽在10.66.192.48:80上:
Listen 10.66.192.48:80
拷貝mod_cluster所有.so檔案(mod_advertise.so ,mod_manager.so ,mod_proxy_cluster.so,mod_slotmem.so)到httpd/modules目錄:
cp *.so /etc/httpd/modules
編輯httpd/conf/httpd.conf,注釋掉mod_proxy_balancer模組,以為此模組與mod_cluster相關模組不相容:
# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
在httpd/conf.d目錄下建立JBoss_HTTP.conf檔案,將如下內容添加到此檔案:
# add mod_cluster reference moduleLoadModule slotmem_module modules/mod_slotmem.soLoadModule manager_module modules/mod_manager.soLoadModule proxy_cluster_module modules/mod_proxy_cluster.soLoadModule advertise_module modules/mod_advertise.soListen 10.66.192.48:6666<VirtualHost 10.66.192.48:6666> <Directory /> Order deny,allow Allow from all </Directory> <Location /mod_cluster-manager> SetHandler mod_cluster-manager Order deny,allow Allow from all </Location> KeepAliveTimeout 60 MaxKeepAliveRequests 0 AdvertiseFrequency 5 ManagerBalancerName kylincluster ServerAdvertise Off EnableMCPMReceive On</VirtualHost>
配置完成後重啟 Apache httpd ,如果啟動顯示成功表明配置正確。
JBoss端配置
我們可以通過如下三種方式添加proxy-list,balancer完成JBoss端叢集配置:
1. 修改設定檔
編輯/standalone/configuration/standalone-ha.xml檔案,找到urn:jboss:domain:modcluster部分,修改mod-cluster-config的屬性如下:
<mod-cluster-config advertise-socket="modcluster" proxy-list="10.66.192.48:6666" balancer="kylinBalancer" sticky-session="true" connector="ajp">
儲存修改檔案即完成配置。
2. 通過Web管理介面
以standalone-ha.xml模式(./standalone.sh -c standalone-ha.xml)啟動JBoss後登入管理介面(http://localhost:9990/console),選擇Profile,Web,mod_cluster,在彈出介面點擊相關按鈕,編輯balancer值為kylinBalancer,proxy-list值為10.66.192.48:6666,sticky-session值為true,點擊儲存按鈕即完成配置。
3. 通過命令列管理視窗
以standalone-ha.xml模式(./standalone.sh -c standalone-ha.xml)啟動JBoss後進入到命令列介面,依次執行如下命令:
/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=balancer,value=kylinBalancer)/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=sticky-session,value=true)/subsystem=modcluster/mod-cluster-config=configuration/:write-attribute(name=proxy-list,value=10.66.192.48:6666)
說明:以上三個步驟中提及的proxy-list,balancer的值需要與Apache httpd端配置想對應,我們應該依次對兩個節點進行配置
啟動完成叢集方案配置 1. 啟動Apache httpd
Linux作業系統下使用如下命令完成啟動Apache httpd:
service httpd start
2. 使用如下命令依次啟動JBoss兩個節點
./standalone.sh -c standalone-ha.xml -b 10.66.192.231 -bmanagement 10.66.192.231 -u 239.255.100.100 -Djboss.node.name=node1 -Djboss.mod_cluster.jvmRoute=node1
./standalone.sh -c standalone-ha.xml -b 10.66.192.232 -bmanagement 10.66.192.232 -u 239.255.100.100 -Djboss.node.name=node2 -Djboss.mod_cluster.jvmRoute=node2
3. 檢測啟動情況
啟動完成分別登入如下介面測試:
登入http://10.66.192.48:6666/mod_cluster-manager顯示mod_cluster介面 登入http://10.66.192.231:9990/console顯示節點1管理介面
登入http://10.66.192.232:9990/console顯示節點2管理介面
部署測試應用及結果分析
本部分包括部署測試應用,容錯性和高可用性測試,結果分析三個方面去說明。 部署測試應用
使用git clone 我們本系列所需的測試代碼(參照系列一github用戶端安裝部分),clone完成後進入系列二目錄,也是我們這裡所使用的測試工程,具體:
cd csdn/2/
在該目錄下執行Maven( Maven安裝參照系列一Maven安裝部分)編譯 系列二工程:
mvn clean install
編譯完成後會產生webcluster-session-replication.war,路徑為csdn/2/target/webcluster-session-replication.war, 分別部署