Azure Load Balancer : 簡介


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM