本章說明如何將 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 實例的叢集。
已將 J2EE 應用程式部署到所有參與負載平衡的 Application Server 實例和叢集。
已啟用 RMI-IIOP 用戶端應用程式以用於負載平衡。
對於存取 Application Server 上部署的 EJB 元件的以下 RMI-IIOP 用戶端,Application Server 支援其負載平衡。
在應用程式用戶端容器 (ACC) 中執行的 Java 應用程式。請參閱為應用程式用戶端容器設定 RMI-IIOP 負載平衡。
不在 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 端點位址。
主端點是與用於查詢或建立 Bean 的 InitialContext 端點相對應的 Bean 端點。叢集中的其他 IIOP 端點被指定為替代端點。如果 Bean 的主端點變得不可用,則該 Bean 上的其他請求將容錯移轉至其中的一個替代端點。
您可以將 RMI-IIOP 負載平衡和容錯移轉配置為與在 ACC 中執行的應用程式以及獨立的 Java 用戶端配合使用。
以下目錄包含用於演示透過和不透過 ACC 使用 RMI-IIOP 容錯移轉的範例應用程式。
install_dir/samples/ee-samples/sfsbfailover
請參閱此範例隨附的 index.html 檔案,以取得有關在使用和不使用 ACC 的情況下執行應用程式的說明。ee-samples 目錄還包含有關設定環境以執行範例的資訊。
您可以為在應用程式用戶端容器 (ACC) 中執行的應用程式和獨立用戶端應用程式設定 RMI-IIOP 負載平衡和容錯移轉。
此程序提供了有關將 RMI-IIOP 負載平衡和容錯移轉與應用程式用戶端容器 (ACC) 配合使用所需步驟的簡介。如需有關 ACC 的其他資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.2 Developer’s Guide」中的「Developing Clients Using the ACC」。
請至 install_dir/bin 目錄。
執行 package-appclient。
此公用程式可產生 appclient.jar 檔案。如需有關 package-appclient 的更多資訊,請參閱 package-appclient( 1M)。
將 appclient.jar 檔案複製到用戶端所在位置的機器,並將其解壓縮。
編輯 asenv.conf 或 asenv.bat 路徑變數,以參照該機器上的正確目錄值。
該檔案位於 appclient-install-dir/config/。
如需欲更新的路徑變數之清單,請參閱 package-appclient( 1M)。
如果需要,使 appclient 程序檔成為可執行檔。
例如,在 UNIX 上使用 chmod 700。
尋找叢集中實例的 IIOP 偵聽程式連接埠號。
將 IIOP 偵聽程式指定為用於確定哪個 IIOP 偵聽程式接收請求的端點。若要在 Admin Console 中顯示 IIOP 偵聽程式,請執行以下作業︰
編輯端點值的 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"\>
使用 --retrieve 選項部署用戶端應用程式,以取得用戶端 jar 檔案。
將用戶端 jar 檔案儲存在用戶端機器上。
例如︰
asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp
執行應用程式用戶端,如下所示︰
appclient -client clientjar -name appname
若要測試容錯移轉,請停止叢集中的某個實例,然後查看該應用程式是否正常工作。您也可在用戶端應用程式中包含中斷點 (或暫停)。
若要測試負載平衡,請使用多個用戶端,然後查看負載在所有端點中的分散方式。
使用 --retrieve 選項部署應用程式,以取得用戶端 jar 檔案。
將用戶端 jar 檔案儲存在用戶端機器上。
例如︰
asadmin deploy --user admin --passwordfile pw.txt --retrieve /my_dir myapp
執行用戶端 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
若要測試容錯移轉,請停止叢集中的某個實例,然後確認應用程式是否正常工作。您也可在用戶端應用程式中包含中斷點 (或暫停)。
若要測試負載平衡,請使用多個用戶端,然後查看負載在所有端點中的分散方式。