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

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

創(chuàng)建 Azure 負載均衡器

創(chuàng)建負載均衡器運行狀況探測

創(chuàng)建負載均衡器流量規(guī)則

使用 cloud-init 創(chuàng)建基本的 Node.js 應用

創(chuàng)建虛擬機并將其附加到負載均衡器

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

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

Note

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

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

Azure 負載均衡器概述

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

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

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

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

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

創(chuàng)建 Azure 負載均衡器

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

Azure CLI復制

azgroupcreate--namemyResourceGroupLoadBalancer--locationchinaeast

創(chuàng)建公共 IP 地址

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

Azure CLI復制

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

創(chuàng)建負載均衡器

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

Azure CLI復制

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

創(chuàng)建運行狀況探測器

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

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

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

Azure CLI復制

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

創(chuàng)建負載均衡器規(guī)則

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

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

Azure CLI復制

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

配置虛擬網(wǎng)絡

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

創(chuàng)建網(wǎng)絡資源

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

Azure CLI復制

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

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

Azure CLI復制

aznetworknsgcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyNetworkSecurityGroup

使用az network nsg rule create創(chuàng)建網(wǎng)絡安全組規(guī)則。 以下示例創(chuàng)建名為“myNetworkSecurityGroupRule”的網(wǎng)絡安全組規(guī)則:

Azure CLI復制

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

使用az network nic create創(chuàng)建虛擬 NIC。 以下示例創(chuàng)建三個虛擬 NIC。 (在以下步驟中針對為應用創(chuàng)建的每個 VM 各使用一個虛擬 NIC)。 可隨時創(chuàng)建其他虛擬 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

創(chuàng)建虛擬機

創(chuàng)建 cloud-init 配置

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

創(chuàng)建名為“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

創(chuàng)建虛擬機

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

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

Azure CLI復制

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

現(xiàn)在,可使用az vm create創(chuàng)建 VM。 以下示例創(chuàng)建三個 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 返回提示之后,仍然存在繼續(xù)運行的后臺任務。--no-wait參數(shù)不會等待所有任務完成。 可能還需等待幾分鐘才能訪問應用。 在每個 VM 上運行應用時,負載均衡器運行狀況探測器會自動檢測。 應用運行后,負載均衡器規(guī)則將開始分布流量。

測試負載均衡器

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

Azure CLI復制

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

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

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

添加和刪除 VM

建議對運行應用的 VM 執(zhí)行維護,例如安裝 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 之間分發(fā)流量,可強制刷新 Web 瀏覽器。 現(xiàn)在可以對 VM 執(zhí)行維護,例如安裝 OS 更新或執(zhí)行 VM 重新啟動。

將 VM 添加到負載均衡器

可以在執(zhí)行 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

后續(xù)步驟

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

創(chuàng)建 Azure 負載均衡器

創(chuàng)建負載均衡器運行狀況探測

創(chuàng)建負載均衡器流量規(guī)則

使用 cloud-init 創(chuàng)建基本的 Node.js 應用

創(chuàng)建虛擬機并將其附加到負載均衡器

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

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

請轉(zhuǎn)到下一教程,詳細了解 Azure 虛擬網(wǎng)絡組件。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容