Share via


Equilibrio de carga entre varios sitios web

Este ejemplo de script crea una red virtual con dos máquinas virtuales que son miembros de un conjunto de disponibilidad. Un equilibrador de carga dirige el tráfico de dos direcciones IP independientes a las dos máquinas virtuales. Después de ejecutar el script, podría implementar software de servidor web en las máquinas virtuales y hospedar varios sitios web, cada uno con su propia dirección IP.

Para ejecutar este ejemplo, instale la versión más reciente de la CLI de Azure. Para empezar, ejecute az login para crear una conexión con Azure.

Los ejemplos de la CLI de Azure están escritos para el shell bash. Para ejecutar este ejemplo en Windows PowerShell o en el símbolo del sistema, es posible que necesite cambiar algunos elementos del script.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Script de ejemplo

#!/bin/bash
# Passed validation in Cloud Shell on 3/3/2022

# <FullScript>
# Load balance multiple websites

# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="East US"
resourceGroup="msdocs-load-balancer-rg-$randomIdentifier"
tag="load-balance-multiple-web-sites-vm"
availabilitySet="msdocs-availablity-set-lb-$randomIdentifier"
vNet="msdocs-vnet-lb-$randomIdentifier"
subnet="msdocs-subnet-lb-$randomIdentifier"
loadBalancerPublicIp="msdocs-public-ip-lb-$randomIdentifier"
loadBalancerFrontEndConfig1="msdocs-contoso-lb-$randomIdentifier"
loadBalancerFrontEndConfig2="msdocs-fabrikam-lb-$randomIdentifier"
loadBalancer="msdocs-load-balancer-$randomIdentifier"
frontEndIp="msdocs-front-end-ip-lb-$randomIdentifier"
frontEndIpConfig1="msdocs-front-end-ip-config-contoso-lb-$randomIdentifier"
frontEndIpConfig2="msdocs-front-end-ip-config-fabrikam-lb-$randomIdentifier"
backEndPool="msdocs-back-end-pool-lb-$randomIdentifier"
backEndAddressPool1="msdocs-back-end-address-pool-contoso-lb-$randomIdentifier"
backEndAddressPool2="msdocs-back-end-address-pool-fabrikam-lb-$randomIdentifier"
probe80="msdocs-port80-health-probe-lb-$randomIdentifier"
lbRuleConfig1="msdocs-contoso-load-balancer-rule-$randomIdentifier"
lbRuleConfig2="msdocs-fabrikam-load-balancer-rule-$randomIdentifier"
publicIpVm1="msdocs-public-ip-vm1-lb-$randomIdentifier"
nicVm1="msdocs-nic-vm1-$randomIdentifier"
ipConfig1="msdocs-ipconfig-config1-lb-$randomIdentifier"
ipConfig2="msdocs-ipconfig-config2-lb-$randomIdentifier"
vm1="msdocs-vm1-lb-$randomIdentifier"
publicIpVm2="msdocs-public-ip-vm2-lb-$randomIdentifier"
ipSku="Standard"
nicVm2="msdocs-nic-vm2-lb-$randomIdentifier"
ipConfig1="msdocs-ipconfig-config1-lb-$randomIdentifier"
ipConfig2="msdocs-ipconfig-config2-lb-$randomIdentifier"
vm2="msdocs-vm2-lb-$randomIdentifier"
image="Ubuntu2204"
login="azureuser"

# Create a resource group
echo "Creating $resourceGroup in "$location"..."
az group create --name $resourceGroup --location "$location" --tags $tag

# Create an availability set for the two VMs that host both websites.
echo "Creating $availabilitySet"
az vm availability-set create --resource-group $resourceGroup --location "$location" --name $availabilitySet --platform-fault-domain-count 2 --platform-update-domain-count 2

# Create a virtual network and a subnet.
echo "Creating $vNet and $subnet"
az network vnet create --resource-group $resourceGroup --name $vNet --address-prefix 10.0.0.0/16 --location "$location" --subnet-name $subnet --subnet-prefix 10.0.0.0/24

# Create three public IP addresses; one for the load balancer and two for the front-end IP configurations.
echo "Creating $loadBalancerPublicIp"
az network public-ip create --resource-group $resourceGroup --name $loadBalancerPublicIp --allocation-method Dynamic

echo "Creating $loadBalancerFrontEndConfig1"  
az network public-ip create --resource-group $resourceGroup --name $loadBalancerFrontEndConfig1 --allocation-method Dynamic

echo "Creating $loadBalancerFrontEndConfig2"
az network public-ip create --resource-group $resourceGroup --name $loadBalancerFrontEndConfig2 --allocation-method Dynamic

# Create an Azure Load Balancer.
echo "Creating $loadBalancer with $frontEndIP and $backEndPool"
az network lb create --resource-group $resourceGroup --location "$location" --name $loadBalancer --frontend-ip-name $frontEndIp --backend-pool-name $backEndPool --public-ip-address $loadBalancerPublicIp

# Create two front-end IP configurations for both web sites.
echo "Creating $frontEndIpConfig1 for $loadBalancerFrontEndConfig1"
az network lb frontend-ip create --resource-group $resourceGroup --lb-name $loadBalancer --public-ip-address $loadBalancerFrontEndConfig1 --name $frontEndIpConfig1

echo "Creating $frontEndIpConfig2 for $loadBalancerFrontEndConfig2"  
az network lb frontend-ip create --resource-group $resourceGroup --lb-name $loadBalancer --public-ip-address $loadBalancerFrontEndConfig2 --name $frontEndIpConfig2

# Create the back-end address pools.
echo "Creating $backEndAddressPool1"
az network lb address-pool create --resource-group $resourceGroup --lb-name $loadBalancer --name $backEndAddressPool1

echo "Creating $backEndAddressPool2"
az network lb address-pool create --resource-group $resourceGroup --lb-name $loadBalancer --name $backEndAddressPool2

# Create a probe on port 80.
echo "Creating $probe80 in $loadBalancer"
az network lb probe create --resource-group $resourceGroup --lb-name $loadBalancer --name $probe80 --protocol Http --port 80 --path /

# Create the load balancing rules forport 80.
echo "Creating $lbRuleConfig1 for $loadBalancer"
az network lb rule create --resource-group $resourceGroup --lb-name $loadBalancer --name $lbRuleConfig1 --protocol Tcp --probe-name $probe80 --frontend-port 5000 --backend-port 5000 --frontend-ip-name $frontEndIpConfig1 --backend-pool-name $backEndAddressPool1

echo "Creating $lbRuleConfig2 for $loadBalancer"
az network lb rule create --resource-group $resourceGroup --lb-name $loadBalancer --name $lbRuleConfig2 --protocol Tcp --probe-name $probe80 --frontend-port 5000 --backend-port 5000 --frontend-ip-name $frontEndIpConfig2 --backend-pool-name $backEndAddressPool2

# ############## VM1 ###############

# Create an Public IP for the first VM.
echo "Creating $publicIpVm1"
az network public-ip create --resource-group $resourceGroup --name $publicIpVm1 --allocation-method Dynamic

# Create a network interface for VM1.
echo "Creating $nicVm1 in $vNet and $subnet"
az network nic create --resource-group $resourceGroup --vnet-name $vNet --subnet $subnet --name $nicVm1 --public-ip-address $publicIpVm1

# Create IP configurations for Contoso and Fabrikam.
echo "Creating $ipConfig1 for $nicVm1"
az network nic ip-config create --resource-group $resourceGroup --name $ipConfig1 --nic-name $nicVm1 --lb-name $loadBalancer --lb-address-pools $backEndAddressPool1

echo "Creating $ipConfig2 for $nicVm1"
az network nic ip-config create --resource-group $resourceGroup --name $ipConfig2 --nic-name $nicVm1 --lb-name $loadBalancer --lb-address-pools $backEndAddressPool2

# Create Vm1.
echo "Creating $vm1"
az vm create --resource-group $resourceGroup --name $vm1 --nics $nicVm1 --image $image --availability-set $availabilitySet --public-ip-sku $ipSku --admin-username $login --generate-ssh-keys

############### VM2 ###############

# Create an Public IP for the second VM.
echo "Creating $publicIpVm2"
az network public-ip create --resource-group $resourceGroup --name $publicIpVm2 --allocation-method Dynamic

# Create a network interface for VM2.
echo "Creating $nicVm2 in $vNet and $subnet"
az network nic create --resource-group $resourceGroup --vnet-name $vNet --subnet $subnet --name $nicVm2 --public-ip-address $publicIpVm2

# Create IP-Configs for Contoso and Fabrikam.
echo "Creating $ipConfig1 for $nicVm2"
az network nic ip-config create --resource-group $resourceGroup --name $ipConfig1 --nic-name $nicVm2 --lb-name $loadBalancer --lb-address-pools $backEndAddressPool1

echo "Creating $ipConfig2 for $nicVm2"
az network nic ip-config create --resource-group $resourceGroup --name $ipConfig2 --nic-name $nicVm2 --lb-name $loadBalancer --lb-address-pools $backEndAddressPool2

# Create Vm2.
echo "Creating $vm2"
az vm create --resource-group $resourceGroup --name $vm2 --nics $nicVm2 --image Ubuntu2204 --availability-set $availabilitySet --public-ip-sku $ipSku --admin-username $login --generate-ssh-keys

# List the virtual machines
az vm list --resource-group $resourceGroup
# </FullScript>

# echo "Deleting all resources"
# az group delete --name $resourceGroup -y

Limpieza de la implementación

Ejecute el siguiente comando para quitar el grupo de recursos, la máquina virtual y todos los recursos relacionados.

az group delete --name myResourceGroup --yes

Explicación del script

Este script usa los siguientes comandos para crear un grupo de recursos, una red virtual, un equilibrador de carga y todos los recursos relacionados. Cada comando de la tabla crea un vínculo a documentación específica del comando.

Get-Help Notas
az group create Crea un grupo de recursos en el que se almacenan todos los recursos.
az network vnet create Crea una red virtual y una subred de Azure.
az network public-ip create Crea una dirección IP pública con una dirección IP estática y un nombre DNS asociado.
az network lb create Crea una instancia de Azure Load Balancer.
az network lb probe create Crea un sondeo de equilibrador de carga. Un sondeo de equilibrador de carga se usa para supervisar cada máquina virtual del conjunto de equilibrador de carga. Si alguna máquina virtual deja de estar accesible, el tráfico no se enruta a la máquina virtual.
az network lb rule create Crea una regla de equilibrador de carga. En este ejemplo, se crea una regla para el puerto 80. Según va llegando el tráfico HTTP al equilibrador de carga, se enruta al puerto 80 de una de las máquinas virtuales del conjunto de equilibrador de carga.
az network lb frontend-ip create Crea una dirección IP de front-end para el equilibrador de carga.
az network lb address-pool create Crea un grupo de direcciones de back-end.
az network nic create Crea una tarjeta de red virtual y la conecta con la red virtual y la subred.
az vm availability-set create Crea un conjunto de disponibilidad. Los conjuntos de disponibilidad garantizan la disponibilidad de las aplicaciones al repartir las máquinas virtuales entre los recursos físicos, de forma que si se produce un error, el conjunto no se verá afectado en su totalidad.
az network nic ip-config create Crea una configuración IP. Debe tener la característica de Microsoft.Network/AllowMultipleIpConfigurationsPerNic habilitada en su suscripción. Solo se puede designar una configuración como configuración IP primaria por adaptador de red, mediante la marca --make-primary.
az vm create Crea la máquina virtual y la conecta con la tarjeta de red, la red virtual, la subred y el NSG. Este comando también especifica la imagen de máquina virtual que se usará, y las credenciales administrativas.
az group delete Elimina un grupo de recursos, incluidos todos los recursos anidados.

Pasos siguientes

Para más información sobre la CLI de Azure, consulte la documentación de la CLI de Azure.

En la documentación de la información general de redes de Azure puede encontrar ejemplos adicionales de script de la CLI de redes.