階段作業複製機制用於在不同實例之間,複製儲存在階段作業中的資料。但是所複製的實例必須屬於同一個叢集。在叢集環境中啟用階段作業複製時,整個階段作業資料會複製到複製的實例上。 但是階段作業複製操作並不會複製階段作業中的不可串列屬性,以及任何實例專屬的資料。
階段作業複製和負載平衡功能可為 Web 應用程式提供良好的容錯移轉功能。
本節將詳細說明階段作業複製操作。
Web 請求結束後,Web 伺服器將決定是否需要透過儲存在伺服器配置檔案 server.xml 中的階段作業複製配置,來複製階段作業資料。
現在研究由四個實例形成一個叢集、並在管理伺服器上啟用階段作業複製的使用案例。
在由執行於四個節點上的四個實例 (A、B、C 和 D) 所組成的 Web 伺服器叢集中,階段作業複製的程序如下:
實例 A 為 D 的備份,B 為 A 的備份,C 為 B 的備份,D 為 C 的備份。這樣便會形成完整的備份環。
叢集中的每個實例都會記錄一份靜態清單,其中列出了叢集中的所有實例以及使用中的備份實例。
階段作業資料會在每個請求結束後同步傳送至備份實例,依配置而定。
Web 伺服器叢集環境中的容錯移轉程序運作方式如下:
如果實例 A 失敗,負載平衡器會將以實例 A 為目的地的內送 Web 請求,重新導向至叢集中其餘的實例,並且備份環會以下列方式重新配置:
D 偵測到其備份 A 當機時,便會在順序清單上選取 A 的下一個實例做為新備份實例。
在此情況下將會選取 B,並且 D 會與 B 建立新的備份連線。此時 B 持有兩個備份: A 的唯讀備份和 D 的使用中備份。
此時完整的備份環形成:B 備份到 C,C 備份到 D,D 備份到 B。
當故障的實例 A 再次可用時,會向指定的備份實例 B 傳送重新連結訊息以重新連結備份環,並與 B 建立備份連線。
D 收到 A 傳回的 ping 成功結果或收到來自 A 的訊息,進而偵測到 A 在線上時,
D 隨後與 A 建立備份連線,並終止與 B 的備份連線。
Web Server 7.0 在階段作業複製中不支援以下功能:
回復兩個以上同步故障的實例。
兩次失敗之間的間隔必須大於讓恢復的實例完全回復所需的時間。
對一個以上的實例進行階段作業備份。在一般操作中,任何階段作業僅有兩個備份: 主要階段作業和備份階段作業。
階段作業持續性: 階段作業僅備份在其他實例的記憶體中,以便進行容錯移轉
Web 伺服器僅支援 Java Web 應用程式的階段作業複製。如果使用的是非 Java 應用程式 (如 CGI 或 PHP),則無法複製階段作業資料。
您可以使用管理主控台或 CLI 在叢集中啟用階段作業複製。啟用階段作業複製前,請確定瀏覽器已啟用 cookie。
server.xml 檔案包含與階段作業複製相關的資訊。以下是已啟用階段作業複製的 server.xml 檔案範例:
<cluster> <local-host>hostA</local-host> <instance> <host>hostB</host> </instance> <instance> <host>hostC</host> </instance> <instance> <host>hostD</host> </instance> <instance> <host>hostA</host> <session-replication/> </cluster>
若您使用下列元素的預設值,則在 server.xml 配置檔案中將無法使用這些元素的項目。
連接埠號碼 (預設為 1099) |
協定 (預設為 jrmp) |
已加密 (預設為 false) |
Getattribute 觸發複製 (預設為 true) |
複製探索最大躍點數 (預設為 –1) |
啟動探索逾時 (預設為 0。依賴 Java API 取得系統時間。這在非 Unix 作業系統中可能不精確)。 |
Cookie 名稱 (預設為 CLUSTERSESSIONLOCATOR ) |
如需有關這些階段作業複製特性的更多資訊,請參閱 「Sun Java System Web Server 7.0 Update 3 Administrator’s Configuration File Reference 」。
若要啟用伺服器以複製階段作業,還必須為階段作業複製啟用 Web 應用程式。
若要為 Web 應用程式啟用階段作業複製,請修改位於 <web-application>/WEB-INF 目錄中的 sun-web.xml 配置檔案。
按照下列方式在 sunweb.xml 中執行所需的修改:
將元素 <session-manager/> 變更為 <session-manager persistence-type="replicated">
以下是已啟用階段作業複製的 sun-web.xml 檔案範例:
<sun-web-app> <session-config> <session-manager persistence-type="replicated"> </session-manager> </session-config> </sun-web-app>
修改 sunweb.xml 檔案後,請重建 Web 應用程式或重新以 jar 壓縮應用程式,以建立 Web 應用程式歸檔 (war 檔案)。
重新啟動所有實例,以使 Web 應用程式在所有實例上均可用。
您可以從叢集中的所有節點存取 Web 應用程式。若要存取 Web 應用程式,請在瀏覽器中鍵入以下項目:
http://webserver-name/webapplication-name/
所有節點均可存取的目錄,最適用於儲存應用程式以進行部署。但是,管理伺服器並不一定要能存取此目錄不可。建議對大小超過 1 MB 的 Web 應用程式進行基於目錄的部署。
若要建立搜尋集合,請確保搜尋集合位於所有節點均可存取的共用目錄中。