使用應用程式要求路由的 HTTP 負載平衡
由 IIS 小組
概觀
本主題會引導讀者完成設定應用程式要求路由以負載平衡 HTTP 要求以達到高可用性和延展性的步驟。 本逐步解說也會強調應用程式要求路由如何監視內容伺服器的健康情況,以及將用戶端的要求親和化至內容伺服器的方式的幾個核心功能。
Goal
若要使用應用程式要求路由在數個內容伺服器之間平衡 HTTP 要求,如下所示:
必要條件
本逐步解說需要下列必要條件:
- Windows 2008 (任何 SKU) 或更新版本上的 IIS 7.0 或更新版本。
- Microsoft 應用程式要求路由第 1 版和相依模組。
- 至少有兩部具有工作網站和應用程式的內容伺服器。
請遵循本檔中所述的步驟來安裝應用程式要求路由。
另一個先決條件是讀取器已使用定義和設定應用程式要求路由 (ARR) 伺服器群組中所述的步驟來定義和設定伺服器數位。
步驟 1 - 驗證 URL 重寫規則
假設伺服器陣列已使用定義及設定應用程式要求路由 (ARR) 伺服器群組中所述的步驟來建立伺服器陣列,則URL重寫規則已針對簡單的負載平衡案例建立。
若要使用 UI 驗證 URL 重寫規則:
- 啟動 IIS 管理員。
- 選取伺服器陣列 myServerFarm,這是在定義及設定應用程式要求路由 (ARR) 伺服器群組中建立的。
- 顯示下列圖示:
- 按兩下 [ 路由規則]。
- 確認已核取 [ 使用 URL 重寫檢查傳入要求 ] 複選框。
- SSL 卸除預設為啟用。 啟用此功能時,ARR 伺服器與應用程式伺服器之間的所有通訊都會以純文本完成,即使是從用戶端到 ARR 伺服器的 HTTPS 要求也是如此。 當 ARR 伺服器和應用程式伺服器部署在信任的網路內時,例如在相同的數據中心內,啟用 SSL 卸除並不會犧牲安全性。 此外,啟用這項功能可進一步協助將應用程式伺服器上的伺服器資源最大化,因為它們不需要花費迴圈來加密和解密要求和回應。
若要停用 SSL 卸除,請取消核取 [ 啟用 SSL 卸除 ] 複選框,然後按兩下 [ 套用]。 - 開啟瀏覽器,並將數個要求傳送至 ARR 伺服器。
- 若要確認要求在應用程式伺服器之間平均負載平衡,請選取 myServerFarm。 按兩下 [ 監視和管理]。
- 在儀表板檢視中,確認要求是否平均分散。
若要使用命令列驗證 URL 重寫規則:
使用 系統管理員 許可權開啟命令提示字元。
瀏覽至
%windir%\system32\inetsrv
。若要確認 URL 重寫規則已正確建立,請輸入 appcmd.exe列表 config -section:system.webServer/rewrite/globalRules。 它會傳回如下所示的 globalRules:
<system.webServer> <rewrite> <globalRules> <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> </conditions> <action type="Rewrite" url="http://myServerFarm/{R:0}" /> </rule> </globalRules> </rewrite> </system.webServer>
若要停用 SSL 卸除,請先移除所有 URL 重寫規則:
appcmd.exe clear config -section:system.webServer/rewrite/globalRules
然後,建立URL重寫規則以轉送 HTTPS 流量。 更具體地說,若傳入要求為 HTTPS,ARR 會使用 SSL 轉送要求:
appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}" /commit:apphost
最後,建立 URL 重寫規則,以純文字將 HTTP 流量轉送至應用程式伺服器:
appcmd.exe set config -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*" /commit:apphost appcmd.exe set config -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}" /commit:apphost
若要確認 URL 重寫規則已正確建立,並停用 SSL 卸除,請輸入 appcmd.exe列表組態 -section:system.webServer/rewrite/globalRules。 它會傳回如下所示的 globalRules:
<system.webServer> <rewrite> <globalRules> <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> <add input="{HTTPS}" pattern="On" /> </conditions> <action type="Rewrite" url="https://myServerFarm/{R:0}" /> </rule> <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> </conditions> <action type="Rewrite" url="http://myServerFarm/{R:0}" /> </rule> </globalRules> </rewrite> </system.webServer>
步驟 2 - 設定健康情況檢查監視
應用程式要求路由會以兩種方式監視內容伺服器的健康情況:
- 透過即時流量
- 透過明確的URL測試
對應用程式要求路由提出要求時,預設會自動執行即時流量測試。 明確的 URL 測試是可搭配即時流量測試使用的額外測試。 在本節中,逐步解說會引導您設定明確的 URL 測試。
若要使用UI設定健康情況檢查監視:
- URL 測試需要特定的 URL 才能測試。 若要滿足此需求,請使用 記事本 建立名為 healthCheck.txt 的文本檔,其中包含「我狀況良好」一句。
- 將 healthCheck.txt 檔案放在應用程式伺服器上。
- 藉由在瀏覽器中開啟頁面,確認 healthCheck.txt 已正確轉譯。
- 在 [IIS 管理員] 中,選取伺服器陣列 myServerFarm。 顯示下列圖示:
- 按兩下 [ 健康情況測試]。
- 輸入
http://(server name or FQDN of ARR server)/healthCheck.txt
作為 URL 值。 - 輸入 狀況良好的 回應 比對 值。 回應比對是選擇性測試,可確保響應主體包含預期的字串。 在此情況下,由於healthCheck.txt包含句子「我狀況良好」,因此回應比對會尋找「狀況良好」一詞。
- 按兩下 [ 套用 ] 以儲存變更。
- 若要確認健康情況檢查監視的功能,請停止其中一個應用程式伺服器上的受監視月臺。 由於 Interval (seconds) 值設定為 30 秒,請等候 30 秒進行下一次健康狀態檢查。
- 等候 30 秒之後,將數個要求傳送至 ARR 伺服器。
- 若要確認所有要求都會進入狀況良好的伺服器,請 按兩下 [監視和管理],然後使用 F5 鍵重新整理儀錶板。 請注意,已重設運行時間統計數據。 這是原廠設定。 您可以視需要傳送其他要求並重新整理儀錶板。
- 健康情況監視也可用來偵測狀況不良的伺服器何時狀況良好。 若要確認這項功能,請啟動步驟 9 中已停止的月臺。 同樣地,由於 Interval (seconds) 值設定為 30 秒,請等候 30 秒進行下一次健康狀態檢查。
- 等候 30 秒之後,將數個要求傳送至 ARR 伺服器。
- 若要確認要求在伺服器之間平均散發,請重新整理 IIS 管理員中的儀錶板。 請注意,已重設運行時間統計數據。 這是原廠設定。 您可以視需要傳送其他要求並重新整理儀錶板。
若要使用命令列設定健康情況檢查監視:
使用 系統管理員 許可權開啟命令提示字元。
瀏覽至
%windir%\system32\inetsrv
。若要將 URL
http://(server name or FQDN of ARR server)/healthCheck.txt
設定為 ,且 我狀況良好。 要比對的字串,請輸入:appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(server name or FQDN of ARR server)/healthCheck.txt " /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am healthy." /commit:apphost
步驟 3 - 設定客戶端親和性
應用程式要求路由提供客戶端親和性功能,可在用戶端工作階段期間,將客戶端對應至應用程式要求路由後方的內容伺服器。 啟用此功能時,負載平衡演算法只會針對用戶端的第一個要求套用。 從該點開始,在用戶端會話期間,來自相同用戶端的所有後續要求都會路由傳送至相同的內容伺服器。 如果內容伺服器上的應用程式具狀態,且用戶端的要求必須路由傳送至相同的內容伺服器,因為會話管理不是集中式的,這項功能就很有用。
若要使用UI設定客戶端親和性:
- 啟動 IIS 管理員。
- 選取伺服器陣列 myServerFarm,這是在定義及設定應用程式要求路由 (ARR) 伺服器群組中建立的。
- 顯示下列圖示:
- 按兩下 [ 伺服器親和性]。
- 若要啟用用戶端親和性,請核取 [ 用戶端親和性] 複選框,然後按兩下 [ 套用]。
應用程式要求路由會使用 Cookie 來啟用用戶端親和性。 Cookie 名稱將用來在用戶端上設定 Cookie。 也就是說,客戶端必須接受 Cookie,用戶端親和性才能正常運作。 - 若要確認客戶端親和性的功能,請將數個要求傳送至 ARR 伺服器。 重新整理 IIS 管理員中的儀錶板(監視和管理)。 確認運行時間統計數據只會針對其中一部應用程式伺服器變更為客戶端親和化的位置。 您可以視需要傳送其他要求並重新整理儀錶板。
若要使用命令列設定客戶端親和性:
使用 系統管理員 許可權開啟命令提示字元。
瀏覽至
%windir%\system32\inetsrv
。若要啟用用戶端親和性,請輸入:
appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost
步驟 4 - 不允許新的連線
不允許伺服器上的新連線,是將伺服器從伺服器數位環境取出的正常方式。 當客戶端親和性功能正在使用時,它更有意義,因為不允許新連線時,應用程式要求路由會接受現有的會話。 也就是說,當用戶端與不允許新連線的伺服器親和化時,用戶端會繼續路由傳送至相同的伺服器,因此,用戶端不會對用戶端造成任何影響。 不過,不會將任何新的用戶端路由傳送至不允許新連線的伺服器。
若要不允許使用UI的新連線:
- 使用上述步驟 3 中的設定,識別用戶端所要親和的伺服器。
- 選取伺服器陣列 myServerFarm,這是在定義及設定應用程式要求路由 (ARR) 伺服器群組中建立的。
- 顯示下列圖示:
- 按兩下 [ 監視和管理]。
- 選取客戶端親和化所在的伺服器。 在 [動作] 窗格中,按兩下 [不允許新增 連線。
- 在確認對話框中,按兩下 [ 是]。
- 若要確認來自用戶端的要求會繼續路由傳送至親和化伺服器,該伺服器現在不允許新的連線,請將數個要求傳送至 ARR 伺服器。 重新整理 IIS 管理員中的儀錶板。 確認運行時間統計數據只會針對客戶端親和化所在的伺服器變更。 您可以視需要傳送其他要求並重新整理儀錶板。
- 若要確認新的用戶端未路由傳送至不允許新連線的伺服器,請關閉並重新啟動瀏覽器,移除應用程式要求路由所設定的 Cookie。
- 將數個要求傳送至ARR伺服器。 重新整理 IIS 管理員中的儀錶板。 確認運行時間統計數據只會針對可用的伺服器變更。 更具體來說,請確認伺服器運行時間統計數據不允許變更新的連線。 您可以視需要傳送其他要求並重新整理儀錶板。
摘要
您現在已成功設定應用程式要求路由的一些設定,以相應放大和平均分配負載。 如需使用應用程式要求路由的更進階路由功能,請參閱 使用應用程式要求路由。