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 en función de las ponderaciones informadas por 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 HTTP/HTTP2/HTTPS. Las respuestas de verificación de estado HTTP deben contener un campo de encabezado de respuesta HTTP personalizado X-Load-Balancing-Endpoint-Weight para especificar los pesos con valores de números enteros de 0 a 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 con balanceo de cargas ponderado, se recomienda usar una ruta de solicitud única para cada verificación de estado del servicio de backend. Si deseas obtener más información, consulta Criterios de éxito para las verificaciones de estado HTTP, HTTPS y HTTP/2.
La verificación de estado HTTP debe mostrar 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 muestran X-Load-Balancing-Endpoint-Weight con un peso de cero, el balanceador de cargas distribuye conexiones nuevas entre los backends en buen estado y las trata con el mismo peso. El balanceador de cargas también puede distribuir conexiones nuevas entre backends en mal estado. Para obtener más información, consulta Distribución de tráfico.
Para ver ejemplos de balanceo de cargas ponderado, consulta Selección de backend y seguimiento de conexión.
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 puede ser desigual. Cuando se indica un peso más bajo por instancia, una instancia con carga alta puede reducir su cuota de conexiones nuevas, a la vez que mantiene el servicio de las conexiones existentes.
- Si un backend está sobrecargado y la asignación de más conexiones puede interrumpir las conexiones existentes, dichos backends se asignan cero pesos a sí mismo. Cuando se indica el peso cero, una instancia de backend deja de dar servicio a las conexiones nuevas, pero continúa brindándole el servicio a las existentes.
- Si un backend vaciando las conexiones existentes antes del mantenimiento, se asigna cero peso. Cuando indica el peso cero, la instancia de backend deja de dar servicio a las conexiones nuevas, pero continúa brindándole el servicio 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 informadas por una verificación de estado HTTP con 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 te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como
PROJECT_ID
). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto. - Para tu información, 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 te facture 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 ponderaciones a cada una. Creas una verificación de estado HTTP para informar sobre los pesos 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 gcloud CLI. Puedes encontrar comandos relacionados con el balanceo de cargas en la referencia de la API y la CLI de gcloud. Si no ejecutaste Google Cloud CLI anteriormente, primero ejecuta gcloud init para realizar la autenticación.
- 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.
Crear redes de VPC, subredes y reglas de firewall
Crea una red de VPC, una subred y reglas de firewall de entrada que permitan las conexiones a las VMs de backend de tu balanceador de cargas.
- Crear una red de VPC y una subred a. 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á.
- Crear una regla de firewall de permiso de entrada para permitir que los paquetes enviados a los puertos TCP 80 y 443 de destino 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:
- Configurar tres instancias de VM de backend para mostrar los pesos en el encabezado X-Load-Balancing-Endpoint-Weight con las respuestas HTTP En este instructivo, configurarás una instancia de backend con el objetivo de informar un peso de cero, una segunda instancia de backend para que informe un peso de 100 y una tercera instancia de backend para informar un peso 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 de HTTP
En este instructivo, proporcionas instrucciones para crear una verificación de estado HTTP y leer la respuesta HTTP que contiene el peso 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 deseas 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
: 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 los pesos del backend 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 las ponderaciones de backend (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 como el 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