1. 程式人生 > >Azure Load Balancer : 簡介

Azure Load Balancer : 簡介

添加 family 簡單 tro ssh resource 網絡 特殊 計劃

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

Azure Load Balancer 的主要功能

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

技術分享圖片

端口轉發
通過創建入站 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,並不直接與公網交互。

通過 Azure 門戶創建 Load Balancer 示例

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

技術分享圖片

這裏我們創建一個面向 Internet 的具有公共 IP 的的 Load Balancer,因此隨 Load Balancer 一起創建的還有一個公共的 IPv4 地址:

技術分享圖片

在 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)

Azure Load Balancer : 簡介