使用 PowerShell 创建具有多个 NIC 的 VM(经典版)

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

重要

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

场景

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

MultiNIC 方案

以下步骤为 WEB 服务器使用名为 IaaSStory 的资源组,为数据库服务器使用名为 IaaSStory-BackEnd 的资源组。

先决条件

在创建 DB 服务器之前,需要创建包含此方案所需的所有资源的 IaaSStory 资源组。 若要创建这些资源,请完成以下步骤。 按照“ 创建虚拟网络 ”一文中的步骤创建虚拟网络。

先决条件:安装 Azure PowerShell 模块

若要执行本文中的步骤,需要 安装和配置 Azure PowerShell 模块。 请务必完成所有指令。 安装完成后,请登录到 Azure,然后选择订阅。

注释

需要一个 Azure 帐户来完成这些步骤。 如果没有 Azure 帐户,可以注册 免费试用版

创建后端 VM

后端虚拟机依赖于以下资源的创建:

  • 后端子网。 数据库服务器将属于单独的子网,用于隔离流量。 以下脚本要求此子网存在于名为 WTestVnet 的 vnet 中。
  • 数据磁盘的存储帐户。 为了获得更好的性能,数据库服务器上的数据磁盘将使用固态驱动器(SSD)技术,这需要高级存储帐户。 确保部署的 Azure 位置支持高级存储。
  • 可用性集。 所有数据库服务器都将添加到单个可用性集,以确保至少一个 VM 在维护期间启动并运行。

步骤 1 - 启动脚本

可以下载 此处使用的完整 PowerShell 脚本。 请按照以下步骤更改脚本,使其在你的环境中运行。

  1. 根据先决条件中已部署的现有资源组,更改以下变量的值。

     $___location              = "West US"
     $vnetName              = "WTestVNet"
     $backendSubnetName     = "BackEnd"
    
  2. 根据要用于后端部署的值更改以下变量的值。

     $backendCSName         = "IaaSStory-Backend"
     $prmStorageAccountName = "iaasstoryprmstorage"
     $avSetName             = "ASDB"
     $vmSize                = "Standard_DS3"
     $diskSize              = 127
     $vmNamePrefix          = "DB"
     $dataDiskSuffix        = "datadisk"
     $ipAddressPrefix       = "192.168.2."
     $numberOfVMs           = 2
    

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

需要为所有 VM 的数据磁盘创建一个新的云服务和存储帐户。 还需要为 VM 指定映像和本地管理员帐户。 若要创建这些资源,请完成以下步骤:

  1. 创建新的云服务。

     New-AzureService -ServiceName $backendCSName -Location $___location
    
  2. 创建新的高级存储帐户。

     New-AzureStorageAccount -StorageAccountName $prmStorageAccountName `
     -Location $___location -Type Premium_LRS
    
  3. 将上面创建的存储帐户设置为订阅的当前存储帐户。

     $subscription = Get-AzureSubscription | where {$_.IsCurrent -eq $true}  
     Set-AzureSubscription -SubscriptionName $subscription.SubscriptionName `
     -CurrentStorageAccountName $prmStorageAccountName
    
  4. 选择虚拟机的映像。

     $image = Get-AzureVMImage `
     | where{$_.ImageFamily -eq "SQL Server 2014 RTM Web on Windows Server 2012 R2"} `
     | sort PublishedDate -Descending `
     | select -ExpandProperty ImageName -First 1
    
  5. 设置本地管理员帐户凭据。

     $cred = Get-Credential -Message "Enter username and password for local admin account"
    

步骤 3 - 创建 VM

需要使用循环创建任意数量的 VM,并在循环中创建必要的 NIC 和 VM。 若要创建 NIC 和 VM,请执行以下步骤。

  1. 启动for循环,重复命令来创建一个 VM 和两个 NIC,重复次数取决于变量$numberOfVMs的值。

     for ($suffixNumber = 1; $suffixNumber -le $numberOfVMs; $suffixNumber++){
    
  2. 创建一个 VMConfig 对象,指定 VM 的映像、大小和可用性集。

     $vmName = $vmNamePrefix + $suffixNumber
     $vmConfig = New-AzureVMConfig -Name $vmName `
     	-ImageName $image `
     	-InstanceSize $vmSize `
     	-AvailabilitySetName $avSetName
    
  3. 将 VM 预配为 Windows VM。

     Add-AzureProvisioningConfig -VM $vmConfig -Windows `
     	-AdminUsername $cred.UserName `
     	-Password $cred.GetNetworkCredential().Password
    
  4. 设置默认 NIC 并为其分配静态 IP 地址。

     Set-AzureSubnet			-SubnetNames $backendSubnetName -VM $vmConfig
     Set-AzureStaticVNetIP 	-IPAddress ($ipAddressPrefix+$suffixNumber+3) -VM $vmConfig
    
  5. 为每个 VM 添加第二个 NIC。

     Add-AzureNetworkInterfaceConfig -Name ("RemoteAccessNIC"+$suffixNumber) `
     -SubnetName $backendSubnetName `
     -StaticVNetIPAddress ($ipAddressPrefix+(53+$suffixNumber)) `
     -VM $vmConfig
    
  6. 为每个 VM 创建两个数据磁盘。

     $dataDisk1Name = $vmName + "-" + $dataDiskSuffix + "-1"    
     Add-AzureDataDisk -CreateNew -VM $vmConfig `
     -DiskSizeInGB $diskSize `
     -DiskLabel $dataDisk1Name `
     -LUN 0
    
     $dataDisk2Name = $vmName + "-" + $dataDiskSuffix + "-2"   
     Add-AzureDataDisk -CreateNew -VM $vmConfig `
     -DiskSizeInGB $diskSize `
     -DiskLabel $dataDisk2Name `
     -LUN 1
    
  7. 创建每个 VM 并结束循环。

     New-AzureVM -VM $vmConfig `
     -ServiceName $backendCSName `
     -Location $___location `
     -VNetName $vnetName
     }
    

步骤 4 - 运行脚本

下载并更改脚本后,请运行该脚本,创建具有多个 NIC 的后端数据库 VM。

  1. 保存脚本并从 PowerShell 命令提示符或 PowerShell ISE 运行它。 你将看到初始输出,如下所示。

     OperationDescription    OperationId                          OperationStatus
    
     New-AzureService        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Succeeded
     New-AzureStorageAccount xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Succeeded
    
     WARNING: No deployment found in service: 'IaaSStory-Backend'.
    
  2. 填写凭据提示中所需的信息,然后单击“ 确定”。 返回以下输出。

     New-AzureVM             xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Succeeded
     New-AzureVM             xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Succeeded
    

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

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