Azure Load Balancer : 簡介

sparkdev發表於2019-01-24

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)

相關文章