達到高可用性和延展性 - ARR 和 NLB
作者:Won Yoo
達到高可用性和延展性:
MICROSOFT 應用程式要求路由 (IIS 7.0 和更新版本和網路負載平衡 (NLB) 的 ARR) 。
Microsoft Corporation |
---|
作者:Bisht、Won Yoo |
發行日期:2008 年 11 月 13 日 |
摘要
本檔提供應用程式要求路由 (ARR) 如何與網路負載平衡 (NLB) 搭配使用,以達到高可用性和延展性的規範指引。
概觀
Microsoft Application Request Routing (ARR) for IIS 7.0 和更新版本是 Proxy 型路由模組,可根據 HTTP 標頭、伺服器變數和負載平衡演算法,將 HTTP 要求轉送至內容伺服器。 下圖說明典型的 ARR 部署:
雖然 ARR 為內容伺服器提供高可用性和延展性,但整體部署並非高度可用或可調整,因為:
- ARR 是單一失敗點。
- 內容伺服器的延展性受限於一部 ARR 伺服器的最大容量。
為了克服這些挑戰,系統管理員可能會考慮使用多個 ARR 伺服器搭配網路負載平衡 (NLB) 。 ARR 可以部署在主動/被動模式中,只達到高可用性或主動/主動模式,以達到高可用性和延展性。 本白皮書說明如何一起部署 ARR 和 NLB,以啟用核心 ARR 案例,同時達到整體高可用性和延展性。 NLB 可在 Windows Server 2008 的所有 SKU 上使用。
使用應用程式要求路由和網路負載平衡
ARR 建置為 IIS 之上的模組,其設計目的是在第 7 層 (應用程式) 做出路由決策。 更精確地說,ARR 依賴另一個 IIS 模組 URL 重寫,以檢查傳入的 HTTP 要求標頭和伺服器變數,以做出路由決策。 根據此設計,系統管理員可以根據應用層級資訊撰寫智慧型路由規則,例如:
- 主機名稱 (HTTP_HOST) :根據主機名稱將流量路由傳送至不同的內容伺服器。
- 要求的資源 (URL) :根據副檔名,判斷所要求的資源是針對靜態內容還是動態內容,並據以路由傳送要求。
- 用戶端資訊 (HTTP_USER_AGENT) :根據瀏覽器類型和版本,將要求路由傳送至適當的內容伺服器。
- 自訂標頭 (依應用程式設定為 Cookie) :根據應用程式所設定的 Cookie 資訊路由流量,例如使用者喜好設定或使用者識別碼。
上述只是其中一些範例。 如需 HTTP 標頭和伺服器變數的完整清單,請參閱 附錄 A。
由於 NLB 會在第 3 層做出路由決策,因此無法使用 HTTP 標頭和伺服器變數等應用程式特定資訊來提供應用層級型路由。 同時,ARR 不會自行提供容錯部署功能,而且必須依賴其他互補技術和解決方案來達到 ARR 層的高可用性。 NLB 會在網路堆疊的不同層級運作,並在部署 ARR 的相同伺服器上啟用:
案例 1:HTTP 型路由和負載平衡
HTTP 型路由和負載平衡案例可啟用包含下列的 3 層部署架構:
- 第 1 層 (Web) :提供雙重用途,以處理靜態內容和路由和負載平衡第 2 層伺服器的其餘動態要求。
- 第 2 層 (應用程式) :處理依賴商務邏輯的動態內容。
- 第 3 層 (資料) :儲存資料。
下圖說明 3 層式部署:
雖然上述範例顯示路由規則,可區分靜態內容與動態內容,但另一個常見案例是區分呈現要求與 Web 服務要求。
選項 1:主動/被動
在主動/被動模式中,通常會有兩部 ARR 伺服器,其中一部伺服器會處理要求,而另一部伺服器則代表容錯移轉伺服器。 如上所述,雖然此設定會移除單一失敗點來達到高可用性,但它不是向外延展解決方案,因為內容伺服器的匯總容量受限於一部 ARR 伺服器的最大容量。
在此設定中,由於兩部 ARR 伺服器設定的方式相同,因此會使用共用組態。 首先,在兩部伺服器上安裝 ARR,然後建立 NLB 叢集。 NLB 叢集設定為只接受其中一個叢集節點上的流量。 使用單一主機篩選模式來設定叢集連接埠規則,即可達成此目的。 接受流量的節點取決於 NLB 叢集節點的主機優先順序設定。 如需詳細資訊,請參閱 NLB 組態 。
除了 ARR 中的主機名稱親和性功能之外,兩部 ARR 伺服器之間沒有必須共用的執行時間狀態資訊。 因此,在此案例中,ARR 或 NLB 上不需要任何特殊設定。 即使您在 ARR 中使用伺服器親和性功能,同質性狀態資訊也會透過要求標頭中的 Cookie 提供給被動伺服器。
ARR 第 1 版完全支援此案例。
ARR 設定
步驟 1:在兩部 ARR 伺服器上啟用共用設定。
- 請遵循 本 檔中的步驟,在 IIS 中設定共用組態。
步驟 2:使用 ARR 設定 3 層部署架構。
請遵循 本 檔中的步驟,在 3 層部署架構中設定 ARR。
概括而言,上述檔說明:
- 如何在 ARR 伺服器上提供靜態內容。
- 如何撰寫靜態內容的 URL 重寫規則,以便直接從 ARR 伺服器提供服務。
- 如何撰寫動態內容的 URL 重寫規則,以便將它們轉送到應用程式伺服器。
NLB 設定
NLB 組態分成下列步驟:
- 在所有 ARR 伺服器上安裝 NLB 功能。
- 建立 ARR 的 NLB 叢集。
- 設定 NLB 以進行主動/被動部署。
- 開啟 [伺服器管理員] 。
- 展開 [功能]。
- 按一下 [新增功能]。
- 在 [新增功能精靈] 中,選取 [ 網路負載平衡]。
- 按一下 [安裝 ] 以確認 NLB 功能的安裝。
- 確認已成功安裝 NLB 功能。
- 在所有 ARR 伺服器上重複上述步驟。
- 確認 NLB 已安裝在 ARR 伺服器的所有實例上。
- 移至 [啟動 > 所有程式 > 管理工具],然後開啟 [網路負載平衡管理員]。
- 以滑鼠右鍵按一下 [網路負載平衡叢集],然後選取 [ 新增叢集]。
- 在 [新增叢集] 對話方塊的 [主機] 文字方塊中,輸入其中一個 ARR 伺服器的伺服器位址。 如果有多個介面,請輸入您要建立 NLB 叢集的伺服器位址。
- 在 NLB) 中的主動/被動模式 (單一主機模式中,優先順序會決定容錯移轉發生的順序。 根據預設,優先順序為 1 的伺服器是作用中的節點。
- 需要叢集 IP,這是虛擬 IP 位址。 按一下 [新增 ]。這是用戶端將與其通訊的 IP 位址。
- 輸入虛擬 IP 位址,然後按一下 [ 確定]。
- 按一下 [下一步] 。
- 接受預設值。 如需詳細資訊,請參閱 附錄。
- 按一下 [完成 ] 以完成 NLB 叢集的建立。
- 現在已建立 NLB 叢集,您可以將其他成員新增至叢集。 遵循所有其他成員伺服器上的其餘步驟。 在 [網路負載平衡管理員] 中,以滑鼠右鍵按一下新選取的叢集,然後選取 [ 新增主機至叢集]。
- 輸入要加入之成員的伺服器位址。 如果有多個介面,請選取 NLB 叢集應該使用的介面。
- 請注意,優先順序指派在叢集中的成員伺服器之間互斥且是唯一的。 在 NLB) 中的主動/被動模式 (單一主機模式中,優先順序會決定容錯移轉的順序。
- 按一下 [完成 ] 將成員伺服器新增至叢集。
- 網路Load Balancer管理員看起來應該如下所示:
- 若要設定主動/被動部署的 NLB,請在 [網路負載平衡管理員] 中,以滑鼠右鍵按一下叢集,然後選取 [ 叢集屬性]。 按一下 [ 連接埠規則] 索引標籤。按一下 [編輯]。
- 選取 [單一主機],然後按一下 [ 確定]。
NLB 已順利設定為使用 ARR 在主動/被動模式中運作。
選項 2:使用中/主動
在主動/主動模式中,您可以有兩部以上的 ARR 伺服器。 此組態可達到高可用性和延展性,與只達到高可用性的 Active/Pass 模式不同。
如先前所述,由於多個 ARR 伺服器設定的方式相同,因此會使用共用設定。 主要差異在於 NLB 的設定方式。 為了同時利用所有 ARR 伺服器,NLB 叢集連接埠規則會以多個主機模式設定。
不論是否在 NLB 上啟用親和性功能,ARR 伺服器上都不需要任何特殊設定。 針對一個,ARR 伺服器會使用一個共用組態,讓它們以相同方式進行設定。 其次,由於 ARR 會使用用戶端 Cookie 來儲存伺服器親和性資訊以供自己使用,因此這項資訊可在每個要求中使用,因此可在 ARR 伺服器上使用。 NLB 的建議是將親和性設定為 none,因為它會產生更平均的負載分配。
ARR 第 1 版完全支援此案例。
ARR 設定
Active/Active 的 ARR 組態與主動/被動的設定相同。 主要差異在於 NLB 的設定方式。
步驟 1:在兩部 ARR 伺服器上啟用共用設定。
- 請遵循 本 檔中的步驟,在 IIS 中設定共用組態。
步驟 2:使用 ARR 設定 3 層部署架構。
請遵循 本 檔中的步驟,在 3 層部署架構中設定 ARR。
概括而言,上述檔說明:
- 如何在 ARR 伺服器上提供靜態內容。
- 如何撰寫靜態內容的 URL 重寫規則,以便直接從 ARR 伺服器提供服務。
- 如何撰寫動態內容的 URL 重寫規則,以便將它們轉送到應用程式伺服器。
NLB 設定
NLB 組態分成下列步驟:
- 在所有 ARR 伺服器上安裝 NLB 功能。
- 建立 ARR 的 NLB 叢集。
- 設定 NLB 以進行主動/主動部署。
在所有 ARR 伺服器上安裝 NLB 功能:記載于 [這裡] (達到高可用性和延展性-arr-and-nlb.md#install NLB) 。
建立 ARR 的 NLB 叢集:記載于 [這裡] (達到高可用性和延展性-arr-and-nlb.md#create nlb) 。
- 若要為作用中/主動部署設定 NLB,請在[網路負載平衡管理員] 中,以滑鼠右鍵按一下叢集,然後選取 [叢集屬性]。 按一下 [ 連接埠規則] 索引標籤。按一下 [編輯]。
- 選取 [多部主機]。 針對 [同質] 設定,選取 [ 無]。 如上所述,建議不要在 NLB 中使用親和性,因為它會導致較佳的負載分佈。
NLB 已順利設定為使用 ARR 在作用中/主動模式中運作。
案例 2:使用主機名稱親和性共用裝載
此案例會利用 ARR 中的主機名稱親和性功能來啟用共用裝載部署,以:
- 減少傳統共用主機部署所涉及的手動管理和維護。
- 最大化現有的伺服器資源,同時確保所有伺服器資源都平均使用。
- 輕鬆地相應放大環境。
- 建立銷售額外容量的商機。
如需共用主機和 ARR 的詳細資訊,請參閱 本 檔。
下圖說明使用 ARR 的共用裝載環境:
選項 1:主動/被動
如先前所述,在主動/被動模式中,通常會有兩部 ARR 伺服器,其中一部伺服器會處理要求,而另一部伺服器則代表容錯移轉伺服器。 雖然此設定藉由移除單一失敗點來達到高可用性,但它不是向外延展解決方案,因為內容伺服器的匯總容量受限於一部 ARR 伺服器的最大容量。
在此設定中,由於兩部 ARR 伺服器設定的方式相同,因此會使用共用組態。 NLB 叢集設定為只接受其中一個叢集節點上的流量。 使用單一主機篩選模式設定叢集規則即可達成此目的。 接受流量的節點取決於 NLB 叢集節點的主機優先順序設定。 如需詳細資訊,請參閱 NLB 組態 。
ARR 中的主機名稱親和性功能會根據主機名稱,將要求同質化至特定伺服器 (或 RC 中的一組伺服器) 。 主機名稱與內容伺服器之間的同質對應執行時間狀態資訊會儲存在 ARR 伺服器實例內的記憶體中。 在 ARR 第 1 版中,ARR 會利用 Microsoft 外部快取第 1 版讓 IIS 在多個 ARR 伺服器之間共用和維護此執行時間狀態。 如需此案例的詳細資訊,請參閱 本 檔。
ARR 第 1 版完全支援此案例。
ARR 設定
步驟 1:針對具有主機名稱親和性的共用裝載設定 ARR。
- 請遵循 本 檔中的步驟,在 ARR 中設定共用主機的主機名稱親和性功能。
步驟 2:啟用和設定外部快取。
- 請遵循 本 檔中的步驟來啟用和設定外部快取。
NLB 設定
NLB 組態分成下列步驟:
- 安裝 NLB 功能。
- 建立 ARR 的 NLB 叢集。
- 設定 NLB 以進行主動/被動部署。
安裝 NLB 功能:記載于 [這裡] (達成-高可用性和延展性-arr-and-nlb.md#安裝 NLB 功能) 。
建立 ARR 的 NLB 叢集:記載 [這裡] (達到高可用性和延展性-arr-and-nlb.md#建立 ARR) 的 NLB 叢集。
設定 NLB 以進行主動/被動部署:記載 [這裡] (達到高可用性和延展性-arr-and-nlb.md#設定主動/被動) 的 NLB。
選項2:ARR 中的主動/主動
在主動/主動模式中,您可以有兩部以上的 ARR 伺服器。 此設定可同時達到高可用性和延展性,不同于主動/被動模式,這只會達到高可用性。 由於多個 ARR 伺服器是以相同方式設定,因此會使用共用組態。 為了同時利用所有 ARR 伺服器,NLB 會以多個主機模式進行設定。 如先前所述,主機名稱與內容伺服器之間的同質對應執行時間狀態資訊會儲存在 ARR 伺服器實例內的記憶體中。 為了在多個 ARR 伺服器之間共用此資訊,會使用適用于 IIS 的 Microsoft 外部快取。 如需外部快取的詳細資訊,請參閱本檔。
ARR 設定
主動/主動的 ARR 組態與主動/被動的組態相同。 主要差異在於 NLB 的設定方式。
步驟 1:針對具有主機名稱親和性的共用裝載設定 ARR。
- 請遵循 本 檔中的步驟,在 ARR 中設定共用主機的主機名稱親和性功能。
步驟 2:啟用及設定外部快取。
- 請遵循 本 檔中的步驟來啟用和設定外部快取。
NLB 設定
NLB 組態分成下列步驟:
- 安裝 NLB 功能。
- 建立 ARR 的 NLB 叢集。
- 設定 NLB 以進行主動/主動部署。
安裝 NLB 功能:記載于 [這裡] (達到高可用性和延展性-arr-and-nlb.md#安裝 NLB 功能) 。
建立 ARR 的 NLB 叢集:記載 [這裡] (達到高可用性和延展性-arr-and-nlb.md#建立 ARR) 的 NLB 叢集。
設定 NLB 以進行主動/主動部署:記載 [這裡] (達到高可用性和延展性-arr-and-nlb.md#設定適用于主動/主動) 的 NLB。 建議不要在此 ARR 案例中使用 NLB 中的親和性。
摘要
在此白皮書中,已檢閱兩個主要 ARR 案例,藉由部署多個 ARR 伺服器和使用 NLB 來達到高可用性和延展性。
附錄
附錄 A:用於撰寫路由決策規則的所有可用 HTTP 標頭和伺服器變數
ALL_HTTP | ALL_RAW | APPL_MD_PATH |
---|---|---|
APPL_PHYSICAL_PATH | CERT_COOKIE | CERT_FLAGS |
CERT_ISSUER | CERT_KEYSIZE | CERT_SECRETKEYSIZE |
CERT_SERIALNUMBER | CERT_SERVER_ISSUER | CERT_SERVER_SUBJECT |
CERT_SUBJECT | CONTENT_LENGTH | CONTENT_TYPE |
DOCUMENT_ROOT | GATEWAY_INTERFACE | HTTP_ACCEPT |
HTTP_ACCEPT_ENCODING | HTTP_ACCEPT_LANGUAGE | HTTP_CONNECTION |
HTTP_CONTENT_LENGTH | HTTP_HOST | HTTP_IF_MODIFIED_SINCE |
HTTP_IF_NONE_MATCH | HTTP_REFERER | HTTP_UA_CPU |
HTTP_USER_AGENT | HTTPS | HTTPS_KEYSIZE |
HTTPS_SECRETKEYSIZE | HTTPS_SERVER_ISSUER | HTTPS_SERVER_SUBJECT |
INSTANCE_ID | INSTANCE_META_PATH | LOCAL_ADDR |
PATH_INFO | PATH_TRANSLATED | QUERY_STRING |
REMOTE_ADDR | REMOTE_HOST | REMOTE_PORT |
REMOTE_USER | REQUEST_FILENAME | REQUEST_METHOD |
REQUEST_URI | SCRIPT_FILENAME | SCRIPT_NAME |
SERVER_ADDR | SERVER_NAME | SERVER_PORT |
SERVER_PORT_SECURE | SERVER_PROTOCOL | SERVER_SOFTWARE |
URL |
NLB Server Core 指示:
- 安裝 NLB 功能:
https://download.microsoft.com/download/6/3/5/6350896f-1e08-440b-9f24-d50f5e9b2390/ServerCoredeepdive.ppt
- 安裝 NLB 功能:
NLB 和 SSL:
其他 NLB 連結:
- https://technet.microsoft.com/library/cc782694.aspx
- https://technet.microsoft.com/library/cc778263.aspx
https://support.microsoft.com/kb/323437
https://support.microsoft.com/kb/890159
- https://blogs.msdn.com/clustering