天天看點

windows平台下實作高可用性和可擴充性-ARR和HLB

本文檔提供了關于如何将應用程式請求路由(ARR)與硬體負載均衡器一起使用以實作高可用性和可伸縮性的說明性指導。本文采用F5大IP負載均衡器來說明ARR與硬體負載平衡器之間的工作關系。

IIS7.0及以上版本的Microsoft Application Request Routing(ARR)是一個基于代理的路由子產品,它基于HTTP報頭、伺服器變量和負載平衡算法将HTTP請求轉發到内容伺服器。下圖顯示了典型的ARR部署:

windows平台下實作高可用性和可擴充性-ARR和HLB
雖然ARR為内容伺服器(Content server)提供了高可用性和可伸縮性,但總體部署并不是高度可用或可伸縮的,因為:

  • ARR是單點失效。
  • 内容伺服器(Content server)的可伸縮性受到一個ARR伺服器最大容量的限制。

為了克服這些挑戰,管理者可以考慮使用多個具有硬體負載均衡器的ARR伺服器,例如F5大IP。ARR可以在主動/被動模式下部署,以實作高可用性,也可以在主動/主動模式下實作高可用性和可伸縮性。本白皮書描述了如何将ARR和F5大IP一起部署,以便在實作總體高可用性和可伸縮性的同時啟用核心ARR方案。

應用ARP和F5 BIG-IP

ARR是作為IIS之上的一個子產品建構的,它的目的是在第7層(應用程式)做出路由決策。更準确地說,ARR依賴另一個IIS子產品URL重寫來檢查傳入的HTTP請求頭和伺服器變量來做出路由決策。根據這種設計,管理者可以根據應用程式級别的資訊編寫智能路由規則,例如:

  • 主機名(HTTP_HOST):根據主機名将通信量路由到不同的内容伺服器。
  • 請求資源(URL):基于檔案擴充名,确定請求的資源是用于靜态内容還是用于動态内容,并相應地路由請求。
  • 用戶端資訊(HTTP_USER_Agent):根據浏覽器類型和版本,将請求路由到适當的内容伺服器
  • 自定義标頭(由應用程式設定為Cookie):根據應用程式設定的cookie資訊(如使用者首選項或使用者ID)路由通信量。

以上隻是一些例子。有關HTTP頭和伺服器變量的完整清單,請參閱附錄A。

F5 BIG-IP的第3層和第4層的功能贊揚了ARR在基于第7層(如HTTP報頭和伺服器變量)進行路由決策方面的優勢。同時,ARR不為自己提供容錯部署特性,必須依靠其他互補技術和解決方案來實作ARR層的高可用性,如下所示:

windows平台下實作高可用性和可擴充性-ARR和HLB

場景1:基于http的路由和負載平衡

基于HTTP的路由和負載平衡方案支援三層部署體系結構,其中包括: 

  • 第1層(Web):提供處理靜态内容以及路由和負載平衡到第2層伺服器的剩餘動态請求的雙重目的。
  • 第2層(應用程式):依賴于業務邏輯的過程動态内容。
  • 第3層(資料):存儲資料。 

 下圖說明了3層部署:

windows平台下實作高可用性和可擴充性-ARR和HLB

盡管上面的示例顯示了将靜态内容與動态内容區分開來的路由規則,但另一個常見的場景是将表示請求與Web服務請求區分開來。

選項1:Active/Passive

 在主動/被動模式下,通常有兩個ARR伺服器,其中一個伺服器處理請求,而另一個伺服器作為故障轉移伺服器。如上所述,雖然此配置通過删除單個故障點來實作高可用性,但它并不是一個擴充解決方案,因為内容伺服器的總容量受到一個ARR伺服器的最大容量的限制。

在此設定中,由于兩個ARR伺服器的配置方式相同,是以使用了共享配置。F5 BIG-IP被配置為将所有請求路由到主動ARR伺服器,并且隻在必要時将請求路由到被動ARR伺服器。

除了ARR中的主機名關聯特性外,不存在兩個ARR伺服器之間必須共享的運作時狀态資訊。是以,對于這種情況,無論是在ARR伺服器上還是在F5 BIG-IP上都不需要特殊的配置。即使您使用ARR中的伺服器關聯特性,當F5 BIG-IP将請求路由到以前被動但現在主動的伺服器時,也會通過請求頭中的cookie向被動伺服器提供親緣關系狀态資訊。

這個場景在ARR版本1版本中完全支援。

ARR配置

步驟1:

  • 在兩個ARR伺服器上啟用共享配置。按照本文檔中的步驟在IIS中設定共享配置。

步驟2:

  • 使用arr配置3層部署架構。按照本文檔中的步驟在3層部署體系結構中配置ARR。
  • 在更高層次上,上面的文檔描述了:
    • 如何使ARR伺服器上的靜态内容可用。
    • 如何為靜态内容編寫URL重寫規則,以便直接從ARR伺服器為它們服務。
    • 如何為動态内容編寫URL重寫規則,以便将它們轉發到應用程式伺服器。

F5 BIG-IP 配置

在這種情況下,所有可用的ARR伺服器都被認為是活動的,并且是負載均衡通信量的候選伺服器。使用BIG-IP LTM來确定ARR前端的健康和性能,并将流量引導到性能最好的前端。

步驟1:配置ARR伺服器池。

  • 在“Local Traffic”部分,單擊“pool”。然後單擊Create按鈕建立一個池。
  • 任何唯一的名稱都适用于池;這個例子使用ARR_Pool。對于健康螢幕,您可以使用定制的HTTP螢幕或預設的HTTP螢幕。-你可以把負載平衡方法設定為循環。在這個場景中,由于隻有一個主動和被動的ARR伺服器,是以不使用負載平衡。-一定要啟用優先級組激活。這會配置 BIG-IP 以最高優先級的值将流量發送到伺服器(s)。當這些伺服器(s)不可用時,大ip将流量發送到ARR伺服器,并獲得下一個最高優先級值。在這個場景中,10.0.1的ARR伺服器的優先級值為1,10.0.0.2的優先級值為2。所有的流量将被發送到10.0.2,直到它下降,然後流量将被發送到10.0.1。
windows平台下實作高可用性和可擴充性-ARR和HLB

步驟2:配置虛拟伺服器。

  • 在“本地流量”部分,單擊“虛拟伺服器”。然後單擊Create按鈕建立虛拟伺服器。
  • 任何唯一的名稱都适用于虛拟伺服器;示例使用arr_vs.-對于目标,可以使用使用者指向浏覽器的IP位址。在這種情況下,我們使用。對于服務端口,我們使用‘80’。-對于虛拟伺服器類型部分,您有幾個選項。因為您依賴于arr來路由,是以可以選擇PerformanceHTTP,這是為最佳性能而設計的。-對于預設池,選擇在步驟1中建立的池。
windows平台下實作高可用性和可擴充性-ARR和HLB
  • 此時,您應該能夠連接配接到此VirtualServer,該伺服器将被發送到适當的ARR伺服器。

備選案文2:積極/活躍在ARR中

在活動/活動模式下,可以有兩個或多個ARR伺服器。這種配置實作了高可用性和可伸縮性,與僅實作高可用性的活動/傳遞模式不同。由于多個ARR伺服器的配置方式相同,是以使用了共享配置。F5大IP被配置為将傳入請求加載到所有可用和健康的ARR伺服器,而ARR伺服器反過來将請求轉發給内容伺服器。

如前所述,主機名和内容伺服器之間親合映射的運作時狀态資訊存儲在arr伺服器執行個體中的記憶體中。為了在多個ARR伺服器之間共享此資訊,使用Microsoft外部IIS緩存。有關外部緩存的詳細資訊,請參閱這檔案。

ARR組态

主動/主動的ARR結構與主動/被動的ARR結構相同。主要差別在于F5是如何配置的。

步驟1:在兩個ARR伺服器上啟用共享配置。

  • 按照下面的步驟這要在IIS中設定共享配置的文檔。

步驟2:使用arr配置3層部署架構。

  • 按照下面的步驟這文檔配置ARR在3層部署體系結構中。
  • 在進階别上,上述檔案描述:
    • 如何使靜态内容在arr伺服器上可用。
    • 如何為靜态内容編寫URL重寫規則,以便直接從arr伺服器為它們服務。

步驟3:啟用和配置外部緩存。

  • 按照下面的步驟這文檔以啟用和配置外部緩存以與arr一起使用。

F5大IP配置

在這種情況下,所有可用的ARR伺服器都被認為是活動的,并且是負載均衡通信量的候選伺服器。使用大ip ltm來确定arr前端的健康和性能,并将流量引導到性能最好的前端。

  • 在“本地交通”部分,單擊“池”。然後單擊Create按鈕建立一個池。
  • 任何唯一的名稱都适用于池;示例使用arr_Pool。-對于HealthMonitor,您可以使用自定義HTTP螢幕或預設HTTP螢幕。-由于您有多個ARR伺服器來分發通信量,是以需要選擇最适合您的需要的負載平衡方法。假設所有arr伺服器都具有相似的硬體特性,則動态負載平衡方法(如最快、可觀察或預測)将為您提供基于性能的分發。
windows平台下實作高可用性和可擴充性-ARR和HLB
windows平台下實作高可用性和可擴充性-ARR和HLB

摘要

在本白皮書中,回顧了兩種主要的ARR場景,通過部署多個ARR伺服器和使用F5大IP來實作高可用性和可伸縮性。

附錄

附錄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

繼續閱讀