IIS負載均衡

[========]nginx

負載均衡

任何的負載均衡技術都要想辦法創建某種一對多的映射機制: 一個請求的入口映射到多個處理請求的節點,從而實現分而治之(Divide and Conquer)。
這種映射機制使得多個物理存在對外體現爲一個虛擬的總體,對服務的請求者屏蔽了內部的結構。web

分類

採用不一樣的機制創建映射關係,能夠造成不一樣的負載均衡技術,常見的包括:算法

DNS輪詢

DNS輪詢是最簡單的負載均衡方式。以域名做爲訪問入口,經過配置多條DNS A記錄使得請求能夠分配到不一樣的服務器。
DNS輪詢沒有快速的健康檢查機制,並且只支持WRR的調度策略致使負載很難「均衡」,一般用於要求不高的場景。 而且DNS輪詢方式直接將服務器的真實地址暴露給用戶,不利於服務器安全。後端

CDN

CDN(Content Delivery Network,內容分發網絡)。經過發佈機制將內容同步到大量的緩存節點,並在DNS服務器上進行擴展, 找到裏用戶最近的緩存節點做爲服務提供節點。
由於很難自建大量的緩存節點,因此一般使用CDN運營商的服務。目前國內的服務商不多,並且按流量計費,價格也比較昂貴。緩存

IP負載均衡

IP負載均衡是基於特定的TCP/IP技術實現的負載均衡。
IP負載均衡可使用硬件設備,也可使用軟件實現。
硬件設備的主要產品:F5-BIG-IP-GTM(簡稱F5)
軟件產品主要有:LVS、HAProxy、NginX
其中LVS、HAProxy能夠工做在4-7層,NginX工做在7層。關於三者的簡單對比,能夠參考這裏。安全

網絡七層協議

OSI(Open System Interconnection)是一個開放性的通訊系統互連參考模型。
OSI的7層從上到下分別是: 7應用層、6表示層、5會話層、4傳輸層、3網絡層、2數據鏈路層、1物理層;其中高層(即七、六、五、4層)定義了應用程序的功能,下面3層(即三、二、1層)主要面向經過網絡的端到端的數據流。
服務器

ARR(Application Request Route)

微軟與iis集成的反向代理Application Request Route配置使用簡單。
https://docs.microsoft.com/en-us/iis/extensions/planning-for-arr/using-the-application-request-routing-module網絡

  1. 安裝 Microsoft Web 平臺安裝程序
    https://www.iis.net/downloads/microsoft/web-platform-installer併發

  2. 運行,選擇安裝下面組件
    Web Deploy
    Applicaiton Request Router(應用程序請求路由)
    Url Rewriter(Url重寫)

  3. 使用Server Farms搭建集羣

配置IIS集羣

  1. 部署一個代理站點,修改應用程序池的閒置時間爲0,

    去掉回收的固定時間間隔

  2. 部署兩個服務節點
    每一個服務器節點下面添加了一個文件1.html,用來進行下面的測試

  3. 新建一個Server Farm

  4. 添加服務器節點,必定要在點擊Add前配置好端口號

  5. 配置路由規則,第一次建立完ServerFarm時能夠選擇自動建立路由規則,也能夠本身添加URL重寫規則


  6. 運行Health Test測試服務器節點是否正常

    經過訪問代理服務器來訪問服務節點下的文件

    服務節點測試經過

負載均衡配置


Load Balance 設置負載均衡算法和分發規則

負載監控

Monitoring and Management

Nginx

其特色是佔有內存少,併發能力強。
有說Nginx針對靜態html文件的性能才比較好。
http://nginx.org/

Nginx負載均衡.md(後續會發出文章)

獲取真實客戶端IP地址

通過負載均衡服務器後,請求數據包的源地址會修改成負載均衡服務器的地址,使用X-Forwarded-For的方式獲取客戶端的真實IP地址。

ARR

ARR中配置反向代理,


後端代碼中經過X-Forwarded-For請求頭獲取真實地址

var sourceAddress = Request.Headers["X-Forwarded-For"];
//獲得ip+端口號的地址形式,10.98.0.228:51129

題外話:
.Net Core 經過 ForwardedHeadersMiddleware 中間件能夠實現將代理服務器的 X-Forwarded-For 等頭信息自動加載到 HttpContext.Connection.RemoteIpAddress 屬性。 詳見 .NET Core 負載均衡.md(後續會發出文章)

相關文章
相關標籤/搜索