Load Balancing Jaringan Berbobot Per-Instance

Load Balancing Jaringan Berbobot Per-Instance

Tentang codelab ini

subjectTerakhir diperbarui Mar 18, 2025
account_circleDitulis oleh Sahana P, Babi Seal

1. Pengantar

Anda dapat mengonfigurasi load balancer jaringan untuk mendistribusikan traffic di seluruh instance backend load balancer berdasarkan bobot yang dilaporkan oleh pemeriksaan kesehatan HTTP menggunakan load balancing berbobot.

Load balancing berbobot mengharuskan Anda mengonfigurasi kedua hal berikut:

  • Anda harus menyetel kebijakan load balancer lokalitas (localityLbPolicy) layanan backend ke WEIGHTED_MAGLEV.
  • Anda harus mengonfigurasi layanan backend dengan health check HTTP/HTTP2/HTTPS. Respons pemeriksaan kondisi HTTP harus berisi kolom header respons HTTP kustom X-Load-Balancing-Endpoint-Weight untuk menentukan bobot dengan nilai bilangan bulat dari 0 hingga 1000 dalam representasi desimal untuk setiap instance backend.

Jika Anda menggunakan grup instance yang sama sebagai backend untuk beberapa load balancer jaringan berbasis layanan backend menggunakan load balancing berbobot, sebaiknya gunakan jalur permintaan unik untuk setiap health check layanan backend. Untuk mengetahui informasi selengkapnya, lihat Kriteria keberhasilan untuk pemeriksaan kesehatan HTTP, HTTPS, dan HTTP/2.

Health check HTTP harus menampilkan respons HTTP 200 (OK) agar health check lulus dan instance backend dianggap responsif. Dalam situasi ketika semua instance backend lulus health check dan menampilkan X-Load-Balancing-Endpoint-Weight dengan bobot nol, load balancer akan mendistribusikan koneksi baru di antara backend yang responsif, dengan bobot yang sama. Load balancer juga dapat mendistribusikan koneksi baru di antara backend yang tidak responsif. Untuk mengetahui informasi selengkapnya, lihat Distribusi traffic.

Untuk contoh load balancing berbobot, lihat Pemilihan backend dan pelacakan koneksi.

Load balancing berbobot dapat digunakan dalam skenario berikut:

  • Jika beberapa koneksi memproses lebih banyak data daripada yang lain, atau beberapa koneksi aktif lebih lama daripada yang lain, distribusi beban backend mungkin menjadi tidak merata. Dengan menandakan bobot per instance yang lebih rendah, instance dengan beban tinggi dapat mengurangi bagian koneksi barunya, sambil terus melayani koneksi yang ada.
  • Jika backend kelebihan beban dan pemberian lebih banyak koneksi dapat mengganggu koneksi yang ada, backend tersebut akan menetapkan bobot nol untuk dirinya sendiri. Dengan menandakan bobot nol, instance backend berhenti melayani koneksi baru, tetapi terus melayani koneksi yang ada.
  • Jika backend menghentikan koneksi yang ada sebelum pemeliharaan, backend akan menetapkan bobot nol untuk dirinya sendiri. Dengan menandakan bobot nol, instance backend berhenti melayani koneksi baru, tetapi terus melayani koneksi yang ada.

Yang akan Anda pelajari

  • Cara mengonfigurasi load balancer jaringan untuk mendistribusikan traffic di seluruh instance backend load balancer berdasarkan bobot yang dilaporkan oleh pemeriksaan kesehatan HTTP menggunakan load balancing berbobot.

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (biasanya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

2. Mulai Konfigurasi

Codelab memerlukan satu project.

Dalam tutorial ini, Anda akan membuat grup instance dengan tiga instance VM dan menetapkan bobot untuk setiap instance. Anda membuat health check HTTP untuk melaporkan bobot instance backend. Load balancer jaringan berbobot diaktifkan pada layanan backend dengan kebijakan load balancer lokalitas sebagai WEIGHTED_MAGLEV.

Sebelum memulai

gcloud services enable compute.googleapis.com

Catatan: Anda tidak dapat menggunakan konsol Google Cloud untuk mengonfigurasi kebijakan load balancer lokalitas dan menetapkan bobot ke instance VM. Sebagai gantinya, gunakan Google Cloud CLI.

Membuat jaringan VPC, subnet, dan aturan firewall

Buat jaringan VPC, subnet, dan aturan firewall yang mengizinkan traffic masuk untuk mengizinkan koneksi ke VM backend load balancer Anda.

  1. Buat jaringan dan subnet VPC. a. Untuk membuat jaringan VPC, jalankan perintah gcloud compute networks create :
gcloud compute networks create NETWORK_NAME --subnet-mode custom

b. Dalam contoh ini, rentang alamat IPv4 utama subnet adalah 10.10.0.0/24.

Untuk membuat subnet, jalankan perintah gcloud compute networks subnets create :

gcloud compute networks subnets create SUBNET_NAME \
  --network=NETWORK_NAME \
  --range=10.10.0.0/24 \
  --region=us-central1

Ganti kode berikut:

  • NETWORK_NAME: nama jaringan VPC yang akan dibuat.
  • SUBNET_NAME: nama subnetwork yang akan dibuat.
  1. Buat aturan firewall izin masuk untuk mengizinkan paket yang dikirim ke port TCP tujuan 80 dan 443 dikirimkan ke VM backend. Dalam contoh ini, aturan firewall mengizinkan koneksi dari alamat IP sumber mana pun. Aturan firewall berlaku untuk VM dengan tag jaringan network-lb-tag. Untuk membuat aturan firewall, jalankan perintah gcloud 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

Ganti FIREWALL_RULE_NAME dengan nama aturan firewall yang akan dibuat.

Membuat instance VM dan menetapkan bobot

Buat tiga instance VM dan tetapkan bobot:

  1. Konfigurasi tiga instance VM backend untuk menampilkan bobot di header X-Load-Balancing-Endpoint-Weight dengan respons HTTP. Untuk tutorial ini, Anda akan mengonfigurasi satu instance backend untuk melaporkan bobot nol, instance backend kedua untuk melaporkan bobot 100, dan instance backend ketiga untuk melaporkan bobot 900. Untuk membuat instance, jalankan perintah 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'

Membuat grup instance

Dalam tutorial ini, Anda akan memberikan petunjuk untuk membuat grup instance tidak terkelola yang berisi ketiga instance VM(instance-0, instance-100, and instance-900).

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

Ganti INSTANCE_GROUP dengan nama grup instance yang akan dibuat.

Membuat health check HTTP

Dalam tutorial ini, Anda akan memberikan petunjuk untuk membuat health check HTTP guna membaca respons HTTP yang berisi bobot VM backend."

gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

Ganti HTTP_HEALTH_CHECK_NAME dengan nama health check HTTP yang akan dibuat.

Buat layanan backend

Contoh berikut memberikan petunjuk untuk membuat layanan backend eksternal regional yang dikonfigurasi untuk menggunakan load balancing berbobot.

  1. Buat layanan backend dengan health check HTTP dan tetapkan kebijakan load balancer lokalitas ke WEIGHTED_MAGLEV.
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
  • Ganti BACKEND_SERVICE_NAME dengan nama layanan backend yang akan dibuat.
  1. Tambahkan grup instance ke layanan backend.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
  --instance-group=INSTANCE_GROUP \
  --instance-group-zone=us-central1-a \
  --region=us-central1
  1. Cadangkan alamat IP eksternal regional untuk load balancer.
gcloud compute addresses create ADDRESS_NAME \
 --region us-central1

Ganti ADDRESS_NAME dengan nama alamat IP yang akan dibuat. Gunakan perintah compute addresses describe untuk melihat hasilnya. Catat alamat IP eksternal statis yang dicadangkan (‘IP_ADDRESS').

gcloud compute addresses describe ADDRESS_NAME
  1. Buat aturan penerusan menggunakan alamat IP eksternal regional yang dicadangkan ‘IP_ADDRESS'. Hubungkan aturan penerusan ke layanan backend.
gcloud compute forwarding-rules create FORWARDING_RULE \
  --region=us-central1 \
  --ports=80 \
  --address=IP_ADDRESS \
  --backend-service=BACKEND_SERVICE_NAME
  • Ganti kode berikut: FORWARDING_RULE: nama aturan penerusan yang akan dibuat. IP_ADDRESS: alamat IP yang akan ditetapkan ke instance. Gunakan alamat IP eksternal statis yang dicadangkan, bukan nama alamat.

Memverifikasi bobot backend menggunakan API layanan backend

Pastikan bobot backend dilaporkan dengan benar ke health check HTTP.

gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \
  --region=us-central1

Outputnya akan seperti berikut:

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