在 Linux 上創(chuàng)建虛擬機(jī)規(guī)模集和部署高度可用的應(yīng)用

利用虛擬機(jī)規(guī)模集,可以部署和管理一組相同的、自動(dòng)縮放的虛擬機(jī)。 可以手動(dòng)縮放規(guī)模集中的 VM 數(shù),也可以定義規(guī)則,以便根據(jù)資源使用情況(如 CPU 使用率、內(nèi)存需求或網(wǎng)絡(luò)流量)進(jìn)行自動(dòng)縮放。 在本教程中,將在 Azure 中部署虛擬機(jī)規(guī)模集。 你將學(xué)習(xí)如何執(zhí)行以下操作:

使用 cloud-init 創(chuàng)建可縮放的應(yīng)用

創(chuàng)建虛擬機(jī)規(guī)模集

增加或減少規(guī)模集中的實(shí)例數(shù)

查看規(guī)模集實(shí)例的連接信息

在規(guī)模集中使用數(shù)據(jù)磁盤

Note

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

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

規(guī)模集概述

利用虛擬機(jī)規(guī)模集,可以部署和管理一組相同的、自動(dòng)縮放的虛擬機(jī)。 規(guī)模集中的 VM 將分布在邏輯容錯(cuò)域和更新域的一個(gè)或多個(gè)放置組中。 這些放置組由配置類似的 VM 組成,與可用性集相似。

可以根據(jù)需要在規(guī)模集中創(chuàng)建 VM。 可以定義自動(dòng)縮放規(guī)則來控制如何以及何時(shí)在規(guī)模集中添加或刪除 VM。 這些規(guī)則可以根據(jù) CPU 負(fù)載、內(nèi)存用量或網(wǎng)絡(luò)流量等指標(biāo)觸發(fā)。

使用 Azure 平臺(tái)映像時(shí),規(guī)模集最多支持 1,000 個(gè) VM。 對(duì)于有重要安裝或 VM 自定義要求的工作負(fù)荷,可能需要創(chuàng)建自定義 VM 映像。 使用自定義映像時(shí),在規(guī)模集中最多可以創(chuàng)建 300 個(gè) VM。

創(chuàng)建用于縮放的應(yīng)用

對(duì)于生產(chǎn)用途,可能需要創(chuàng)建自定義 VM 映像,其中包含已安裝和配置的應(yīng)用程序。 在本教程中,我們將在首次啟動(dòng)時(shí)自定義 VM,以便快速了解規(guī)模集的運(yùn)作方式。

上一篇教程已介紹如何使用 cloud-init 在首次啟動(dòng)時(shí)自定義 Linux 虛擬機(jī)。 可使用同一個(gè) cloud-init 配置文件安裝 NGINX 并運(yùn)行簡單的“Hello World”Node.js 應(yīng)用。 創(chuàng)建名為“cloud-init.txt”的文件并粘貼以下配置。 請確保已正確復(fù)制整個(gè) cloud-init 文件,尤其是第一行:

yaml復(fù)制

#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)建規(guī)模集

使用az group create創(chuàng)建資源組,然后才能創(chuàng)建規(guī)模集。 以下示例在“chinaeast”位置創(chuàng)建名為“myResourceGroupScaleSet”的資源組:

Azure CLI復(fù)制

azgroupcreate--namemyResourceGroupScaleSet--locationchinaeast

現(xiàn)在,使用az vmss create創(chuàng)建虛擬機(jī)規(guī)模集。 以下示例創(chuàng)建名為“myScaleSet”的規(guī)模集,使用 cloud-int 文件自定義 VM,然后生成 SSH 密鑰(如果不存在):

Azure CLI復(fù)制

azvmsscreate\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--imageUbuntuLTS \--upgrade-policy-modeautomatic \--custom-datacloud-init.txt \--admin-usernameazureuser \--generate-ssh-keys

創(chuàng)建和配置所有的規(guī)模集資源和 VM 需要幾分鐘時(shí)間。 在 Azure CLI 返回提示之后,仍然存在繼續(xù)運(yùn)行的后臺(tái)任務(wù)。 可能還需等待幾分鐘才能訪問應(yīng)用。

允許 Web 流量

已自動(dòng)創(chuàng)建一個(gè)負(fù)載均衡器,作為虛擬機(jī)規(guī)模集的一部分。 負(fù)載均衡器使用負(fù)載均衡器規(guī)則將流量分配到一組定義的 VM。 可以在下一篇教程如何在 Azure 中實(shí)現(xiàn)虛擬機(jī)的負(fù)載均衡中詳細(xì)了解負(fù)載均衡器的概念和配置。

若要允許通信流到達(dá) Web 應(yīng)用,請使用az network lb rule create創(chuàng)建一個(gè)規(guī)則。 以下示例創(chuàng)建名為“myLoadBalancerRuleWeb”的規(guī)則:

Azure CLI復(fù)制

aznetworklbrulecreate\--resource-groupmyResourceGroupScaleSet \--namemyLoadBalancerRuleWeb \--lb-namemyScaleSetLB \--backend-pool-namemyScaleSetLBBEPool \--backend-port80\--frontend-ip-nameloadBalancerFrontEnd \--frontend-port80\--protocoltcp

測試應(yīng)用

若要在 Web 上查看 Node.js 應(yīng)用,請使用az network public-ip show獲取負(fù)載均衡器的公共 IP 地址。 以下示例獲取創(chuàng)建為規(guī)模集一部分的“myScaleSetLBPublicIP”的 IP 地址:

Azure CLI復(fù)制

aznetworkpublic-ipshow\--resource-groupmyResourceGroupScaleSet \--namemyScaleSetLBPublicIP \--query[ipAddress]\--outputtsv

將公共 IP 地址輸入到 Web 瀏覽器中。 將顯示應(yīng)用,包括負(fù)載均衡器將流量分發(fā)到的 VM 的主機(jī)名:

若要查看規(guī)模集的實(shí)際運(yùn)行情況,可以強(qiáng)制刷新 Web 瀏覽器,以查看負(fù)載均衡器如何在運(yùn)行應(yīng)用的所有 VM 之間分發(fā)流量。

管理任務(wù)

在規(guī)模集的整個(gè)生命周期內(nèi),可能需要運(yùn)行一個(gè)或多個(gè)管理任務(wù)。 此外,可能還需要?jiǎng)?chuàng)建自動(dòng)執(zhí)行各種生命周期任務(wù)的腳本。 Azure CLI 2.0 提供一種用于執(zhí)行這些任務(wù)的快速方法。 以下是一些常見任務(wù)。

查看規(guī)模集中的 VM

若要查看規(guī)模集中運(yùn)行的 VM 列表,請使用az vmss list-instances,如下所示:

Azure CLI復(fù)制

azvmsslist-instances \--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--outputtable

輸出類似于以下示例:

Azure CLI復(fù)制

InstanceId? LatestModelApplied? ? Location? ? Name? ? ? ? ? ProvisioningState? ? ResourceGroup? ? ? ? ? ? VmId------------------------------------------------------------------------------------------------------------------------------------1True? ? ? ? ? ? ? ? ? chinaeast? myScaleSet_1? Succeeded? ? ? ? ? ? MYRESOURCEGROUPSCALESET? c72ddc34-6c41-4a53-b89e-dd24f27b30ab3True? ? ? ? ? ? ? ? ? chinaeast? myScaleSet_3? Succeeded? ? ? ? ? ? MYRESOURCEGROUPSCALESET44266022-65c3-49c5-92dd-88ffa64f95da

增加或減少 VM 實(shí)例

若要查看規(guī)模集中當(dāng)前包含的實(shí)例數(shù),請使用az vmss show并查詢 “sku.capacity”:

Azure CLI復(fù)制

azvmssshow\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--query[sku.capacity]\--outputtable

然后,可以使用az vmss scale手動(dòng)增加或減少規(guī)模集中虛擬機(jī)的數(shù)目。 以下示例將規(guī)模集中 VM 的數(shù)目設(shè)置為 5:

Azure CLI復(fù)制

azvmssscale\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--new-capacity5

利用自動(dòng)縮放規(guī)則,可以定義如何根據(jù)網(wǎng)絡(luò)流量或 CPU 使用率等需求,增加或減少規(guī)模集中 VM 的數(shù)目。 目前,不能在 Azure CLI 2.0 中設(shè)置這些規(guī)則。 使用Azure 門戶配置自動(dòng)縮放。

獲取連接信息

若要獲取有關(guān)規(guī)模集中 VM 的連接信息,請使用az vmss list-instance-connection-info。 此命令為每個(gè)允許采用 SSH 進(jìn)行連接的 VM 輸出公共 IP 地址和端口:

Azure CLI復(fù)制

azvmsslist-instance-connection-info \--resource-groupmyResourceGroupScaleSet \--namemyScaleSet

將數(shù)據(jù)磁盤與規(guī)模集配合使用

可以創(chuàng)建數(shù)據(jù)磁盤并與規(guī)模集配合使用。 前面的教程介紹了如何管理 Azure 磁盤,其中概述了在數(shù)據(jù)磁盤而非 OS 磁盤上生成應(yīng)用的最佳做法和用于實(shí)現(xiàn)此目的的性能改進(jìn)。

創(chuàng)建具有數(shù)據(jù)磁盤的規(guī)模集

若要?jiǎng)?chuàng)建規(guī)模集并附加數(shù)據(jù)磁盤,請將--data-disk-sizes-gb參數(shù)添加到az vmss create命令中。 以下示例創(chuàng)建一個(gè)規(guī)模集,它具有附加到每個(gè)實(shí)例的 50 GB 數(shù)據(jù)磁盤:

Azure CLI復(fù)制

azvmsscreate\--resource-groupmyResourceGroupScaleSet \--namemyScaleSetDisks \--imageUbuntuLTS \--upgrade-policy-modeautomatic \--custom-datacloud-init.txt \--admin-usernameazureuser \--generate-ssh-keys\--data-disk-sizes-gb50

刪除規(guī)模集中的實(shí)例時(shí),也會(huì)刪除所有附加的數(shù)據(jù)磁盤。

添加數(shù)據(jù)磁盤

若要向規(guī)模集中的實(shí)例添加數(shù)據(jù)磁盤,請使用az vmss disk attach。 以下示例向每個(gè)實(shí)例添加一個(gè) 50 GB 的磁盤:

Azure CLI復(fù)制

azvmssdiskattach\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--size-gb50\--lun2

分離數(shù)據(jù)磁盤

若要?jiǎng)h除附加到規(guī)模集中實(shí)例的數(shù)據(jù)磁盤,請使用az vmss disk detach。 以下示例在 LUN 2 刪除每個(gè)實(shí)例中的數(shù)據(jù)磁盤:

Azure CLI復(fù)制

azvmssdiskdetach\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--lun2

后續(xù)步驟

在本教程中,你已創(chuàng)建了一個(gè)虛擬機(jī)規(guī)模集。 你已了解如何:

使用 cloud-init 創(chuàng)建可縮放的應(yīng)用

創(chuàng)建虛擬機(jī)規(guī)模集

增加或減少規(guī)模集中的實(shí)例數(shù)

查看規(guī)模集實(shí)例的連接信息

在規(guī)模集中使用數(shù)據(jù)磁盤

請繼續(xù)學(xué)習(xí)下一教程,詳細(xì)了解虛擬機(jī)的負(fù)載均衡概念。

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

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

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

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