2.4 叢集

在叢集環境中使用使用者應用程式時,您必須考量下列三項:

2.4.1 叢集 JBoss

叢集是提供一組服務的應用程式伺服器節點集合。 叢集的目的是增加應用程式的效能和可靠度。 通常,叢集會為企業應用程式提供三個主要優點:

  • 高可用性
  • 延展性 (更多功能)
  • 載入平衡

高可用性表示應用程式是可靠的,且在部署的大部份時間內都可用。 因為在所有節點上執行的都是相同的應用程式,所以叢集可以提供高可用性。 如果一個節點失敗,則應用程式仍會在其他節點上執行。 當 Identity Manager 使用者應用程式以叢集的方式執行時,會從較高的可用性中獲益。 不過,Identity Manager 使用者應用程式不支援 HTTP 會期複製。 這表示如果某節點上的會期在進行中,而該節點失敗,則會期資訊將遺失。

載入平衡可以在叢集的成員之間分配工作量。 載入平衡的目的是增進效能。 您可以藉由各種方式 (例如,DNS 遞迴、硬體載入平衡),以達到載入平衡。 如需各種載入平衡方法的討論,請參閱 http://www.onjava.com/pub/a/onjava/2001/09/26/load.html。 無論選定方法為何,您都需要在叢集組態中包含載入平衡。

JBoss 叢集群組

JBoss 叢集基於名為 JGroups 的通訊模組。 JGroups 與 JBoss 一起安裝 (沒有 JBoss 也可以使用它)。 JGroups 提供群組之間的通訊,它們會共享公用名稱、多路廣播位址和多路廣播連接埠。

當您安裝叢集的 JBoss 伺服器時,JBoss 會定義兩個不同的 JGroups 群組,以用於管理叢集。 其中一個稱為 DefaultPartition,並在 /deploy/cluster-service.xml 中定義。 JBoss 會使用此叢集群組來提供核心叢集服務。 JBoss 還會定義名為 Tomcat-Cluster 的第二個叢集群組。此叢集群組在 /deploy/tc-cluster-service.xml 中定義。 此叢集群組為在 JBoss 內執行的 Tomcat 伺服器提供會期複製。

Identity Manager 使用者應用程式使用第三個叢集群組。 此叢集群組使用通用唯一識別碼 (Universally Unique Identifier,UUID) 名稱,以將與使用者可能新增至其伺服器之其他叢集群組的衝突風險降至最低。 叢集群組預設命名為 c373e901aba5e8ee9966444553544200。不使用 JBoss 服務檔案設定此叢集的組態。 而是組態設定位於目錄中,且可利用使用者應用程式管理功能來設定組態。 如果您熟悉 JGroups 和 JBoss 叢集,則可以使用此介面來調整使用者應用程式叢集組態。 僅當重新啟動伺服器節點時,該節點的叢集組態變更才會生效。

使用者應用程式叢集群組僅用於調整叢集環境中的使用者應用程式快取。 它獨立於兩個 JBoss 叢集群組,且不會以任何方式與它們互動。 在預設狀態下,使用者應用程式叢集群組和兩個 JBoss 群組使用不同的群組名稱、多路廣播位址和多路廣播連接埠,所以不需要重新設定組態。

使用者應用程式叢集群組設定由任何共享目錄組態的 Identity Manager 3 應用程式共享。 使用者應用程式管理介面中本地設定選項的目的是:可讓管理員從叢集移除節點,或在叢集中變更伺服器的成員資格。 例如,您可以在全域停用叢集,然後針對共享目錄組態的伺服器子集,於本地啟用該叢集。

應用程式 Farming

藉由將應用程式 EAR、WAR 或 JAR 複製到一個叢集之 JBoss 例項的 farm 目錄,JBoss 可讓您在叢集中進行快速部署。 當叢集在執行中時,在一個機器上快速部署會導致在叢集內的所有例項上自動部署元件。

不建議在 JBoss Application Server (4.0.2) 版次 (在撰寫此文件時,該版次包含於使用者應用程式安裝程式中) 中使用此種形式的應用程式部署,因為使用它會發生無法解決的問題。 不過,我們已提供您必須執行的基本步驟 (請參閱使用 JBoss Farming 將使用者應用程式部署到叢集),以使用 JBoss Farming 技術順利部署使用者應用程式,因為我們預期在本文件出版之後會對此技術有所改進。

MySQL 資料庫

使用者應用程式安裝程式會安裝 MySQL 資料庫管理員,並建立與使用者應用程式搭配使用的資料庫,或使用現有的 Oracle、Microsoft SQL Server 或 MySQL 資料庫。 資料庫負責資料保存。 JBoss 叢集中的所有節點都必須存取相同的資料庫例項。 使用者應用程式會使用標準 JDBC 呼叫來存取和更新資料庫。 使用者應用程式會使用結合至 JNDI 網路樹的 JDBC 資料來源,以開啟資料庫的連接。 如果您利用使用者應用程式安裝程式來建立 JBoss 叢集,則會為您安裝資料來源。 如果您選擇手動設定 JBoss 叢集,則需要將資料來源檔案 (IDM-ds.xml) 複製到叢集中所有節點上的部署目錄。 同時,如果您是在使用 MySQL,則需要將位於 JBoss /server/IDM/lib 目錄的 MySQL JDBC 驅動程式 (mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar),複製到 JBoss server/IDM/lib 目錄。

記錄

若要啟用叢集的記錄,您需要編輯位於 JBoss 伺服器組態之 \conf 目錄 (例如,\server\IDM\conf) 上的 log4j.xml 組態檔案,並取消類似於如下內容之位於底部區段的註解:

<!--  Clustering logging --> - <!-- Uncomment the following to redirect the org.jgroups and org.jboss.ha categories to a cluster.log file. <appender name="CLUSTER" class="org.jboss.logging.appender.RollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.home.dir}/log cluster.log"/> <param name="Append" value="false"/> <param name="MaxFileSize" value="500KB"/> <param name="MaxBackupIndex" value="1"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> </layout> </appender> <category name="org.jgroups"> <priority value="DEBUG" /> <appender-ref ref="CLUSTER"/> </category> <category name="org.jboss.ha"> <priority value="DEBUG" /> <appender-ref ref="CLUSTER"/> </category> --> 

您可以在 JBoss 伺服器組態的 log 目錄 (例如,\server\IDM\log) 中找到 cluster.log 檔案。

2.4.2 安裝使用者應用程式至 JBoss 叢集

將使用者應用程式安裝至叢集的建議方法是使用使用者應用程式安裝程式,將使用者應用程式安裝至叢集中的每個節點。 雖然不建議使用 JBoss Farming 將使用者應用程式部署到叢集,但是我們已包含可遵循的程序做為替代方法。

在叢集中的每個節點上使用使用者應用程式安裝程式

JBoss 隨附三種不同的可用伺服器組態: minimaldefaultall。僅在 all 組態中啟用叢集。 /deploy 資料夾中的 cluster-service.xml 檔案描述預設叢集分割區的組態。 當您安裝使用者應用程式並指出要在叢集中安裝的安裝程式時,安裝程式會建立 all 組態的副本,將副本命名為 IDM (在預設狀態下,安裝程式可讓您變更名稱),並在此組態中安裝使用者應用程式。

若要利用使用者應用程式「安裝程式」,在叢集中的每個節點上安裝使用者應用程式,請執行下列動作:

  1. 在第一個 JBoss 節點上,執行使用者應用程式 (MySQL、JBoss 和使用者應用程式) 的完整安裝。 如需使用使用者應用程式安裝程式的相關資訊,請參閱《Identity Manager 3 安裝指南》。

    • 如果您是使用 MySQL 做為使用者應用程式的資料庫,則使用者應用程式安裝程式會建立 MySQL 的新安裝。 請記下您指定的 MySQL 根部使用者密碼;當在叢集中的其餘節點上安裝使用者應用程式時,您將需要此資訊。
    • 在安裝程式的 IDM 組態螢幕中,選取「叢集 (全部)」選項。
    • 選取適合您環境的其他安裝選項。
  2. 如果 MySQL 尚未執行,請使用位於 /IDM/mysql 目錄的 start-mysql.bat 檔案,啟動 MySQL。

    附註:在 Linux 上,下列外圍程序指令將會協助您判斷 MySQL 精靈是否正在執行:

    
    ps -A | grep mysqld
    

    如果此指令傳回以 mysqld 結束的數行,則精靈正在執行。

  3. 使用位於 IDM 目錄的 start-jboss.bat (Windows) 或 start-jboss.sh (Linux) 檔案,啟動 JBoss 和使用者應用程式。

    描述: 描述: 圖例
  4. 在 JBoss 叢集中的每個其他節點上,執行使用者應用程式的自定安裝。

    • 只選取要安裝的使用者應用程式:
    描述: 描述: 圖例
    • 指定要安裝使用者應用程式之資料庫的伺服器 IP 位址或主機名稱。
    • 指定使用者應用程式資料庫的資料庫使用者名稱和密碼。 如果您是使用 MySQL,則使用者名稱是 root,而密碼是您在安裝程序之步驟 1 中指定的內容。
    • 在安裝程式的 IDM 組態螢幕中,選取「叢集 (全部)」選項。
    • 選取適合您環境的其他安裝選項。
  5. 使用位於 IDM 目錄的 start-jboss.bat (Windows) 或start-jboss.sh (Linux) 檔案,啟動 JBoss 叢集中的每個節點。

使用 JBoss Farming 將使用者應用程式部署到叢集

請勿將 JBoss Farming 與 JBoss 4.0.2 版或先前版本搭配使用,因為您可能會遇到問題 (請參閱 http://jira.jboss.com/jira/browse/JBAS-1899)。 建議您使用使用者應用程式安裝程式,在叢集中的每個節點上安裝使用者應用程式 (請參閱本章中在叢集中的每個節點上使用使用者應用程式安裝程式)。 不過,如果您想要使用 Farming,以將使用者應用程式部署至使用 JBoss 4.0.3 或更新版本的 JBoss 叢集,請遵循下面的步驟。

附註:這些步驟適用於要獨立以實驗方法使用 JBoss 4.0.3 的客戶。 支援的正式版本是 4.0.2。

若要使用 JBoss Farming 將使用者應用程式部署至叢集,請執行下列動作:

  1. 選取要安裝的使用者應用程式和 MySQL (如果您是在使用 MySQL;否則,僅安裝使用者應用程式),以在其中一個 JBoss 叢集節點上執行使用者應用程式的自定安裝。 您可以在執行節點中所有叢集的同時,執行安裝,但是安裝使用者應用程式的節點應該是要啟動之叢集中的第一個節點。

  2. 將位於 /server/IDM/lib 目錄的 JDBC 驅動程式檔案 (例如,如果您是使用 MySQL,則 JDBC 驅動程式是 mysql-connector-java-3.1.10-utf8-clob-fix-bin.jar),複製到叢集中每個節點所對應的目錄中。

  3. cacerts 檔案從與使用者應用程式一起安裝之 JRE 的 /lib/security 目錄,複製到叢集中每個節點的 JRE /lib/security 目錄。

  4. 將 IDM.war 檔案和 IDM-ds.xml 資料來源檔案從伺服器組態目錄中的 /deploy 目錄,移至伺服器組態目錄中的 /farm 目錄。 您必須確實移動檔案本身。 請勿在 /deploy 目錄中保留原始檔案。

  5. 啟動使用者應用程式的資料庫 (如果您是在使用所提供的 MySQL,請使用位於 /IDM/mysql 目錄的 start-mysql.bat 檔案來啟動 MySQL)。

  6. 在安裝使用者應用程式和使用者應用程式資料庫的節點上,使用位於 IDM 目錄中的 start-jboss.bat (Windows) 或 start-jboss.sh (Linux),啟動 JBoss 和使用者應用程式。

  7. 啟動叢集中的其他節點。

2.4.3 設定使用者應用程式叢集群組快取組態

熟悉 JGroups 和 JBoss 叢集的使用者可以使用使用者應用程式管理使用者介面,修改叢集群組快取組態 (請參閱節 13.3.5, 叢集的快取設定)。 僅當重新啟動伺服器節點時,該節點的叢集組態變更才會生效。

2.4.4 設定叢集的工作流程

工作流程引擎叢集的運作與使用者應用程式快取架構無關。 您必須執行數個步驟,以確保工作流程引擎在叢集環境中正確運作。

  • 叢集中的所有伺服器都需要指向相同的資料庫。 如果您使用建議的方法將使用者應用程式安裝至叢集 (請參閱在叢集中的每個節點上使用使用者應用程式安裝程式),則可藉由在安裝程序期間指定安裝使用者應用程式之資料庫的伺服器 IP 位址或主機名稱,來完成此步驟。 如果您使用 Farming 將使用者應用程式部署至叢集節點 (請參閱使用 JBoss Farming 將使用者應用程式部署到叢集),則可將資料來源檔案 (IDM-ds.xml) 從 /deploy 目錄移至首次安裝使用者應用程式之節點上的 /farm 目錄,來完成此步驟。 這樣會將資料來源部署至叢集中的所有節點。
  • 叢集中的每個伺服器都需要使用唯一的引擎 ID 啟動。 您可以藉由在伺服器啟動時,設定 com.novell.afw.wf.engine-id 系統屬性來完成此動作。 例如,如果您要啟動 JBoss 並將引擎 ID ENGINE1 指定給該伺服器的工作流程引擎,則可以使用下列指令:

    run.sh -Dcom.novell.afw.wf.engine-id=ENGINE1 (Linux)

    run.bat -Dcom.novell.afw.wf.engine-id=ENGINE1 (Windows)

由在特定伺服器上執行的工作流程引擎啟動之後,工作流程程序例項就只能在該伺服器上執行和完成。 這樣可確保工作流程程序安全地執行。 不過,它不提供程序例項容錯移轉支援。 如果叢集中的伺服器當機,則程序例項只有在重新啟動相同 ID 的引擎之後,才會重新啟動。

如果由於嚴重的硬體或軟體失敗而無法重新啟動伺服器電腦,則您可以使用在無法恢復之機器上使用的相同工作流程引擎 ID,在新電腦上啟動應用程式伺服器。 因為引擎 ID 是邏輯名稱,而不是執行引擎之實體電腦的直接映射,所以在新電腦上會順利完成已岔斷的程序例項。

程序例項由啟動程序的引擎所擁有。 不過,使用者可以登入叢集中的任何使用者應用程式,以檢視程序詳細資料、收回程序,或完成所指定的任務。 收回的程序或在不擁有程序之引擎上完成的任務會進入待處理的狀態,一旦擁有它們的引擎發現它們,就會繼續執行。