Sun Java System Application Server 9.1 高可用性管理指南

第 11 章 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 負載平衡與容錯移轉不需設定即可執行。在部署應用程式期間,無需特殊的步驟。Application Server 的 IIOP 負載平衡與容錯移轉支援動態重新配置的叢集。如果部署應用程式用戶端的 Application Server 實例加入叢集,則此 Application Server 會自動在叢集中尋找目前所有使用中的 IIOP 端點。因此,若將新實例新增至叢集,或從叢集刪除實例,則不需要手動更新端點清單。不過,用戶端至少應該為啟動程序指定兩個端點,以便在一個端點發生故障時使用另外一個端點。

需求

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

Application Server 可針對在應用程式用戶端容器 (ACC) 中執行的 Java 應用程式進行負載平衡。請參閱設定 RMI-IIOP 負載平衡和容錯移轉


備註 –

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


演算法

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

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

隨後,每當用戶端建立新的 InitialContext 物件時,均會自動重建端點清單,從而將不同的 IIOP 端點用於 InitialContext 作業。

當您從透過 InitialContext 物件取得的參照中取得或建立 Bean 時,會在服務於指定給 InitialContext 物件的 IIOP 端點的 Application Server 實例上建立這些 Bean。對這些 Bean 的參照包括叢集中所有 Application Server 實例的 IIOP 終點位址。

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

您可以配置 RMI-IIOP 負載平衡和容錯移轉來使用 ACC 中執行的應用程式。

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

您可以為應用程式用戶端容器 (ACC) 中執行的應用程式設定 RMI-IIOP 負載平衡和容錯移轉。也支援加權的循環負載平衡。

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

此程序提供了有關將 RMI-IIOP 負載平衡和容錯移轉與應用程式用戶端容器 (ACC) 配合使用所需步驟的簡介。如需有關 ACC 的其他資訊,請參閱「Sun Java System Application Server 9.1 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 偵聽程式連接埠號。

    您可以在步驟 7 中,將 IIOP 偵聽程式指定為端點。

    為每個實例取得 IIOP 偵聽程式連接埠的方法如下:

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

    2. 展開該叢集。

    3. 選取叢集中的實例。

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

    5. 記下實例的 IIOP 偵聽程式連接埠。

  7. sun-acc.xml 檔案中至少新增兩個 target-server 元素。


    備註 –

    開發者設定檔中無法使用叢集功能。如需有關設定檔的資訊,請參閱「Sun Java System Application Server 9.1 管理指南」中的「用法設定檔」


    使用在步驟 6 中所取得的端點。

    如果部署應用程式用戶端的 Application Server 實例加入叢集,則此應用程式伺服器會自動在叢集中尋找目前所有使用中的 IIOP 端點。不過,用戶端至少應該為啟動程序指定兩個端點,以便在一個端點故障時使用另外一個端點。

    target-server 元素可指定負載平衡所使用的一或多個 IIOP 端點。address 屬性是 IPv4 位址或主機名稱,port 屬性則指定連接埠號。請參閱「Sun Java System Application Server 9.1 Application Deployment Guide」中的「client-container」

    您可以改用 endpoints 特性來替代 target-server 元素,如下所示:


    jvmarg value = "-Dcom.sun.appserv.iiop.endpoints=host1:port1,host2:port2,..."
    
  8. 如果需要加權的循環負載平衡,請執行下列步驟:

    1. 設定每一個伺服器實例的負載平衡權數。


      asadmin set instance-name.lb-weight=weight
      
    2. sun-acc.xml 中,將 ACC 的 com.sun.appserv.iiop.loadbalancingpolicy 特性設為 ic-based-weighted

      …
      <client-container send-password="true">
        <property name="com.sun.appserv.iiop.loadbalancingpolicy" value="ic-based-weighed"/>
      …
  9. 使用 --retrieve 選項部署用戶端應用程式,以取得用戶端 jar 檔案。

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

    例如︰


    asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp
    
  10. 執行應用程式用戶端,如下所示︰

    appclient -client clientjar -name appname


範例 11–1 設定 RMI-IIOP 加權循環負載平衡的負載平衡權數

此範例會依照下表設定一個叢集 (內含三個實例) 中的負載平衡權數。

實例名稱 

負載平衡權數 

i1

100 

i2

200 

i3

300 

以下是設定這些負載平衡權數的指令序列:


asadmin set i1.lb-weight=100
asadmin set i2.lb-weight=200
asadmin set i3.lb-weight=300

接下來的步驟

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

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