負載平衡器的配置為 domain.xml 檔案內的配置。負載平衡器配置非常靈活:
儘管每個負載平衡器只有一個負載平衡器配置,但每個負載平衡器配置可以關聯多個負載平衡器。
儘管一個網域可以關聯多個負載平衡器,但一個負載平衡器只為一個網域服務。
本小節說明如何建立、修改和使用負載平衡器配置,其中包含以下主題︰
使用 asadmin 指令 create-http-lb-config 建立負載平衡器配置。表 5–1 說明參數。如需更多資訊,請參閱有關 create-http-lb-config、delete-http-lb-config 以及 list-http-lb-configs 的文件。
表 5–1 負載平衡器配置參數
參數 |
說明 |
---|---|
response timeout | |
HTTPS routing |
對負載平衡器的 HTTPS 請求是否產生對伺服器實例的 HTTPS 或 HTTP 請求。如需更多資訊,請參閱配置 HTTPS 路由。 |
reload interval |
檢查負載平衡器配置檔案 loadbalancer.xml 是否有變更的時間間隔。當檢查偵測到變更時,系統將重新載入配置檔案。值為 0 時會停用重新載入。如需更多資訊,請參閱啟用動態重新配置。 |
monitor |
是否為負載平衡器啟用監視功能。 |
routecookie |
負載平衡外掛程式用於記錄路由資訊的 Cookie 之名稱。HTTP 用戶端必須支援 Cookie。如果您的瀏覽器設定為在儲存 Cookie 前詢問,則 Cookie 的名稱為 JROUTE。 |
target |
當您在負載平衡器中建立對獨立伺服器或叢集的參照時,會將該伺服器或叢集增加至負載平衡器所控制的目標伺服器和叢集的清單中。您仍必須先啟用所參照的伺服器或叢集 (使用 enable-http-lb-server),才能對向該伺服器或叢集發出的請求執行負載平衡。如果建立了帶有目標的負載平衡器配置,則系統已增加了作為參考的該目標。
使用 create-http-lb-ref 建立參照。您必須提供負載平衡器配置名稱和目標伺服器實例或叢集。
若要刪除參照,請使用 delete-http-lb-ref。必須先使用 disable-http-lb-server 停用已參照的伺服器或叢集,才能刪除此參照。
如需更多資訊,請參閱有關 create-http-lb-ref 和 delete-http-lb-ref 的文件。
建立對伺服器實例或叢集的參照後,請使用 enable-http-lb-server 啟用伺服器實例或叢集。如果在建立負載平衡器配置時使用某伺服器實例或叢集作為目標,則必須啟用該伺服器實例或叢集。
如需更多資訊,請參閱有關 enable-http-lb-server 的文件。
負載平衡器管理的所有伺服器均必須具有同質配置,包括部署到這些伺服器的相同應用程式集。部署某個應用程式並啟用 (在部署期間或之後) 此應用程式以進行存取後,您必須啟用該應用程式以進行負載平衡。如果沒有為負載平衡啟用應用程式,則將無法對該應用程式的請求執行負載平衡和防故障備用,即使已對該應用程式部署到的伺服器的請求執行了負載平衡和防故障備用。
啟用應用程式時,請指定應用程式名稱和目標。如果負載平衡器管理了多個目標 (例如,兩個叢集),請在所有目標上啟用該應用程式。
如需更多資訊,請參閱有關 enable-http-lb-application 的線上說明。
如果部署了新的應用程式,您也必須啟用該應用程式以進行負載平衡並再次匯出負載平衡器配置。
負載平衡器的運作狀態檢查程式會定期檢查所有標記為異常的已配置 Application Server 實例。運作狀態檢查程式不是必需的,但如果沒有運作狀態檢查程式,或者停用了運作狀態檢查程式,異常實例的定期運行狀況檢查就不會執行。負載平衡器無法判斷運作不正常的實例在何時開始正常運作。
負載平衡器的運作狀態檢查機制使用 HTTP 與 Application Server 實例進行通訊。運作狀態檢查程式將 HTTP 請求傳送給指定的 URL 並等待回應。HTTP 回應標頭中的狀態碼在 100 到 500 之間時表示實例處於正常狀態。
若要建立運作狀態檢查程式,請使用 asadmin create-http-health-checker 指令。指定下列參數。
表 5–2 運作狀態檢查程式參數
參數 |
說明 |
預設 |
---|---|---|
url |
指定負載平衡器檢查的偵聽程式之 URL 以確定其運作狀態。 |
“/” |
interval |
指定實例的運作狀態檢查發生的間隔 (以秒為單位)。指定為 0 將停用運作狀態檢查程式。 |
30 秒 |
timeout |
指定逾時間隔 (以秒為單位),必須在該時間間隔內獲得回應才能認為偵聽程式運作正常。 |
10 秒 |
如果應用程式伺服器實例標示為異常,運作狀態檢查程式將輪詢異常實例以確定實例的狀態是否已變為正常。運作狀態檢查程式使用指定的 URL 來檢查所有異常的應用程式伺服器實例,以確定這些異常的應用程式伺服器實例是否已返回到正常狀態。
如果運作狀態檢查程式發現某個異常實例已變為正常,該實例將被增加到正常實例的清單中。
如需更多資訊,請參閱有關 create-http-health-checker 和 delete-http-health-checker 的文件。
由 create-http-health-checker 建立的運作狀態檢查程式僅檢查異常實例。若要定期檢查運作正常實例,請在匯出的 loadbalancer.xml 檔案中設定某些其他特性。
僅在您已將 loadbalancer.xml 匯出之後,才可透過手動對其進行編輯,來設定這些特性。沒有等效的 asadmin 指令可以使用。
若要檢查運作正常實例,請設定以下特性。
表 5–3 運作狀態檢查程式手動特性
特性 |
定義 |
---|---|
True/False 標幟,用於表示是否要 Ping 正常伺服器實例以確定這些實例是否正常。若要 Ping 伺服器實例,請將標幟設定為 True。 |
|
指定在將未回應的伺服器實例標記為異常之前,負載平衡器的運作狀態檢查程式對該伺服器實例執行 Ping 指令的次數。有效範圍在 1 到 1000 之間。設定的預設值為 3。 |
透過編輯 loadbalancer.xml 檔案來設定特性。例如︰
<property name="active-healthcheck-enabled" value="true"/> <property name="number-healthcheck-retries" value="3"/>
若您增加這些特性,然後進行編輯並再次匯出 loadbalancer.xml 檔案,新匯出的配置不會包含這些特性。您必須對新匯出的配置再次增加這些特性。
Sun Java System Application Server 隨附的負載平衡外掛程式使用名為 loadbalancer.xml 的配置檔案。使用 asadmin 公用程式可以在 domain.xml 檔案中建立負載平衡器配置。配置好負載平衡環境之後,請將其自 domain.xml 匯出至 loadbalancer.xml 檔案。
使用 asadmin 指令 export-http-lb-config 匯出 loadbalancer.xml 檔案。
匯出用於特定負載平衡器配置的 loadbalancer.xml 檔案。您可以指定路徑和其他檔案名稱。若您未指定檔名,則該檔案會命名為 loadbalancer.xml. load-balancer-config-name。若您未指定路徑,則會在 domain-dir/generated 目錄中建立檔案。
若要在 Windows 上指定路徑,請將路徑加上引號。例如,"C:\Sun\AppServer\loadbalancer.xml"。
將已匯出的負載平衡器配置檔案複製到 Web Server 的配置目錄。
例如,對於 Sun Java System Web Server,該位置通常為 web-server-root/config。
Web Server 配置目錄中的負載平衡器配置檔案必須命名為 loadbalancer.xml。如果您的檔案使用其他名稱,例如 loadbalancer.xml. load-balancer-config-name,則必須重新命名該檔案。
如果您因為建立或刪除對伺服器的參照、部署新的應用程式、啟用或停用伺服器或應用程式而變更了負載平衡器配置,則請重新匯出負載平衡器配置檔案並將其複製到 Web 伺服器的 config 目錄。如需更多資訊,請參閱匯出負載平衡器配置檔案。
負載平衡器外掛程式將基於在負載平衡器配置中指定的重新載入間隔定期檢查已更新的配置。在指定的時間值後,如果負載平衡器發現新的配置檔案,則它將開始使用新配置。
若要啟用動態重新配置,請執行以下步驟:
建立負載平衡器配置時,將 --reloadinterval 選項與 asadmin create-http-lb-config 配合使用。
此選項用於設定檢查負載平衡器配置檔案 loadbalancer.xml 是否有變更的時間間隔。將值設定為 0 可停用動態重新配置。依預設,啟用動態重新配置,重新載入時間間隔為 60 秒。
如果您之前已將其停用,或要變更重新載入時間間隔,請使用 asadmin set 指令。
變更重新載入時間間隔之後,請重新匯出負載平衡器配置檔案,並將其複製到 Web Server 的 config 目錄,然後重新啟動 Web Server。
如果負載平衡器在嘗試重新配置時遇到硬碟讀取錯誤,它將使用記憶體中目前的配置。負載平衡器還確定了在覆寫現有配置之前,已修改的配置資料與 DTD 相容。
如果遇到磁碟讀取錯誤,相關的警告訊息會記錄至 Web Server 的錯誤記錄檔中。
Sun Java System Web Server 的錯誤記錄位於以下位置:web-server-install-dir/web-server-instance /logs/。
基於任何原因而停止應用程式伺服器之前,實例應先完成處理請求。正常停用伺服器實例或叢集的程序被稱為靜止。
負載平衡器使用以下策略來靜止應用程式伺服器實例:
如果已停用某個實例 (獨立實例或叢集的一部分),並且逾時尚未到期,居留式請求將繼續發送到該實例。但是,新請求將不會傳送到已停用的實例。
逾時到期後,該實例將停用。從負載平衡器到該實例的所有開啟的連線將關閉。負載平衡器不會將任何請求傳送到該實例,即使居留在該實例的所有階段作業都還有效。相反,負載平衡器會將居留式請求防故障備用到另一個正常實例上。
執行 asadmin disable-http-lb-server,設定逾時 (以分鐘為單位)。
使用 asadmin export-http-lb-config 匯出負載平衡器配置檔案。
將匯出的配置複製到 Web Server 的 config 目錄中。
停止該伺服器實例或叢集。
在取消部署 Web 應用程式之前,應讓應用程式完成處理請求。正常停用應用程式的程序稱為靜止。靜止應用程式時,您可指定逾時時間。依據逾時時間,負載平衡器會使用以下策略靜止應用程式︰
如果逾時未過期,負載平衡器不會向應用程式轉寄新的請求,但會將其傳回 Web Server。然而,負載平衡器會繼續轉寄居留式請求,直至逾時過期。
逾時過期後,負載平衡器不會接受應用程式的任何請求 (包括居留式請求)。
當您從負載平衡器參考的每個伺服器實例或叢集中停用應用程式時,已停用的應用程式的使用者將遭受服務損失,直到再次啟用該應用程式。如果您從一個伺服器實例或叢集中停用應用程式而使該應用程式在其他伺服器實例或叢集中保持啟用狀態,則使用者仍可存取該應用程式。如需更多資訊,請參閱在不遺失可用性的情況下升級應用程式。
使用 asadmin disable-http-lb-application,並指定以下內容︰
逾時 (以分鐘為單位)。
要停用的應用程式之名稱。
要在其上停用應用程式的目標叢集或實例。
使用 asadmin export-http-lb-config 匯出負載平衡器配置檔案。
將匯出的配置複製到 Web Server 的 config 目錄中。
如果 HTTP/HTTPS 階段作業所連線的原始應用程式伺服器實例變為不可用,負載平衡器外掛程式會將這些階段作業防故障備用到其他應用程式伺服器實例上。本小節介紹如何配置負載平衡器外掛程式以啟用 HTTP/HTTPS 路由和階段作業容錯移轉。
負載平衡外掛程式將所有內送的 HTTP 或 HTTPS 請求路由至應用程式伺服器實例。然而,如果啟用了 HTTPS 路由,則負載平衡外掛程式會將 HTTPS 請求僅轉寄給使用 HTTPS 連接埠的應用程式伺服器。HTTPS 路由是針對新請求和居留式請求而執行的。
如果收到了 HTTPS 請求且沒有正在進行的階段作業,負載平衡器外掛程式將選取使用已配置的 HTTPS 連接埠的可用應用程式伺服器實例,並將請求轉寄到該實例。
在正在進行的 HTTP 階段作業中,如果收到對同一個階段作業的新 HTTPS 請求,則使用在 HTTP 階段作業期間儲存的階段作業和居留式資訊來路由 HTTPS 請求。新的 HTTPS 請求將路由到在此 HTTPS 連接埠上處理上一個 HTTP 請求的同一伺服器。
create-http-lb-config 指令的 httpsrouting 選項用於控制為正在參與負載平衡的所有應用程式伺服器開啟或關閉 HTTPS 路由。如果此選項設定為 false,所有 HTTP 和 HTTPS 請求都將作為 HTTP 請求進行轉寄。如果設定為 true,HTTPS 將做為 HTTPS 請求進行轉寄。建立新的負載平衡器配置時,請設定 HTTPS 路由,或者以後使用 asadmin set 指令加以變更。
若要使 HTTPS 路由工作,必須配置一個或多個 HTTPS 偵聽程式。
如果將 https-routing 設定為 true,但新請求或居留式請求傳入的叢集中沒有正常的 HTTPS 偵聽程式,則該請求將產生錯誤。
負載平衡器對 HTTP/HTTPS 請求處理具有以下限制。
如果某個階段作業使用 HTTP 和 HTTPS 請求的組合,則第一個請求必須是 HTTP 請求。如果第一個請求是 HTTPS 請求,則其後不能接 HTTP 請求。這是因為與 HTTPS 階段作業關聯的 Cookie 不是由瀏覽器傳回的。瀏覽器將兩個不同的協定解釋為兩個不同的伺服器,並啟動新的階段作業。僅當將 httpsrouting 設定為 true 時,此限制才有效。
如果某個階段作業具有 HTTP 和 HTTPS 請求的組合,則必須將應用程式伺服器實例配置為同時具有 HTTP 和 HTTPS 偵聽程式。僅當將 httpsrouting 設定為 true 時,此限制才有效。
如果某個階段作業具有 HTTP 和 HTTPS 請求的組合,則必須將應用程式伺服器實例配置為具有使用標準連接埠號 (即,對於 HTTP 為 80,對於 HTTPS 為 443) 的 HTTP 和 HTTPS 偵聽程式。無論將 httpsrouting 設定為何值,此限制均適用。
使用重新導向將請求從一個 URL 重新導向另一個 URL。例如,使用重新導向將使用者傳送至不同的網站 (例如從舊版應用程式重導向至較新版本),或是從 HTTP 重新導向至 HTTPS,或是從 HTTPS 重新導向至 HTTP。您可以在應用程式中以多種方式啟用重新導向 (例如,以 Servlet 為基礎的重新導向,web.xml 重新導向)。然而,如果要從負載平衡器傳送重新導向 URL,可能需要對 Application Server 或負載平衡器進行其他配置。請注意,重新導向和使用 HTTPS 路由轉寄的請求不同。使用重新導向時,請將 httpsrouting 設定為 false。如果將 HTTPS 請求配置成需轉寄至 HTTP,請使用HTTPS 路由。
下列特性會影響重新導向:HTTP 服務或 HTTP 偵聽程式的 authPassthroughEnabled 和 proxyHandler 特性,以及 loadbalancer.xml 檔案中的 rewrite-location 特性。
當 Application Server authPassthroughEnabled 特性設定為 true 時,會以自訂的請求標頭將有關原始用戶端請求的資訊 (例如用戶端 IP 位址、SSL 金鑰大小、以及認證的用戶端憑證鏈) 傳送至 HTTP 偵聽程式。如果您安裝了硬體加速器,authPassThroughEnabled 特性會讓您利用硬體加速器加快 SSL 認證的進行。在負載平衡器上配置硬體加速器,比在每個叢集的 Application Server 實例上進行配置更為容易。
只有在 Application Server 受防火牆保護後,才能將 authPassthroughEnabled 設定為 true。
使用 asadmin set 指令來設定 HTTP 服務或個別 HTTP 偵聽程式上的 authPassthroughEnabled 特性。個別 HTTP 偵聽程式的設定優先於 HTTP 服務的設定。
如果要在所有的 HTTP/HTTPS 偵聽程式上設定 authPassthroughEnabled 特性,請使用下列指令:
asadmin set cluster-name-config.http-service.property.authPassthroughEnabled=true
如果要在個別的偵聽程式上進行設定,請使用下列指令:
asadmin set cluster-name-config.http-service.http-listener.listener-name.property. authPassthroughEnabled=true
Application Server 的代理伺服器處理程式負責擷取遭代理伺服器 (在此例中指的是負載平衡器) 攔截、並轉寄至應用程式伺服器之原始用戶端請求的相關資訊,同時負責將此資訊提供給做為用戶端請求之目標的 Web 應用程式 (部署於應用程式伺服器上)。如果代理伺服器的截取遭 SSL 終止,代理伺服器處理程式會擷取並提供有關原始請求的其他資訊,例如原始請求是否為 HTTPS 請求,以及 SSL 用戶端認證是否啟用。只有當 authPassThroughEnabled 設定為 true 時,才使用 proxyHandler 屬性。
代理伺服器處理程式會檢視內送請求中的自訂請求標頭,而代理伺服器就是藉由該自訂請求標頭傳送和原始用戶端請求相關的資訊,並使用標準的 ServletRequest API 向應用程式伺服器上的 Web 應用程式提供這項資訊。
代理伺服器處理程式實作可透過 proxyHandler 特性,在 HTTP 服務層級上進行全域配置,或是針對個別的 HTTP 偵聽程式進行配置,而該特性的值會指定 com.sun.appserv.ProxyHandler 抽象類別之實作的完全合格類別名稱。可進行配置的代理伺服器處理程式實作允許應用程式伺服器搭配任何代理伺服器,只要代理伺服器處理程式實作知道 HTTP 請求的標頭名稱,並了解其值的格式,而代理伺服器就是以此方式傳送與原始用戶端請求相關的資訊。
Application Server 的代理伺服器處理程式會從請求標頭讀取並剖析 SSL 憑證鏈。此舉讓後端應用程式伺服器實例得以擷取原始用戶端請求 (遭到終止 SSL 的代理伺服器所攔截;該代理伺服器在此指的是負載平衡器) 的相關資訊。您可以使用預設的代理伺服器處理程式設定,或是使用 HTTP 服務或 HTTP/HTTPS 偵聽程式的 proxyHandler 特性自行加以配置。proxyHandler 特性會針對該偵聽程式或所有偵聽程式所使用的 com.sun.appserv.ProxyHandler 抽象類別之自訂實作,指定完全合格類別名稱。
此抽象類別的實作會檢視自訂請求標頭的特定請求,而代理伺服器就是透過該自訂請求標頭,將原始用戶端請求的相關資訊傳送至應用程式伺服器實例,並將該資訊傳回至其呼叫者。預設實作會從名為 Proxy-ip 的 HTTP 請求標頭讀取用戶端 IP 位址、從名為 Proxy-keysize 的 HTTP 請求標頭讀取 SSL 金鑰大小,並從名為 Proxy-auth-cert 的 HTTP 請求標頭讀取 SSL 用戶端憑證鏈。Proxy-auth-cert 值必須包含 BASE-64 編碼的用戶端憑證鏈且無 BEGIN CERTIFICATE 和 END CERTIFICATE 邊界,並以 % d% a 取代 \n。
只有當 authPassThroughEnabled 設定為 true 時,才能使用這項特性。如果您在個別的 HTTP 或 HTTPS 偵聽程式上設定 proxyHandler 特性,該特性會覆寫所有偵聽程式的預設設定。
使用 asadmin set 指令來設定 HTTP 服務或個別 HTTP 偵聽程式上的 proxyHandler 特性。
如果要在所有的 HTTP/HTTPS 偵聽程式上設定 proxyHandler 特性,請使用下列指令:
asadmin set cluster-name-config.http-service.property.proxyHandler=classname
如果要在個別的偵聽程式上進行設定,請使用下列指令:
asadmin set cluster-name-config.http-service.http-listener.listener-name.property.proxyHandler=classname
如果設定為 true,rewrite-location 特性就會重寫原始的請求資訊,並納入通訊協定 (HTTP 或 HTTPS)、主機和連接埠資訊。依預設,rewrite-location 特性會設定為 true,以維持與先前 Application Server 發行版本的向下相容性。
rewrite-location 特性無法經由 asasmin create-http-lb-config 或 asadmin set 指令取得。如果要使用這項特性,請在匯出負載平衡器配置後,將該特性手動增加至 loadbalancer.xml 檔案。例如,將下列特性增加至所匯出的 loadbalancer.xml 檔案:
<property name="rewrite-location" value="false"/>
設定 rewrite-location 特性時,請記住下列要點:
如果 httpsrouting 為 false,而 Application Server 並未啟用 authPassthroughEnabled,則請將 rewrite-location 特性設定為 true。在 authPassthroughEnabled 未啟用的情況下,Application Server 將無法得知原始請求的通訊協定 (HTTP 或 HTTPS)。如果將 rewrite-location 設定為 true,負載平衡器會適當修改重寫位置的通訊協定部分。也就是說,如果用戶端正在傳送 HTTPS 請求,則負載平衡器會將用戶端重新導向至負載平衡器上已啟用 HTTPS 的偵聽程式連接埠。這項程序和 HTTP 請求相同。
如果 httpsrouting 為 false,並且啟用了 Application Server 上的 authPassthroughEnabled,則可將 rewrite-location 設定為 true 或 false,因為 Application Server 能夠得知用戶端請求是 HTTP 還是 HTTPS。啟用 authPassthroughEnabled 時,Application Server 會適當修改重寫位置的通訊協定部分。如果 rewrite-location 設定為 false,則負載平衡器不會重寫重新導向之 URL 的位置。這項特性如果設定為 true,則會重寫重新導向之 URL 的位置。但是重寫是沒有必要的,因為 Application Server 已經得知來自用戶端的 HTTPS 連線。另外,如果應用程式需要將 HTTP 重新導向至 HTTPS,或是將 HTTPS 重新導向至 HTTP,則必須將 rewrite-location 參數設定為 false。
等冪請求是一種在重試時不會在應用程式中造成任何變更或不一致的請求。在 HTTP 中,某些方法 (例如 GET) 是等冪的,而其他方法 (例如 POST) 則不是。重試等冪 URL 不會導致伺服器上或資料庫中的值發生變更。唯一的差異在於使用者收到的回應會有所不同。
等冪請求的範例包括搜尋引擎查詢和資料庫查詢。基礎原則是重試不會導致資料的更新或修改。
若要增強已部署應用程式的可用性,請在負載平衡器所服務的所有應用程式伺服器實例上,將環境配置為重試失敗的等冪 HTTP 請求。此選項用於唯讀請求 (例如,重試搜尋請求)。
請在 sun-web.xml 檔案中配置等冪 URL。匯出負載平衡器配置時,等冪 URL 資訊會自動增加至 loadbalancer.xml 檔案中。
如需有關配置等冪 URL 的更多資訊,請參閱「Sun Java System Application Server Enterprise Edition 8.2 Developer’s Guide」中的「Configuring Idempotent URL Requests」。