如何在 Azure 中均衡 Linux 虛擬機負載以創建高可用性應用程序

負載均衡通過將傳入請求分布到多個虛擬機來提供更高級別的可用性。 本教程介紹了 Azure 負載均衡器的不同組件,這些組件用于分發流量和提供高可用性。 你將學習如何執行以下操作:

創建 Azure 負載均衡器

創建負載均衡器運行狀況探測

創建負載均衡器流量規則

使用 cloud-init 創建基本的 Node.js 應用

創建虛擬機并將其附加到負載均衡器

查看負載均衡器的實際運行情況

從負載均衡器中添加和刪除 VM

Note

在 Azure 中國區使用 Azure CLI 2.0 之前,請先運行az cloud set -n AzureChinaCloud來改變云環境。如果想切回國際版 Azure,請再次運行az cloud set -n AzureCloud。

如果選擇在本地安裝并使用 CLI,本教程要求運行 Azure CLI 2.0.4 或更高版本。 運行az --version即可查找版本。 如果需要進行安裝或升級,請參閱安裝 Azure CLI 2.0

Azure 負載均衡器概述

Azure 負載均衡器是位于第 4 層(TCP、UDP)的負載均衡器,通過在正常運行的 VM 之間分發傳入流量提供高可用性。 負載均衡器運行狀況探測器監視每個 VM 上的給定端口,僅將流量分發給正常運行的 VM。

定義包含一個或多個公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通過 Internet 訪問負載均衡器和應用程序。

虛擬機使用其虛擬網絡接口卡 (NIC) 連接到負載均衡器。 若要向 VM 分發流量,后端地址池需包含連接到負載均衡器的虛擬 NIC 的 IP 地址。

若要控制流量,需為映射到 VM 的特定端口和協議定義負載均衡器規則。

如果遵循了前面的教程來創建虛擬機規模集,則已創建負載均衡器。 所有這些組件都已配置為規模集的一部分。

創建 Azure 負載均衡器

本部分詳細介紹如何創建和配置負載均衡器的每個組件。 創建負載均衡器之前,需使用az group create創建資源組。 以下示例在 chinaeast 位置創建名為 myResourceGroupLoadBalancer 的資源組:

Azure CLI復制

azgroupcreate--namemyResourceGroupLoadBalancer--locationchinaeast

創建公共 IP 地址

若要通過 Internet 訪問應用,需要負載均衡器的一個公共 IP 地址。 使用az network public-ip create創建公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 資源組中創建名為 myPublicIP 的公共 IP 地址:

Azure CLI復制

aznetworkpublic-ipcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyPublicIP

創建負載均衡器

使用az network lb create創建負載均衡器。 以下示例創建名為“myLoadBalancer”的負載均衡器,并將“myPublicIP”地址分配到前端 IP 配置:

Azure CLI復制

aznetworklbcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyLoadBalancer \--frontend-ip-namemyFrontEndPool \--backend-pool-namemyBackEndPool \--public-ip-addressmyPublicIP

創建運行狀況探測器

若要允許負載均衡器監視應用的狀態,可以使用運行狀況探測器。 運行狀況探測器基于其對運行狀況檢查的響應,從負載均衡器中動態添加或刪除 VM。 默認情況下,在 15 秒時間間隔內發生兩次連續的故障后,會從負載均衡器分布中刪除 VM。 可以為應用創建基于協議或特定運行狀況檢查頁面的運行狀況探測器。

以下示例創建一個 TCP 探測器。 還可創建自定義 HTTP 探測,以便執行更精細的運行狀況檢查。 使用自定義 HTTP 探測時,必須創建運行狀況檢查頁,例如 healthcheck.js。 探測必須為負載均衡器返回 HTTP 200 OK 響應,以保持主機處于旋轉狀態。

若要創建 TCP 運行狀況探測,請使用az network lb probe create。 以下示例創建名為“myHealthProbe”的運行狀況探測:

Azure CLI復制

aznetworklbprobecreate\--resource-groupmyResourceGroupLoadBalancer \--lb-namemyLoadBalancer \--namemyHealthProbe \--protocoltcp \--port80

創建負載均衡器規則

負載均衡器規則用于定義將流量分配給 VM 的方式。 定義傳入流量的前端 IP 配置和后端 IP 池以接收流量,同時定義所需源和目標端口。 若要確保僅正常運行的 VM 接收流量,還需定義要使用的運行狀況探測。

使用az network lb rule create創建負載均衡器規則。 以下示例創建名為“myLoadBalancerRule”的規則、使用“myHealthProbe”運行狀況探測并平衡端口 80 上的流量:

Azure CLI復制

aznetworklbrulecreate\--resource-groupmyResourceGroupLoadBalancer \--lb-namemyLoadBalancer \--namemyLoadBalancerRule \--protocoltcp \--frontend-port80\--backend-port80\--frontend-ip-namemyFrontEndPool \--backend-pool-namemyBackEndPool \--probe-namemyHealthProbe

配置虛擬網絡

需要先創建提供支持的虛擬網絡資源,然后才能部署某些 VM 并測試均衡器。 有關虛擬網絡的詳細信息,請參閱管理 Azure 虛擬網絡教程。

創建網絡資源

使用az network vnet create創建虛擬網絡。 以下示例創建名為“myVnet”的虛擬網絡和一個名為“mySubnet”的子網:

Azure CLI復制

aznetworkvnetcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyVnet \--subnet-namemySubnet

若要添加網絡安全組,請使用az network nsg create。 以下示例創建名為“myNetworkSecurityGroup”的網絡安全組:

Azure CLI復制

aznetworknsgcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyNetworkSecurityGroup

使用az network nsg rule create創建網絡安全組規則。 以下示例創建名為“myNetworkSecurityGroupRule”的網絡安全組規則:

Azure CLI復制

aznetworknsgrulecreate\--resource-groupmyResourceGroupLoadBalancer \--nsg-namemyNetworkSecurityGroup \--namemyNetworkSecurityGroupRule \--priority1001\--protocoltcp \--destination-port-range80

使用az network nic create創建虛擬 NIC。 以下示例創建三個虛擬 NIC。 (在以下步驟中針對為應用創建的每個 VM 各使用一個虛擬 NIC)。 可隨時創建其他虛擬 NIC 和 VM,并將其添加到負載均衡器:

bash復制

foriin`seq 1 3`;doaz network nic create \? ? ? ? --resource-group myResourceGroupLoadBalancer \? ? ? ? --name myNic$i\? ? ? ? --vnet-name myVnet \? ? ? ? --subnet mySubnet \? ? ? ? --network-security-group myNetworkSecurityGroup \? ? ? ? --lb-name myLoadBalancer \? ? ? ? --lb-address-pools myBackEndPooldone

創建虛擬機

創建 cloud-init 配置

在有關如何在首次啟動時自定義 Linux 虛擬機的上一個教程中,你已了解如何使用 cloud-init 自動執行 VM 自定義。 可使用同一個 cloud-init 配置文件安裝 NGINX 并運行簡單的“Hello World”Node.js 應用。

創建名為“cloud-init.txt”的文件并粘貼以下配置。 請確保已正確復制整個 cloud-init 文件,尤其是第一行:

yaml復制

#cloud-configpackage_upgrade:truepackages:-nginx-nodejs-npmwrite_files:- owner:www-data:www-data- path:/etc/nginx/sites-available/defaultcontent:|

server {

listen 80;

location / {

proxy_pass http://localhost:3000;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection keep-alive;

proxy_set_header Host $host;

proxy_cache_bypass $http_upgrade;

}

}- owner:azureuser:azureuser- path:/home/azureuser/myapp/index.jscontent:|

var express = require('express')

var app = express()

var os = require('os');

app.get('/', function (req, res) {

res.send('Hello World from host ' + os.hostname() + '!')

})

app.listen(3000, function () {

console.log('Hello world app listening on port 3000!')

})runcmd:-servicenginxrestart-cd"/home/azureuser/myapp"-npminit-npminstallexpress-y-nodejsindex.js

創建虛擬機

若要提高應用的高可用性,請將 VM 放置在可用性集中。 有關可用性集的詳細信息,請參閱前面的如何創建高可用性虛擬機教程。

使用az vm availability-set create創建可用性集。 以下示例創建名為“myAvailabilitySet”的可用性集:

Azure CLI復制

azvmavailability-setcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyAvailabilitySet

現在,可使用az vm create創建 VM。 以下示例創建三個 VM,并生成 SSH 密鑰(如果它們尚不存在):

bash復制

foriin`seq 1 3`;doaz vm create \? ? ? ? --resource-group myResourceGroupLoadBalancer \? ? ? ? --name myVM$i\? ? ? ? --availability-set myAvailabilitySet \? ? ? ? --nics myNic$i\? ? ? ? --image UbuntuLTS \? ? ? ? --admin-username azureuser \? ? ? ? --generate-ssh-keys \? ? ? ? --custom-data cloud-init.txt \? ? ? ? --no-waitdone

在 Azure CLI 返回提示之后,仍然存在繼續運行的后臺任務。--no-wait參數不會等待所有任務完成。 可能還需等待幾分鐘才能訪問應用。 在每個 VM 上運行應用時,負載均衡器運行狀況探測器會自動檢測。 應用運行后,負載均衡器規則將開始分布流量。

測試負載均衡器

使用az network public-ip show獲取負載均衡器的公共 IP 地址。 以下示例獲取前面創建的“myPublicIP”的 IP 地址:

Azure CLI復制

aznetworkpublic-ipshow\--resource-groupmyResourceGroupLoadBalancer \--namemyPublicIP \--query[ipAddress]\--outputtsv

然后,可將公共 IP 地址輸入 Web 瀏覽器中。 請記?。涸谪撦d均衡器開始向 VM 分發流量之前,VM 需要幾分鐘才能準備就緒。 隨即顯示應用,包括負載均衡器將流量分發到的 VM 的主機名,如下例所示:

若要查看負載均衡器如何在運行應用的所有 3 個 VM 之間分配流量,可強制刷新 Web 瀏覽器。

添加和刪除 VM

建議對運行應用的 VM 執行維護,例如安裝 OS 更新。 若要應對應用增加的流量,建議添加更多 VM。 本部分演示了如何在負載均衡器中刪除或添加 VM。

從負載均衡器中刪除 VM

可使用az network nic ip-config address-pool remove從后端地址池中刪除 VM。 以下示例從“myLoadBalancer”中刪除“myVM2”的虛擬 NIC:

Azure CLI復制

aznetworknicip-configaddress-poolremove\--resource-groupmyResourceGroupLoadBalancer \--nic-namemyNic2 \--ip-config-nameipConfig1 \--lb-namemyLoadBalancer \--address-poolmyBackEndPool

若要查看負載均衡器如何在運行應用的其余兩個 VM 之間分發流量,可強制刷新 Web 瀏覽器。 現在可以對 VM 執行維護,例如安裝 OS 更新或執行 VM 重新啟動。

將 VM 添加到負載均衡器

可以在執行 VM 維護后或需要擴展容量的情況下,使用az network nic ip-config address-pool add將 VM 添加到后端地址池。 以下示例將“myVM2”的虛擬 NIC 添加到“myLoadBalancer”:

Azure CLI復制

aznetworknicip-configaddress-pooladd\--resource-groupmyResourceGroupLoadBalancer \--nic-namemyNic2 \--ip-config-nameipConfig1 \--lb-namemyLoadBalancer \--address-poolmyBackEndPool

后續步驟

在本教程中,你已創建了一個負載均衡器并已將 VM 附加到它。 你已了解如何:

創建 Azure 負載均衡器

創建負載均衡器運行狀況探測

創建負載均衡器流量規則

使用 cloud-init 創建基本的 Node.js 應用

創建虛擬機并將其附加到負載均衡器

查看負載均衡器的實際運行情況

從負載均衡器中添加和刪除 VM

請轉到下一教程,詳細了解 Azure 虛擬網絡組件。

立即訪問http://market.azure.cn

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容