Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性管理指南

第 10 章 RMI-IIOP 負載平衡和容錯移轉

本章說明如何將 Sun Java System Application Server 的高可用性功能透過 RMI-IIOP 用於遠端 EJB 參照和 JNDI 物件。

簡介

透過 RMI-IIOP 負載平衡,可將 IIOP 用戶端請求分散至不同的伺服器實例或名稱伺服器中。其目的為在整個叢集上平均分散負載,從而提供可延伸性。結合了 EJB 叢集和可用性的 IIOP 負載平衡還可提供 EJB 容錯移轉。

當用戶端執行 JNDI 物件查詢時,命名服務會建立與特定伺服器實例相關聯的 InitialContext (IC) 物件。從那時起,使用該 IC 物件進行的所有查詢請求均會傳送至相同的伺服器實例。使用該 InitialContext 查詢的所有 EJBHome 物件均會在相同的目標伺服器上託管。之後取得的所有 Bean 參照也會建立在相同的目標主機上。由於建立 InitialContext 物件時,所有用戶端會隨機選取即時目標伺服器的清單,因此,此作業可有效地提供負載平衡。如果目標伺服器實例當機,則查詢或 EJB 方法呼叫將容錯移轉至其他伺服器實例。

IIOP 負載平衡與容錯移轉不需設定即可執行。在部署應用程式期間,無需特殊的步驟。但是,向叢集增加新實例或從叢集中刪除實例將不會更新該叢集的現有用戶端檢視。若要如此,必須在用戶端手動更新端點清單。

需求

如果以下所有條件均適用,則 Sun Java System Application Server Enterprise Edition 可透過 RMI-IIOP 提供遠端 EJB 參照和 NameService 物件的高可用性︰

對於存取 Application Server 上部署的 EJB 元件的以下 RMI-IIOP 用戶端,Application Server 支援其負載平衡。


備註 –

Application Server 不支援透過安全套接字層 (SSL) 執行 RMI-IIOP 負載平衡和容錯移轉。


演算法

Application Server 使用隨機演算法和循環演算法,進行 RMI-IIOP 負載平衡和容錯移轉。

在 RMI-IIOP 用戶端首次建立新的 InitialContext 物件時,會針對該用戶端產生隨機的可用 Application Server IIOP 終點清單。對於該 InitialContext 物件,負載平衡器會將查找請求和其他 InitialContext 作業導向至隨機清單中的第一個終點。如果第一個終點不可用,則使用清單中的第二個終點,依此類推。

隨後每次用戶端建立新的 InitialContext 物件時,將自動重建終點清單,使用不同的 IIOP 終點進行 InitialContext 作業。

在您從透過 InitialContext 物件獲得的參照中獲取或建立 Bean 時,將在提供 IIOP 終點 (指定給 InitialContext 物件) 的 Application Server 實例上,建立這些 Bean。對這些 Bean 的參照包括叢集中所有 Application Server 實例的 IIOP 終點位址。

主端點是與用於查詢或建立 Bean 的 InitialContext 端點相對應的 Bean 端點。叢集中的其他 IIOP 終點將指定為替代終點。如果 Bean 的主端點變得不可用,則該 Bean 上的其他請求將容錯移轉至其中的一個替代端點。

您可以將 RMI-IIOP 負載平衡和容錯移轉配置為與在 ACC 中執行的應用程式以及獨立的 Java 用戶端配合使用。

範例應用程式

以下目錄包含用於演示透過和不透過 ACC 使用 RMI-IIOP 防故障備用的範例應用程式。

install_dir/samples/ee-samples/sfsbfailover

請參閱此範例隨附的 index.html 檔案,以取得有關在使用和不使用 ACC 的情況下執行應用程式的說明。ee-samples 目錄還包含有關設定環境以執行範例的資訊。

設定 RMI-IIOP 負載平衡和容錯移轉

您可以為在應用程式用戶端容器 (ACC) 中執行的應用程式和獨立用戶端應用程式設定 RMI-IIOP 負載平衡和容錯移轉。

Procedure為應用程式用戶端容器設定 RMI-IIOP 負載平衡

此程序提供了有關將 RMI-IIOP 負載平衡和容錯移轉與應用程式用戶端容器 (ACC) 配合使用所需步驟的簡介。如需有關 ACC 的額外資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide」中的「Developing Clients Using the ACC」

  1. 請至 install_dir/bin 目錄。

  2. 執行 package-appclient

    此公用程式可產生 appclient.jar 檔案。如需有關 package-appclient 的更多資訊,請參閱 package-appclient( 1M)

  3. appclient.jar 檔案複製到用戶端所在位置的機器,並將其解壓縮。

  4. 編輯 asenv.confasenv.bat 路徑變數,以參照該機器上的正確目錄值。

    該檔案位於 appclient-install-dir/config/

    如需欲更新的路徑變數之清單,請參閱 package-appclient( 1M)

  5. 如果需要,使 appclient 程序檔成為可執行檔。

    例如,在 UNIX 上使用 chmod 700

  6. 尋找叢集中實例的 IIOP 偵聽程式連接埠號。

    將 IIOP 偵聽程式指定為用於確定哪個 IIOP 偵聽程式接收請求的端點。若要在管理主控台中顯示 IIOP 偵聽程式,請執行以下作業︰

    1. 在管理主控台的樹形元件中,展開 [叢集] 節點。

    2. 展開該叢集。

    3. 選取叢集中的實例。

    4. 在右窗格中,按一下 [特性] 標籤。

      記下特定實例的 IIOP 偵聽程式連接埠。

    5. 對每個實例重複該程序。

  7. 編輯端點值的 sun-acc.xml

    使用之前步驟中的 IIOP 偵聽程式,依循以下格式建立端點值︰

    machine1:instance1–iiop-port, machine2:instance2–iiop-port

    例如︰

    <property name="com.sun.appserv.iiop.endpoints" value="host1.sun.com:3335,host2.sun.com:3333,host3.sun.com:3334"\>

  8. 使用 --retrieve 選項部署用戶端應用程式,以取得用戶端 jar 檔案。

    將用戶端 jar 檔案儲存在用戶端機器上。

    例如︰

    asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp

  9. 執行應用程式用戶端,如下所示︰

    appclient -client clientjar -name appname

接下來的步驟

若要測試容錯移轉,請停止叢集中的某個實例,然後查看該應用程式是否正常工作。您也可在用戶端應用程式中包含中斷點 (或暫停)。

若要測試負載平衡,請使用多個用戶端,然後查看負載在所有端點中的分散方式。

Procedure為獨立用戶端設定 RMI-IIOP 負載平衡和容錯移轉

  1. 使用 --retrieve 選項部署應用程式,以取得用戶端 jar 檔案。

    將用戶端 jar 檔案儲存在用戶端機器上。

    例如︰

    asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp

  2. 執行用戶端 jar 以及所需的 jar 檔案,然後指定端點並將 InitialContext 指定為 -D 值。

    例如︰

    java -Dcom.sun.appserv.iiop.endpoints=
    host1.sun.com:33700,host2.sun.com:33700,host3.sun.com:33700 
    samples.rmiiiopclient.client.Standalone_Client
接下來的步驟

若要測試容錯移轉,請停止叢集中的某個實例,然後確認應用程式是否正常工作。您也可在用戶端應用程式中包含中斷點 (或暫停)。

若要測試負載平衡,請使用多個用戶端,然後查看負載在所有端點中的分散方式。