负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性。 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性。 你将学习如何执行以下操作:

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用自定义脚本扩展创建基本的 IIS 站点
  • 创建虚拟机并将其附加到负载均衡器
  • 查看负载均衡器的实际运行情况
  • 在负载均衡器中添加和删除 VM

本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行 Get-Module -ListAvailable AzureRM 即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块

Azure 负载均衡器概述

Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,仅将流量分发给正常运行的 VM。

定义包含一个或多个公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通过 Internet 访问负载均衡器和应用程序。

虚拟机使用其虚拟网络接口卡 (NIC) 连接到负载均衡器。 若要向 VM 分发流量,后端地址池需包含连接到负载均衡器的虚拟 NIC 的 IP 地址。

若要控制流量流,需为映射到 VM 的特定端口和协议定义负载均衡器规则。

创建 Azure 负载均衡器

本部分详细介绍了如何创建和配置负载均衡器的每个组件。 在创建负载均衡器之前,需使用 New-AzureRmResourceGroup 创建资源组。 以下示例在 ChinaEast 位置创建名为 myResourceGroupLoadBalancer 的资源组:

PowerShell复制
New-AzureRmResourceGroup `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast

创建公共 IP 地址

若要通过 Internet 访问应用,负载均衡器需要具有一个公共 IP 地址。 使用 New-AzureRmPublicIpAddress 创建一个公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 资源组中创建名为 myPublicIP 的公共 IP 地址:

PowerShell复制
$publicIP = New-AzureRmPublicIpAddress `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-AllocationMethod Static `
-Name myPublicIP

创建负载均衡器

使用 New-AzureRmLoadBalancerFrontendIpConfig 创建一个前端 IP 地址。 以下示例创建名为 myFrontEndPool 的前端 IP 地址:

PowerShell复制
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig `
-Name myFrontEndPool `
-PublicIpAddress $publicIP

使用 New-AzureRmLoadBalancerBackendAddressPoolConfig 创建一个后端地址池。 以下示例创建名为 myBackEndPool 的后端地址池:

PowerShell复制
$backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name myBackEndPool

现在,使用 New-AzureRmLoadBalancer 创建负载均衡器。 以下示例使用 myPublicIP 地址创建名为 myLoadBalancer 的负载均衡器:

PowerShell复制
$lb = New-AzureRmLoadBalancer `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myLoadBalancer `
-Location ChinaEast `
-FrontendIpConfiguration $frontendIP `
-BackendAddressPool $backendPool

创建运行状况探测器

若要允许负载均衡器监视应用的状态,可以使用运行状况探测器。 运行状况探测器基于其对运行状况检查的响应,从负载均衡器中动态添加或删除 VM。 默认情况下,在 15 秒时间间隔内发生两次连续的故障后,会从负载均衡器分布中删除 VM。 可以为应用创建基于协议或特定运行状况检查页面的运行状况探测器。

以下示例创建一个 TCP 探测器。 还可创建自定义 HTTP 探测器,以便执行更精细的运行状况检查。 使用自定义 HTTP 探测器时,必须创建运行状况检查页,例如 healthcheck.aspx。 探测器必须为负载均衡器返回 HTTP 200 OK 响应,以保持主机处于旋转状态。

若要创建 TCP 运行状况探测器,请使用 Add-AzureRmLoadBalancerProbeConfig。 以下示例创建名为 myHealthProbe 的运行状况探测器,用于监视每个 VM:

PowerShell复制
Add-AzureRmLoadBalancerProbeConfig `
-Name myHealthProbe `
-LoadBalancer $lb `
-Protocol tcp `
-Port 80 `
-IntervalInSeconds 15 `
-ProbeCount 2

使用 Set-AzureRmLoadBalancer 更新负载均衡器:

PowerShell复制
Set-AzureRmLoadBalancer -LoadBalancer $lb

创建负载均衡器规则

负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的 VM 接收流量,还需定义要使用的运行状况探测器。

使用 Add-AzureRmLoadBalancerRuleConfig 创建一个负载均衡器规则。 以下示例创建名为 myLoadBalancerRule 的负载均衡器规则并均衡端口 80 上的流量:

PowerShell复制
$probe = Get-AzureRmLoadBalancerProbeConfig -LoadBalancer $lb -Name myHealthProbe

Add-AzureRmLoadBalancerRuleConfig `
-Name myLoadBalancerRule `
-LoadBalancer $lb `
-FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
-BackendAddressPool $lb.BackendAddressPools[0] `
-Protocol Tcp `
-FrontendPort 80 `
-BackendPort 80 `
-Probe $probe

使用 Set-AzureRmLoadBalancer 更新负载均衡器:

PowerShell复制
Set-AzureRmLoadBalancer -LoadBalancer $lb

配置虚拟网络

需要先创建提供支持的虚拟网络资源,然后才能部署某些 VM 并测试均衡器。 有关虚拟网络的详细信息,请参阅管理 Azure 虚拟网络教程。

创建网络资源

使用 New-AzureRmVirtualNetwork 创建虚拟网络。 以下示例创建包含 mySubnet 的名为 myVnet 的虚拟网络:

PowerShell复制
# Create subnet config
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24 # Create the virtual network
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-Name myVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig

使用 New-AzureRmNetworkSecurityRuleConfig 创建网络安全组规则,然后使用 New-AzureRmNetworkSecurityGroup 创建网络安全组。 使用 Set-AzureRmVirtualNetworkSubnetConfig 将网络安全组添加到子网,然后使用 Set-AzureRmVirtualNetwork 更新虚拟网络。

以下示例创建一个名为 myNetworkSecurityGroup 的网络安全组规则,并将其应用于 mySubnet:

PowerShell复制
# Create security rule config
$nsgRule = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRule `
-Protocol Tcp `
-Direction Inbound `
-Priority 1001 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow # Create the network security group
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRule # Apply the network security group to a subnet
Set-AzureRmVirtualNetworkSubnetConfig `
-VirtualNetwork $vnet `
-Name mySubnet `
-NetworkSecurityGroup $nsg `
-AddressPrefix 192.168.1.0/24 # Update the virtual network
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet

使用 New-AzureRmNetworkInterface 创建虚拟 NIC。 以下示例创建三个虚拟 NIC。 (在以下步骤中针对为应用创建的每个 VM 各使用一个虚拟 NIC)。 可随时创建其他虚拟 NIC 和 VM,并将其添加到负载均衡器:

PowerShell复制
for ($i=1; $i -le 3; $i++)
{
New-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic$i `
-Location ChinaEast `
-Subnet $vnet.Subnets[0] `
-LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

创建虚拟机

若要提高应用的高可用性,请将 VM 放置在可用性集中。

使用 New-AzureRmAvailabilitySet 创建一个可用性集。 以下示例创建名为 myAvailabilitySet 的可用性集:

PowerShell复制
$availabilitySet = New-AzureRmAvailabilitySet `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myAvailabilitySet `
-Location ChinaEast `
-Managed `
-PlatformFaultDomainCount 3 `
-PlatformUpdateDomainCount 2

使用 New-AzureRmNetworkInterface 设置 VM 的管理员用户名和密码:

PowerShell复制
$cred = Get-Credential

现在,可使用 New-AzureRmVM 创建 VM。 下例创建三个 VM:

PowerShell复制
for ($i=1; $i -le 3; $i++)
{
$vm = New-AzureRmVMConfig `
-VMName myVM$i `
-VMSize Standard_D1 `
-AvailabilitySetId $availabilitySet.Id
$vm = Set-AzureRmVMOperatingSystem `
-VM $vm `
-Windows `
-ComputerName myVM$i `
-Credential $cred `
-ProvisionVMAgent `
-EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage `
-VM $vm `
-PublisherName MicrosoftWindowsServer `
-Offer WindowsServer `
-Skus 2016-Datacenter `
-Version latest
$vm = Set-AzureRmVMOSDisk `
-VM $vm `
-Name myOsDisk$i `
-DiskSizeInGB 128 `
-CreateOption FromImage `
-Caching ReadWrite
$nic = Get-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic$i
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-VM $vm
}

创建和配置所有三个 VM 需要几分钟时间。

使用自定义脚本扩展安装 IIS

在有关如何自定义 Windows 虚拟机的上一教程中,你已了解如何使用 Windows 的自定义脚本扩展自动执行 VM 自定义。 可使用相同的方法在 VM 上安装和配置 IIS。

使用 Set-AzureRmVMExtension 安装自定义脚本扩展。 该扩展运行 powershell Add-WindowsFeature Web-Server 来安装 IIS Web 服务器,然后更新 Default.htm 页以显示 VM 的主机名:

PowerShell复制
for ($i=1; $i -le 3; $i++)
{
Set-AzureRmVMExtension `
-ResourceGroupName myResourceGroupLoadBalancer `
-ExtensionName IIS `
-VMName myVM$i `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.4 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
-Location ChinaEast
}

测试负载均衡器

使用 Get-AzureRmPublicIPAddress 获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:

PowerShell复制
Get-AzureRmPublicIPAddress `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myPublicIP | select IpAddress

然后,可将公共 IP 地址输入 Web 浏览器中。 网站随即显示,其中包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

若要查看负载均衡器如何在运行应用的所有三个 VM 之间分发流量,可强制刷新 web 浏览器。

添加和删除 VM

建议对运行应用的 VM 执行维护,例如安装 OS 更新。 若要应对应用增加的流量,建议添加更多 VM。 本部分演示了如何在负载均衡器中删除或添加 VM。

从负载均衡器中删除 VM

使用 Get-AzureRmNetworkInterface 获取网络接口卡,然后将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 $null。 最后,更新虚拟 NIC:

PowerShell复制
$nic = Get-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic2
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzureRmNetworkInterface -NetworkInterface $nic

若要查看负载均衡器如何在运行应用的其余两个 VM 之间分发流量,可强制刷新 web 浏览器。 现在可以对 VM 执行维护,例如安装 OS 更新或执行 VM 重新启动。

将 VM 添加到负载均衡器

执行 VM 维护后,或者如果需要扩展容量,请通过 Get-AzureRMLoadBalancer 将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 BackendAddressPool:

获取负载均衡器:

PowerShell复制
$lb = Get-AzureRMLoadBalancer `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myLoadBalancer
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzureRmNetworkInterface -NetworkInterface $nic

后续步骤

在本教程中,你已创建了一个负载均衡器并已将 VM 附加到它。 你已了解如何:

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用自定义脚本扩展创建基本的 IIS 站点
  • 创建虚拟机并将其附加到负载均衡器
  • 查看负载均衡器的实际运行情况
  • 在负载均衡器中添加和删除 VM

请转到下一教程,了解如何管理 VM 网络。

管理 VM 和虚拟网络

立即访问http://market.azure.cn

如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序的更多相关文章

  1. 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  2. 如何在 Azure 中标记 Windows 虚拟机

    本文介绍在 Azure 中通过 Azure 资源管理器标记 Windows 虚拟机的不同方式.标记是用户定义的键/值对,可直接放置在资源或资源组中.针对每个资源和资源组,Azure 当前支持最多 15 ...

  3. 如何在 Azure 中自定义 Windows 虚拟机

    若要以快速一致的方式配置虚拟机 (VM),通常需要某种形式的自动化. 自定义 Windows VM 的一种常用方法是使用适用于 Windows 的自定义脚本扩展. 本教程介绍如何执行下列操作: 使用自 ...

  4. 在 Azure 中管理 Windows 虚拟机的可用性

    了解如何设置和管理多个虚拟机,以确保 Azure 中 Windows 应用程序的高可用性. 也可以管理 Linux 虚拟机的可用性. Note Azure 具有用于创建和处理资源的两个不同的部署模型: ...

  5. Azure 中的 Windows 虚拟机概述

    Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...

  6. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器

    若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...

  7. 排查在 Azure 中新建 Windows VM 时遇到的部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  8. 如何在 Azure 中的经典 Windows 虚拟机上设置终结点

    在 Azure 中使用经典部署模型创建的所有 Windows 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中的其他虚拟机自动通信. 但是,Internet 或其他虚拟网络中的计算机需要终结点将入 ...

  9. 使用windows远程桌面连接Windows Azure中的Ubuntu虚拟机

    1.创建ubuntu虚拟机,这里同样不再赘述,创建过程和创建Windows虚拟机基本一样,只是登录可以选择密钥注入或者用户名密码(为了方便我选择了用户名密码认证),创建完成后,查看虚拟机详情中的端口信 ...

随机推荐

  1. apache 服务器概述--安装(一)

    一.安装httpd,elinks浏览器 [root@ ~]# yum install elinks httpd -y [root@ ~]# elinks www.baidu.com 二.配置文件 # ...

  2. -bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_COLLATE:

    前几天登录服务器发现出现了这些个警告,一直没时间去处理他,今天难得有空,处理一下并记录下来,希望可以帮助到有需要的朋友. 警告信息如下: Last :: from 10.0.0.1 -bash: wa ...

  3. 数据结构与算法(周鹏-未出版)-第六章 树-6.5 Huffman 树

    6.5 Huffman 树 Huffman 树又称最优树,可以用来构造最优编码,用于信息传输.数据压缩等方面,是一类有着广泛应用的二叉树. 6.5.1 二叉编码树 在计算机系统中,符号数据在处理之前首 ...

  4. LVS持久化与超时时间问题分析

    前言 在上一篇文章<搭建DNS+LVS(keepAlived)+OpenResty服务器(Docker环境)>中,我搭建了dns+lvs+openresty+web集群:先来回顾一下架构图 ...

  5. 【转载】Java8 HashMap之tableSizeFor

    Java8对许多内置的容器进行了优化与拓展,其中对HashMap的改变尤其大.之后将进行总结. 最近在看HashMap的源码时,发现了里面好多很不错的算法,相比Java7从性能上提高了许多.其中tab ...

  6. NPM的正确使用方式

    registry配置 npm registry原意为记录.登记.登记处的意思,这里指的也就是node包存放的服务器地址. 查看registry -> npm config get registr ...

  7. Docker基础-端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...

  8. Redis-其他命令

    1.排序 SORT :  SORT  sourcekey [BY pattern] [LIMIT offset count] [GET  pattern [GET  pattern  ...]] [A ...

  9. windows下nodejs监听80端口

    windows下nodejs监听80端口时提示端口被占用报错,解决方案如下: 1.cmd---netstat -ano查看是什么程序占用了80端口: 2.控制面板--管理工具--服务--停止 SQL ...

  10. Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)

    作者简介 Dong Lea任职于纽约州立大学奥斯威戈分校(State University of New York at Oswego),他发布了第一个广泛使用的java collections框架实 ...