Azure Load Balancer : 簡介

Azure 提供的負載均衡服務叫 Load Balancer,它工做在 ISO 七層模型的第四層,經過分析 IP 層及傳輸層(TCP/UDP)的流量實現基於 "IP + 端口" 的負載均衡。前端

Azure Load Balancer 的主要功能

負載均衡
基於 ISO 四層的負載均衡,請參考下圖(此圖來自互聯網):windows

端口轉發
經過建立入站 NAT 規則,能夠實現端口轉發,未來自前端 IP 地址的特定端口的流量轉發到虛擬網絡中特定後端實例的特定端口。好比我能夠映射前端 IP 的 10022 端口到後端 VM1 的 22 端口;映射前端 IP 的 20022 端口到後端 VM2 的 22 端口。後端

對應用程序透明
協議握手始終在客戶端與後端池中的虛機實例之間直接發生。 對入站請求作出的響應始終是來自虛擬機的響應。 當請求抵達虛擬機時,也會保留原始的源 IP 地址。安全

自動探測後端主機狀態
爲肯定後端池中實例的運行情況,負載均衡器會使用預約義的規則檢測後端實例的運行情況。當探測到故障時負載均衡器會中止向該實例發送新鏈接。 現有鏈接不受影響,會一直保留到應用程序終止了請求、超時或虛機關閉爲止。
注意:基礎版的 Load Balancer 只支持 TCP 和 HTTP 協議的探測規則,而標準版還支持 HTTPS 協議的探測規則。網絡

出站鏈接(SNAT)
從虛擬網絡中的私有 IP 地址發往 Internet 上的公共 IP 地址的全部出站流量都被轉換爲負載均衡器的前端 IP 地址。經過負載均衡規則將前端公共 IP 地址端綁定到後端 VM 後,Azure 會將出站鏈接設定爲自動轉換成前端的公共 IP 地址。架構

內部負載均衡和公共負載均衡

咱們能夠經過下圖來理解內部負載均衡(Internal Load Balancer)和公共負載均衡(Public Load Balancer)的區別(此圖來自互聯網):負載均衡

簡單的說就是公共負載均衡的前端 IP 是公網 IP,是面向 Internet 的;而內部負載均衡的前端 IP 則是面向私有網絡的私有 IP,並不直接與公網交互。ssh

經過 Azure 門戶建立 Load Balancer 示例

在 Azure 門戶網站中添加 Load Balancer 類型的資源,設置基本信息,好比下圖所示:網站

這裏咱們建立一個面向 Internet 的具備公共 IP 的的 Load Balancer,所以隨 Load Balancer 一塊兒建立的還有一個公共的 IPv4 地址:ui

在 Load Balancer 建立完成後,咱們就能夠開始設置其詳細的屬性了。比較經常使用的配置有前端 IP、後端池、運行情況探測、負載均衡規則和入站 NAT 規則:

配置前端 IP

前端 IP 是訪問負載均衡後端資源的接口,相關的基本配置在咱們建立 Load Balancer 已經隨之完成了(就是面向公網的一個 IPv4 地址):

配置後端池

所謂的後端池就是藏在 Load Balancer 背後真正幹活的主兒,這裏咱們先去建立兩臺虛機,而後再把這兩臺虛機添加到 Load Balancer 的後端池中。

下面是建立虛機時的一些注意事項。
把新建的虛機放入同一個可用性集中(AvailabilitySet)
由於咱們建立的是基礎版的 Load Balancer,它的後端池只支持在同一個可用性集中的虛機,因此咱們要建立一個可用性集,並把全部的虛機加入到這個可用性集中(只有在建立虛機時才能加入可用性集):

不須要入站規則
由於咱們的主機是隱藏在 Load Balancer 後面的,因此不須要設置入站端口規則:

也不須要公用 IP 和網絡安全組(由於虛機在私有的子網中)

對虛機的訪問可用經過配置 Load Balancer 的入站 NAT 規則實現。

新建虛機後就能夠把它們加入 Load Balancer 的後端池了,下面是建立虛機的過程當中建立出的資源:

添加後端池
新建一個後端池,並把咱們建立的可用性集 nicklbavailabilityset 中的虛機加入其中:

添加完成後能夠看到後端池中的虛機及其狀態:

運行情況探測

Load Balancer 須要經過運行情況探測機制來監控後端池中資源的狀態,可使用運行情況探測來檢測後端實例上應用程序的故障。這裏咱們經過檢測後端虛機的 80 號端口來判斷其服務的狀態:

默認的規則是每隔 5 秒檢測一次,若是連續失敗兩次就認爲虛機提供的服務離線。

負載均衡規則

負載均衡規則定義了 Load Balancer 以何種方式把用戶的請求分配給後端池中的虛機:

上面的規則把 Load Balancer 前端 IPv4 80 端口收到的請求分配到後端池中虛機的 80 端口。注意這裏的 "會話屬性","無" 表示請求能夠由後端的任何一臺虛機處理。除了 "無" 你還能夠選擇 "客戶端 IP" 和 "客戶端 IP 和協議"。"客戶端 IP" 表示只要是來自同一個客戶端 IP 地址的連續請求都由後端的同一臺虛機處理;而 "客戶端 IP 和協議" 則表示來自同一客戶端 IP 和端口號的組合連續請求將由後端的同一臺虛機處理。

入站 NAT 規則

入站 NAT 規則主要用來控制對後端主機的訪問方式。由於後端的主機都在私有的局域網中,因此須要經過入站 NAT 規則來創建公共 IP 地址上端口和虛擬主機上端口的映射,以便經過公共 IP 地址上的端口號訪問後端虛機。好比咱們計劃經過 Load Balancer 公共 IP 地址上的 10022 端口訪問後端虛機 nicklbvm1 的 22 端口,其配置以下:

這樣就能夠經過 ssh -p 10022 user@前端IP地址 的方式遠程登陸後端虛機 nicklbvm1 了。經過相似的配置,咱們能夠經過 20022 端口鏈接到後端主機 nicklbvm2:

至此,一個基本的 Load Balancer 已經配置完成了,若是你在後端的虛機中部署上網站,它就能夠正常的響應用戶的請求了。

總結

經過 Azure 提供的 Load Balancer 服務,咱們能夠簡單、快速的搭建起負載均衡的基礎架構。對於一些簡單的應用這樣的配置基本也就夠用了,可是針對一些特殊的用例,好比支持 IPv6 和 HTTPS 等狀況,還須要有更多針對性的配置。在後續的文章中,筆者將介紹如何建立支持 IPv6 的 Load Balancer,以及如何擴展 Load Balancer 後端的虛機池。

參考:
Azuer Load Balancer 官方文檔
建立基本負載均衡器
2 VMs in a Load Balancer and load balancing rules(windows)

相關文章
相關標籤/搜索