Set up advanced load balancing

This document contains directions for setting up the advanced load balancing options that are described in the Advanced load balancing overview. This document is intended for users who have at least an intermediate understanding of Cloud Service Mesh and load balancing concepts.

Before you begin

Update Google Cloud CLI to make sure that you have the most recent version:

gcloud components update

Create a new backend service or decide which existing backend service to use for advanced load balancing.

To create a new backend service called hello-world-backend-service, use the following command:

gcloud compute backend-services create hello-world-backend-service \
    --global \
    --protocol=HTTP \
    --health-checks hello-world-health-check \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED

Create a service load balancing policy with YAML

You can define service load balancing policies in a YAML file. For example, set up a policy to enable the auto-capacity-drain feature as follows, in a file called hello-world-lb-policy:

name: projects/${project-id}/locations/global/serviceLbPolicies/hello-world-lb-policy
autoCapacityDrain:
  enable: True

After you create the YAML file, import it:

gcloud network-services service-lb-policies import hello-world-lb-policy \
   --source=hello-world-lb-policy.yaml \
   --location=global

Lastly, associate the service load balancing policy with the backend service:

gcloud compute backend-services update hello-world-backend-service \
  --service-lb-policy hello-world-lb-policy \
  --global

Alternatively, you can associate an existing service load balancing policy with a backend service when you create the backend service:

gcloud compute backend-services create hello-world-backend-service \
    --global \
    --protocol=HTTP \
    --health-checks hello-world-health-check \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED \
    --service-lb-policy hello-world-lb-policy

These instructions cover only changes to the backend service resource. Your Cloud Service Mesh deployment must also include a health check and firewall rules, and you must add backends as needed.

Configure the spray-to-region algorithm

To configure the spray-to-region algorithm, which spreads traffic to all zones in a region, create a service load balancing policy in a file called hello-world-lb-policy.yaml:

name: projects/${project-id}/locations/global/serviceLbPolicies/hello-world-lb-policy
loadBalancingAlgorithm: SPRAY_TO_REGION

Import the yaml file:

gcloud network-services service-lb-policies import hello-world-lb-policy \
   --source=hello-world-lb-policy.yaml \
   --location=global

You can also configure this algorithm with the gcloud CLI:

gcloud network-services service-lb-policies create hello-world-lb-policy \
    --load-balancing-algorithm=SPRAY_TO_REGION \
    --location=global

Configure the waterfall-by-zone algorithm

To configure the waterfall-by-zone algorithm, which sends traffic to the local zone before spilling traffic to other zones, create a service load balancing policy in a file called hello-world-lb-policy.yaml:

name: projects/${project-id}/locations/global/serviceLbPolicies/hello-world-lb-policy
loadBalancingAlgorithm: WATERFALL_BY_ZONE

Import the yaml file:

gcloud network-services service-lb-policies import hello-world-lb-policy \
   --source=hello-world-lb-policy.yaml \
   --location=global

You can also configure this algorithm with the gcloud CLI:

gcloud network-services service-lb-policies create hello-world-lb-policy \
    --load-balancing-algorithm=WATERFALL_BY_ZONE \
    --location=global

Configure preferred backends

To configure preferred backends, create a service load balancing policy as follows:

name: projects/${project-id}/locations/global/backendServices/hello-world-service
...
backends:
...
  preference: PREFERRED

The following example shows three backends, MIG1, MIG2, and MIG3:

name: ..
...
- backends
name: MIG1
preference: PREFERRED
- backends
name: MIG2
preference: DEFAULT
- backends
name: MIG3
...

You can also configure this feature with the gcloud CLI:

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      [...]
      --preference=PREFERRED \
      --global

To update the preferred backends:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
      [...]
      --preference=PREFERRED

Configure auto capacity drain

To configure Cloud Service Mesh to drain a backend automatically based on its health, create a service load balancing policy as follows:

name: projects/${project-id}/locations/global/serviceLbPolicies/hello-world-lb-policy
autoCapacityDrain:
  enable: True

You can also configure this feature with the gcloud CLI:

gcloud network-services service-lb-policies create capacity-drain-policy \
    --auto-capacity-drain \
    --location=global

Customize failover behavior

To configure Cloud Service Mesh for a specific value for the failover health threshold, include the following in a service load balancing policy, replacing VALUE with a value between 1 and 99. The default values are 50 for Cloud Service Mesh with proxyless gRPC and 70 for Cloud Service Mesh with Envoy.

projects/${project-id}/locations/global/serviceLbPolicies/hello-world-lb-policy
failoverConfig:
  failoverHealthThreshold: VALUE

To customize failover behavior with the gcloud CLI:

gcloud network-services service-lb-policies create failover-health-threshold--policy \
   --failover-health-threshold=VALUE \
   --location=global