使用 Azure 经典 CLI 创建具有多个 NIC 的 VM(经典)

可以在 Azure 中创建虚拟机 (VM),并将多个网络接口 (NIC) 附加到每个 VM。 通过多个 NIC 可分离跨 NIC 的流量类型。 例如,一个 NIC 可与 Internet 通信,而另一个 NIC 仅与未连接到 Internet 的内部资源通信。 许多网络虚拟设备(例如应用程序交付和 WAN 优化解决方案)都需要具备跨多个 NIC 分离网络流量的能力。

重要

Azure 具有用于创建和处理资源的两个不同的部署模型:资源管理器部署模型和经典部署模型。 本文介绍使用经典部署模型的情况。 Microsoft 建议大多数新部署使用资源管理器模型。 了解如何使用 Resource Manager 部署模型执行这些步骤。

方案

本文档指导完成在特定方案中使用 VM 中的多个 NIC 的部署。 在此方案中,在 Azure 中托管两层 IaaS 工作负荷。 每个层部署在虚拟网络 (VNet) 中其自己的子网中。 前端层由几个 Web 服务器组成,这些服务器在负载均衡器集中组合在一起以实现高可用性。 后端层由几个数据库服务器组成。 这些数据库服务器部署为每个具有两个 NIC,一个用于数据库访问,另一个用于管理。 此方案还包括网络安全组 (NSG) 以控制哪些流量允许到达部署中的每个子网和 NIC。 下图显示了此方案的基本体系结构:

MultiNIC 方案

以下步骤使用名为 IaaSStory 的资源组用于 WEB 服务器,将名为 IaaSStory-BackEnd 的资源组用于 DB 服务器。

先决条件

创建数据库服务器之前,需要先使用此方案的所有必需资源创建 IaaSStory 资源组。 若要创建这些资源,请完成如下步骤。 若要创建虚拟网络,请完成创建虚拟网络一文中的步骤。

先决条件:安装 Azure CLI

若要执行本文中的步骤, 请安装 Azure CLI登录到 Azure

注意

如果没有 Azure 帐户,则需要注册一个。 在此处注册免费试用版。 此外,要继续操作,需要安装 jq 或其他某种 JSON 解析工具或库。

部署后端 VM

后端 VM 取决于以下资源的创建:

  • 数据磁盘的存储帐户。 为了提高性能,数据库服务器上的数据磁盘将使用固态驱动器 (SSD) 技术,这需要高级存储帐户。 请确保部署到的 Azure 位置支持高级存储。
  • NIC。 每个 VM 都将具有两个 NIC,一个用于数据库访问,另一个用于管理。
  • 可用性集。 所有数据库服务器都将添加到单个可用性集,以确保在维护期间至少有一个 VM 已启动且正在运行。

步骤 1 - 启动脚本

可以在此处下载所用的完整 bash 脚本。 完成以下步骤,以更改要在环境中使用的脚本:

  1. 基于在上面先决条件中部署的现有资源组更改以下变量的值。

     location="useast2"
     vnetName="WTestVNet"
     backendSubnetName="BackEnd"
    
  2. 基于要用于后端部署的值更改以下变量的值。

     backendCSName="IaaSStory-Backend"
     prmStorageAccountName="iaasstoryprmstorage"
     image="0b11de9248dd4d87b18621318e037d37__RightImage-Ubuntu-14.04-x64-v14.2.1"
     avSetName="ASDB"
     vmSize="Standard_DS3"
     diskSize=127
     vmNamePrefix="DB"
     osDiskName="osdiskdb"
     dataDiskPrefix="db"
     dataDiskName="datadisk"
     ipAddressPrefix="192.168.2."
     username='adminuser'
     password='adminP@ssw0rd'
     numberOfVMs=2
    

步骤 2 - 为 VM 创建必要资源

  1. 为所有后端 VM 创建新的云服务。 请注意使用 $backendCSName 变量表示资源组名称,使用 $location 表示 Azure 区域。

     azure service create --serviceName $backendCSName \
     	--location $location
    
  2. 为要由 VM 使用的 OS 和数据磁盘创建高级存储帐户。

     azure storage account create $prmStorageAccountName \
     	--location $location \
     	--type PLRS
    

步骤 3 - 创建具有多个 NIC 的 VM

  1. 基于 numberOfVMs 变量启动一个循环来创建多个 VM。

     for ((suffixNumber=1;suffixNumber<=numberOfVMs;suffixNumber++));
     do
    
  2. 对于每个 VM,指定两个 NIC 中的每一个的名称和 IP 地址。

     nic1Name=$vmNamePrefix$suffixNumber-DA
     x=$((suffixNumber+3))
     ipAddress1=$ipAddressPrefix$x
    
     nic2Name=$vmNamePrefix$suffixNumber-RA
     x=$((suffixNumber+53))
     ipAddress2=$ipAddressPrefix$x
    
  3. 创建 VM。 请注意 --nic-config 参数的用法,其中包含所有 NIC 的列表(包含名称、子网和 IP 地址)。

     azure vm create $backendCSName $image $username $password \
     	--connect $backendCSName \
     	--vm-name $vmNamePrefix$suffixNumber \
     	--vm-size $vmSize \
     	--availability-set $avSetName \
     	--blob-url $prmStorageAccountName.blob.core.windows.net/vhds/$osDiskName$suffixNumber.vhd \
     	--virtual-network-name $vnetName \
     	--subnet-names $backendSubnetName \
     	--nic-config $nic1Name:$backendSubnetName:$ipAddress1::,$nic2Name:$backendSubnetName:$ipAddress2::
    
  4. 为每个 VM 创建两个数据磁盘。

     azure vm disk attach-new $vmNamePrefix$suffixNumber \
     	$diskSize \
     	vhds/$dataDiskPrefix$suffixNumber$dataDiskName-1.vhd
    
     azure vm disk attach-new $vmNamePrefix$suffixNumber \
     	$diskSize \
     	vhds/$dataDiskPrefix$suffixNumber$dataDiskName-2.vhd
     done
    

步骤 4 - 运行脚本

现在,已根据需要下载并更改了脚本,请运行该脚本以创建具有多个 NIC 的后端数据库 VM。

  1. 保存该脚本并从 Bash 终端运行它。 将看到最初的输出,如下所示。

     info:    Executing command service create
     info:    Creating cloud service
     data:    Cloud service name IaaSStory-Backend
     info:    service create command OK
     info:    Executing command storage account create
     info:    Creating storage account
     info:    storage account create command OK
     info:    Executing command vm create
     info:    Looking up image 0b11de9248dd4d87b18621318e037d37__RightImage-Ubuntu-14.04-x64-v14.2.1
     info:    Looking up virtual network
     info:    Looking up cloud service
     info:    Getting cloud service properties
     info:    Looking up deployment
     info:    Creating VM
    
  2. 几分钟后,执行将结束,会看到输出的其余部分,如下所示。

     info:    OK
     info:    vm create command OK
     info:    Executing command vm disk attach-new
     info:    Getting virtual machines
     info:    Adding Data-Disk
     info:    vm disk attach-new command OK
     info:    Executing command vm disk attach-new
     info:    Getting virtual machines
     info:    Adding Data-Disk
     info:    vm disk attach-new command OK
     info:    Executing command vm create
     info:    Looking up image 0b11de9248dd4d87b18621318e037d37__RightImage-Ubuntu-14.04-x64-v14.2.1
     info:    Looking up virtual network
     info:    Looking up cloud service
     info:    Getting cloud service properties
     info:    Looking up deployment
     info:    Creating VM
     info:    OK
     info:    vm create command OK
     info:    Executing command vm disk attach-new
     info:    Getting virtual machines
     info:    Adding Data-Disk
     info:    vm disk attach-new command OK
     info:    Executing command vm disk attach-new
     info:    Getting virtual machines
     info:    Adding Data-Disk
     info:    vm disk attach-new command OK
    

步骤 5 - 在 VM 的操作系统中配置路由

Azure DHCP 会将默认网关分配给附加到虚拟机的第一个(主)网络接口。 Azure 不会将默认网关分配给附加到虚拟机的其他(辅助)网络接口。 因此,默认情况下无法与辅助网络接口所在子网的外部资源进行通信。 但是,辅助网络接口可以与子网之外的资源进行通信。 若要为辅助网络接口配置路由,请参阅在具有多个网络接口的虚拟机操作系统中进行路由选择