1 ARR介紹
ApplicationRequest Route(后面簡稱為ARR)是一個寄宿於IIS7(及以后的IIS版本)的一個基於代理的模塊,它可以通過判斷Http Headers,Server Variables以及負載均衡算法將HTTP的請求轉發到不同的處理服務器之上。ARR的用處如下:
- 增強應用的可用性與擴展性
- 更好的利用服務器資源
- 使得應用程序的部署更加方便,並且支持衛星部署管理與熱替換
ARR是基於URLRewrite Module的,它通過檢測客戶端發來的HTTP請求來做出請求路由的決定。
參考鏈接:
文章是連載,文末有前面幾章的鏈接。文章中講的2.5版本,目前最新版是3.0,本文也用3.0安裝搭建ARR環境;
2 安裝
官網下載地址:
https://www.iis.net/downloads/microsoft/application-request-routing
官網是用Web平台安裝程序,按照提示安裝即可。
腳本之家下載地址:
https://www.jb51.net/softs/629246.html
下載后有3個依賴項和ARR需要安裝。
以下是腳本之家下載的安裝說明
2.1 停止服務
打開cmd命令行,分別執行net stop was /y和net stop wmsvc /y,一般第二個沒有開啟。
2.2 手動安裝ARR及其依賴項
- webfarm_v1.1_amd64_en_us.msi
- ExternalDiskCache_amd64_en-US.msi
- rewrite_amd64_en-US.msi
- requestRouter_amd64.msi
按照提示安裝即可。
2.3 啟動服務
打開cmd命令行,分別執行net start was和net start wmsvc
3 創建Server Farm
ApplicationRequest Route模塊的使用是和Server Farm模塊結合在一起的,只有先創建了Server Farm,才能開始使用Application Request Route進行HTTP請求路由。ServerFarm簡而言之就是:對一個或者多個服務器的邏輯分組,便於管理,HTTP請求路由等。
3.1 新建ServerFarm
打開IIS管理器,在右側可以看到Server Farm項,右鍵,點擊Create Server Farm,輸入自定義Farm名稱;online:勾選即為開啟Server Farm。
3.2 添加應用服務地址
點擊“下一步”,添加應用服務地址
Server address:填寫應用服務的IP(如:192.168.1.112)或域名(www.XXXXX.com)
Advanced setting:點擊打開配置項,點擊applicationrequest routing前的加號,設置服務參數
如果http端口不是默認端口80,修改httpPort項(如:8000),修改后點擊“Add”,一定要先修改端口,再點“Add”;weight為權重值,用於負載均衡運算分發,暫時默認即可。
添加后,在服務列表中可以看到添加的服務,點擊“完成”:
點擊“完成”后,彈出是否創建於此Server Farm關聯的URL 重寫規則,點擊“是”。
完成后可以在IIS中看到新建的Server Farm,可以添加、移除、下線、上線應用服務。
4 服務器運行狀況監控
ARR可以配置通過發送GET請求來檢測ServerFarm中的服務器是狀態良好的。這個原理和我們時不時的ping一個電腦,來判斷其是否還可以連接一樣。
我們可以在在每個站點中放置一個文件(任意IIS允許請求的文件,例如txt,html,aspx頁面等,不能是.config等文件,例如:http://localhost/a.txt,(因接收請求的是ARR服務器本地,所以用localhost即可)在文本中寫一段文本,如:AAA,
打開IIS管理器,點擊左側Server Farm=》ARREIM,點擊右側“Health Test”,打開健康測試模塊:
配置如下:
ARR會每隔30秒(Interval)就去請求一次,然后比較請求的響應是否是“AAA”,從而判斷服務器是否狀態良好。
點擊 Verify URL Test,可以測試當前在線服務器的狀態,如果正常Result、Details都顯示Pass;如果異常,Result顯示Fail,Details顯示異常信息。
5 選擇負載均衡算法
打開“Load Balance”
Weighted round robin:加權循環,根據傳入請求的數量及其標准化權重分配流量。每個服務器都可以接收相同的請求分發或自定義分發。
Server variable hash:服務器變量哈希,根據服務器變量的hash來分配請求,這里面的服務器變量包括Cookie, URL,頭信息等。
Query string hash:查詢字符串哈希,根據URL查詢字符串的hash來分配請求,如果查詢字符串包含多個參數(?name=jesse&location=sh),則是用整個查詢字符串的hash來作判斷。
Request hash:請求哈希,根據服務器變量或者是URL的hash來分配請求,比如說服務器變量是QUERY_STRING,那么hash的值就是query string中對應的那個值。
默認Weighted round robin:加權循環,按照權重設置分發請求,如:現有兩台應用服務器B、C,B權重100,C權重100,則兩台應用服務器平均分發;B權重100,C權重300,則1/4請求分發給B,3/4請求分發給C。
6 監控和管理
在Server Farm頁,打開“Monitoring and Management”,可以查看各應用服務的健康狀態、請求分布及數量、請求響應時間、請求大小、權重等信息。
選中一個應用服務,點擊右側按鈕或者右鍵,可以重置統計信息、停止服務、禁止連接等
7 負載均衡器也做應用服務器
按照上面服務器設置,網絡拓撲圖如下圖:
有時一台服務器只當做負載均衡器,ARR服務占用系統資源很少,設備利用率較低,浪費資源。我們可以將負載均衡服務器也作為一台應用服務器運行。改在為下圖結構:
7.1 添加ARR本地應用服務
添加ARR本地應用服務時,IP填寫127.0.0.1,端口設置為8000,
7.2 修改Server Farm對應的URL重寫規則
打開IIS管理器,在主頁IIS下找到“URL 重寫”,雙擊打開
打開URL重寫可以看到Server Farm對應的重寫規則,選中,右鍵,條件=》添加,
“條件輸入”框中輸入{SERVER_PORT},“檢查輸入字符串是否”選擇“與模式匹配”,“模式”中輸入80,點“確定”
7.3 ARR服務器多應用服務站點
如果ARR服務器本地需要部署多個應用服務站點,需要在C:\Windows\System32\drivers\etc\hosts文件末尾添加映射,如:
127.0.0.1 site1
127.0.0.1 site2