1. Introducción
Puedes configurar un balanceador de cargas de red para distribuir el tráfico entre las instancias de backend del balanceador de cargas según las ponderaciones que informa una verificación de estado HTTP mediante el balanceo de cargas ponderado.
El balanceo de cargas ponderado requiere que configures lo siguiente:
- Debes establecer la política del balanceador de cargas de localidad (localityLbPolicy) del servicio de backend en WEIGHTED_MAGLEV.
- Debes configurar el servicio de backend con una verificación de estado de HTTP, HTTP/2 o HTTPS. Las respuestas de verificación de estado de HTTP deben contener un campo de encabezado de respuesta HTTP personalizado X-Load-Balancing-Endpoint-Weight para especificar los pesos con valores enteros del 0 al 1,000 en representación decimal para cada instancia de backend.
Si usas el mismo grupo de instancias como backend para varios balanceadores de cargas de red basados en servicios de backend mediante el balanceo de cargas ponderado, se recomienda usar una ruta de solicitud única para cada verificación de estado del servicio de backend. Si quieres obtener más información, consulta Criterios de éxito para verificaciones de estado HTTP, HTTPS y HTTP/2.
La verificación de estado HTTP debe devolver una respuesta HTTP 200 (OK) para que las verificaciones de estado se aprueben y la instancia de backend se considere en buen estado. En situaciones en las que todas las instancias de backend pasan sus verificaciones de estado y devuelven X-Load-Balancing-Endpoint-Weight con ponderación cero, el balanceador de cargas distribuye las conexiones nuevas entre los backends en buen estado y los trata con la misma ponderación. El balanceador de cargas también puede distribuir conexiones nuevas entre los backends en mal estado. Para obtener más información, consulta Distribución de tráfico.
Para ver ejemplos del balanceo de cargas ponderado, consulta Selección de backend y seguimiento de conexiones.
El balanceo de cargas ponderado se puede usar en las siguientes situaciones:
- Si algunas conexiones procesan más datos que otras, o algunas conexiones duran más que otras, la distribución de la carga del backend podría volverse desigual. Cuando se indica una ponderación menor por instancia, una instancia con carga alta puede reducir su cuota de conexiones nuevas, a la vez que mantiene las conexiones existentes.
- Si un backend está sobrecargado y la asignación de más conexiones puede interrumpir las conexiones existentes, esos backends se asignan una ponderación de cero a sí mismos. Cuando se indica una ponderación de cero, una instancia de backend deja de entregar conexiones nuevas, pero continúa entregando servicios a las existentes.
- Si un backend vacía las conexiones existentes antes del mantenimiento, se asigna ponderación cero a sí mismo. Cuando se indica una ponderación de cero, la instancia de backend deja de entregar conexiones nuevas, pero continúa entregando servicios a las existentes.
Qué aprenderás
- Cómo configurar un balanceador de cargas de red para distribuir el tráfico entre las instancias de backend del balanceador de cargas según las ponderaciones que informa una verificación de estado HTTP mediante el balanceo de cargas ponderado
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usará el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:
El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador. No es necesario que instales nada.
2. Iniciar configuración
El codelab requiere un solo proyecto.
En este instructivo, crearás un grupo de instancias con tres instancias de VM y asignarás pesos para cada instancia. Crearás una verificación de estado HTTP para informar las ponderaciones de las instancias de backend. El balanceador de cargas de red ponderado está habilitado en el servicio de backend con la política de balanceador de cargas de localidad como WEIGHTED_MAGLEV.
Antes de comenzar
- Lee la descripción general del balanceo de cargas de red externo basado en servicios de backend.
- Instala Google Cloud CLI. Para obtener una descripción general completa de la herramienta, consulta la descripción general de la CLI de gcloud. Encontrarás comandos relacionados con el balanceo de cargas en la referencia de la API y la CLI de gcloud. Si nunca ejecutaste Google Cloud CLI, primero ejecuta gcloud init para autenticarte.
- Habilita la API de procesamiento.
gcloud services enable compute.googleapis.com
Nota: No puedes usar la consola de Google Cloud para configurar la política del balanceador de cargas de localidad y asignar pesos a las instancias de VM. En su lugar, usa Google Cloud CLI.
Crea redes de VPC, subredes y reglas de firewall
Crea una red de VPC, una subred y reglas de firewall de permiso de entrada para permitir conexiones a las VMs de backend de tu balanceador de cargas.
- Crea una red y una subred de VPC. Para crear la red de VPC, ejecuta el comando
gcloud compute networks create
.:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. En este ejemplo, el rango principal de direcciones IPv4 de la subred es 10.10.0.0/24
.
Para crear la subred, ejecuta el comando gcloud compute networks subnets create
:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Reemplaza lo siguiente:
NETWORK_NAME
: Es el nombre de la red de VPC que se creará.SUBNET_NAME
: es el nombre de la subred que se creará.
- Crea una regla de firewall de permiso de entrada para permitir que los paquetes enviados a los puertos TCP de destino 80 y 443 se entreguen a las VMs de backend. En este ejemplo, la regla de firewall permite conexiones desde cualquier dirección IP de origen. La regla de firewall se aplica a las VMs con la etiqueta de red
network-lb-tag
. Para crear la regla de firewall, ejecuta el comandogcloud compute firewall-rules create
:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
Reemplaza FIREWALL_RULE_NAME
por el nombre de la regla de firewall que deseas crear.
Crea instancias de VM y asigna ponderaciones
Crea tres instancias de VM y asigna ponderaciones:
- Configura tres instancias de VM de backend para mostrar las ponderaciones en el encabezado X-Load-Balancing-Endpoint-Weight con respuestas HTTP. En este instructivo, configurarás una instancia de backend que informará una ponderación de cero, una segunda instancia de backend que informará una ponderación de 100 y una tercera instancia de backend que informará una ponderación de 900. Para crear las instancias, ejecuta el comando
gcloud compute instances create
:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
Crea un grupo de instancias
En este instructivo, proporcionas instrucciones para crear un grupo de instancias no administrado que contenga las tres instancias de VM(instance-0, instance-100, and instance-900
).
- Para crear el grupo de instancias, ejecuta el comando
gcloud compute instance-groups unmanaged create
:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
Reemplaza INSTANCE_GROUP
por el nombre del grupo de instancias que deseas crear.
Crea una verificación de estado HTTP
En este instructivo, proporcionarás instrucciones para crear una verificación de estado HTTP a fin de leer la respuesta HTTP que contiene la ponderación de la VM de backend.
- Para crear la verificación de estado HTTP, ejecuta el comando
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Reemplaza HTTP_HEALTH_CHECK_NAME
por el nombre de la verificación de estado HTTP que se creará.
Crea un servicio de backend
En el siguiente ejemplo, se proporcionan instrucciones para crear un servicio de backend externo regional configurado para usar el balanceo de cargas ponderado.
- Crea un servicio de backend con la verificación de estado HTTP y establece la política del balanceador de cargas de localidad en WEIGHTED_MAGLEV.
- Para crear el servicio de backend, ejecuta el comando
gcloud compute backend-services create
:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
- Reemplaza
BACKEND_SERVICE_NAME
por el nombre del servicio de backend que deseas crear.
- Agrega el grupo de instancias al servicio de backend.
- Para agregar el grupo de instancias, ejecuta el comando
gcloud compute backend-services add-backend
:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- Reserva una dirección IP externa regional para el balanceador de cargas.
- Para reservar una o más direcciones IP, ejecuta el comando
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Reemplaza ADDRESS_NAME
por el nombre de la dirección IP que deseas crear. Usa el comando compute addresses describe
para ver el resultado. Anota la dirección IP externa estática reservada (“IP_ADDRESS'
”).
gcloud compute addresses describe ADDRESS_NAME
- Crea una regla de reenvío con la dirección IP externa regional reservada "IP_ADDRESS". Conecta la regla de reenvío al servicio de backend.
- Para crear la regla de reenvío, ejecuta el comando
gcloud compute forwarding-rules create
:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- Reemplaza lo siguiente:
FORWARDING_RULE
: Es el nombre de la regla de reenvío que se creará.IP_ADDRESS:
es la dirección IP que se asignará a la instancia. Usa la dirección IP externa estática reservada, no el nombre de la dirección.
Verifica las ponderaciones de los backends con la API del servicio de backend
Comprueba que las ponderaciones de backends se informen de manera correcta a la verificación de estado HTTP.
- Para obtener ponderaciones de backends (junto con los estados) de un servicio de backend, ejecuta el comando
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
El resultado debería ser similar al siguiente:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth