博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序
阅读量:6941 次
发布时间:2019-06-27

本文共 6731 字,大约阅读时间需要 22 分钟。

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

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用 cloud-init 创建基本的 Node.js 应用
  • 创建虚拟机并将其附加到负载均衡器
  • 查看负载均衡器的实际运行情况
  • 从负载均衡器中添加和删除 VM

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.4 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅。

Azure 负载均衡器概述

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

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

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

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

如果遵循了前面的教程来,则已创建负载均衡器。 所有这些组件都已配置为规模集的一部分。

创建 Azure 负载均衡器

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

Azure CLI复制
az group create --name myResourceGroupLoadBalancer --location chinaeast

创建公共 IP 地址

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

Azure CLI复制
az network public-ip create \   --resource-group myResourceGroupLoadBalancer \ --name myPublicIP

创建负载均衡器

使用  创建负载均衡器。 以下示例创建名为“myLoadBalancer”的负载均衡器,并将“myPublicIP”地址分配到前端 IP 配置:

Azure CLI复制
az network lb create \   --resource-group myResourceGroupLoadBalancer \ --name myLoadBalancer \ --frontend-ip-name myFrontEndPool \ --backend-pool-name myBackEndPool \ --public-ip-address myPublicIP

创建运行状况探测器

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

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

若要创建 TCP 运行状况探测,请使用 。 以下示例创建名为“myHealthProbe”的运行状况探测:

Azure CLI复制
az network lb probe create \ --resource-group myResourceGroupLoadBalancer \ --lb-name myLoadBalancer \ --name myHealthProbe \ --protocol tcp \ --port 80

创建负载均衡器规则

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

使用  创建负载均衡器规则。 以下示例创建名为“myLoadBalancerRule”的规则、使用“myHealthProbe”运行状况探测并平衡端口 80 上的流量:

Azure CLI复制
az network lb rule create \ --resource-group myResourceGroupLoadBalancer \ --lb-name myLoadBalancer \ --name myLoadBalancerRule \ --protocol tcp \ --frontend-port 80 \ --backend-port 80 \ --frontend-ip-name myFrontEndPool \ --backend-pool-name myBackEndPool \ --probe-name myHealthProbe

配置虚拟网络

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

创建网络资源

使用  创建虚拟网络。 以下示例创建名为“myVnet”的虚拟网络和一个名为“mySubnet”的子网:

Azure CLI复制
az network vnet create \   --resource-group myResourceGroupLoadBalancer \ --name myVnet \ --subnet-name mySubnet

若要添加网络安全组,请使用 。 以下示例创建名为“myNetworkSecurityGroup”的网络安全组:

Azure CLI复制
az network nsg create \   --resource-group myResourceGroupLoadBalancer \ --name myNetworkSecurityGroup

使用  创建网络安全组规则。 以下示例创建名为“myNetworkSecurityGroupRule”的网络安全组规则:

Azure CLI复制
az network nsg rule create \ --resource-group myResourceGroupLoadBalancer \ --nsg-name myNetworkSecurityGroup \ --name myNetworkSecurityGroupRule \ --priority 1001 \ --protocol tcp \ --destination-port-range 80

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

bash复制
for i in `seq 1 3`; do    az 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

创建虚拟机

创建 cloud-init 配置

在有关的上一个教程中,你已了解如何使用 cloud-init 自动执行 VM 自定义。 可使用同一个 cloud-init 配置文件安装 NGINX 并运行简单的“Hello World”Node.js 应用。

创建名为“cloud-init.txt”的文件并粘贴以下配置。 请确保已正确复制整个 cloud-init 文件,尤其是第一行:

yaml复制
#cloud-configpackage_upgrade: truepackages: - nginx - nodejs - npm write_files: - owner: www-data:www-data - path: /etc/nginx/sites-available/default content: | 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.js content: | 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: - service nginx restart - cd "/home/azureuser/myapp" - npm init - npm install express -y - nodejs index.js

创建虚拟机

若要提高应用的高可用性,请将 VM 放置在可用性集中。 有关可用性集的详细信息,请参阅前面的教程。

使用  创建可用性集。 以下示例创建名为“myAvailabilitySet”的可用性集:

Azure CLI复制
az vm availability-set create \    --resource-group myResourceGroupLoadBalancer \   --name myAvailabilitySet

现在,可使用  创建 VM。 以下示例创建三个 VM,并生成 SSH 密钥(如果它们尚不存在):

bash复制
for i in `seq 1 3`; do    az 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-wait done

在 Azure CLI 返回提示之后,仍然存在继续运行的后台任务。 --no-wait 参数不会等待所有任务完成。 可能还需等待几分钟才能访问应用。 在每个 VM 上运行应用时,负载均衡器运行状况探测器会自动检测。 应用运行后,负载均衡器规则将开始分布流量。

测试负载均衡器

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

Azure CLI复制
az network public-ip show \   --resource-group myResourceGroupLoadBalancer \ --name myPublicIP \ --query [ipAddress] \ --output tsv

然后,可将公共 IP 地址输入 Web 浏览器中。 请记住:在负载均衡器开始向 VM 分发流量之前,VM 需要几分钟才能准备就绪。 随即显示应用,包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

运行 Node.js 应用

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

添加和删除 VM

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

从负载均衡器中删除 VM

可使用  从后端地址池中删除 VM。 以下示例从“myLoadBalancer”中删除“myVM2”的虚拟 NIC:

Azure CLI复制
az network nic ip-config address-pool remove \ --resource-group myResourceGroupLoadBalancer \ --nic-name myNic2 \ --ip-config-name ipConfig1 \ --lb-name myLoadBalancer \ --address-pool myBackEndPool

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

将 VM 添加到负载均衡器

可以在执行 VM 维护后或需要扩展容量的情况下,使用  将 VM 添加到后端地址池。 以下示例将“myVM2”的虚拟 NIC 添加到“myLoadBalancer”:

Azure CLI复制
az network nic ip-config address-pool add \ --resource-group myResourceGroupLoadBalancer \ --nic-name myNic2 \ --ip-config-name ipConfig1 \ --lb-name myLoadBalancer \ --address-pool myBackEndPool

后续步骤

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

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用 cloud-init 创建基本的 Node.js 应用
  • 创建虚拟机并将其附加到负载均衡器
  • 查看负载均衡器的实际运行情况
  • 从负载均衡器中添加和删除 VM

请转到下一教程,详细了解 Azure 虚拟网络组件。

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

转载地址:http://vzwnl.baihongyu.com/

你可能感兴趣的文章
MySql高级五--备份和恢复
查看>>
不止于小程序 APICloud推出react native纯翻译模式的UI引擎
查看>>
文件行数和代码行数统计
查看>>
如何知道一个十位数的二进制有多少个1
查看>>
Linux笔记之VMware网络连接
查看>>
Yii框架官方指南系列30——缓存:片段缓存(Fragment Caching)
查看>>
一个简单的sql加密方式
查看>>
安装与openSUSE基本使用
查看>>
简述Java:String、StringBuffer与StringBuilder 区别
查看>>
linux下一个网卡绑定多个ip
查看>>
PHP-MySQL-Apache环境搭建
查看>>
jenkins2.32 maven自动化部署配置
查看>>
Selenium2.0自动化测试中遇到的问题及解决方法
查看>>
Linux-0.11内核内存管理get_free_page()函数分析
查看>>
lambda表达式
查看>>
关于php连接mysql数据库
查看>>
flashback restore point是否能还原坏块
查看>>
Python 条件语句
查看>>
软件测试工程师工作中常用的Linux命令
查看>>
CentOS7添加需要开机启动的脚本
查看>>