1. Pengantar
Anda dapat mengonfigurasi load balancer jaringan untuk mendistribusikan traffic di seluruh instance backend load balancer berdasarkan bobot yang dilaporkan oleh health check HTTP menggunakan load balancing berbobot.
Load balancing berbobot mengharuskan Anda mengonfigurasi kedua hal berikut:
- Anda harus menetapkan kebijakan load balancer lokalitas (localityLbPolicy) layanan backend ke WEIGHTED_MAGLEV.
- Anda harus mengonfigurasi layanan backend dengan health check HTTP/HTTP2/HTTPS. Respons health check HTTP harus berisi kolom header respons HTTP kustom X-Load-Balancing-Endpoint-Weight untuk menentukan bobot dengan nilai bilangan bulat dari 0 hingga 1.000 dalam representasi desimal untuk setiap backend instance.
Jika Anda menggunakan grup instance yang sama sebagai backend untuk beberapa load balancer jaringan berbasis layanan backend yang menggunakan load balancing berbobot, sebaiknya gunakan jalur permintaan unik untuk setiap health check layanan backend. Untuk mengetahui informasi selengkapnya, lihat Kriteria keberhasilan untuk health check HTTP, HTTPS, dan HTTP/2.
Health check HTTP harus menampilkan respons HTTP 200 (OK) agar health check lulus dan instance backend dianggap responsif. Jika semua instance backend lulus health check dan mengembalikan X-Load-Balancing-Endpoint-Weight dengan bobot nol, load balancer mendistribusikan koneksi baru di antara backend yang responsif, dan memperlakukannya dengan bobot yang sama. Load balancer juga dapat mendistribusikan koneksi baru di antara backend yang tidak responsif. Untuk 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 data lebih banyak daripada yang lain, atau beberapa koneksi aktif lebih lama daripada yang lain, distribusi beban backend mungkin tidak merata. Dengan menandakan bobot per instance yang lebih rendah, instance dengan beban tinggi dapat mengurangi pangsa koneksi barunya, sementara instance tersebut tetap melayani koneksi yang ada.
- Jika backend kelebihan beban dan menetapkan lebih banyak koneksi dapat memutus koneksi yang ada, backend tersebut menetapkan bobot nol untuk dirinya sendiri. Dengan memberi sinyal bobot nol, backend instance berhenti melayani koneksi baru, tetapi terus melayani koneksi yang sudah ada.
- Jika backend menghabiskan koneksi yang ada sebelum pemeliharaan, backend akan menetapkan bobot nol ke dirinya sendiri. Dengan memberi sinyal bobot nol, backend instance berhenti melayani koneksi baru, tetapi terus melayani koneksi yang sudah ada.
Yang akan Anda pelajari
- Cara mengonfigurasi load balancer jaringan untuk mendistribusikan traffic di seluruh instance backend load balancer berdasarkan bobot yang dilaporkan oleh health check HTTP menggunakan load balancing berbobot.
Penyiapan lingkungan mandiri
- 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.
- 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
peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai
PROJECT_ID
). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat 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.
- 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. Untuk 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:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
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 di layanan backend dengan kebijakan load balancer lokalitas sebagai WEIGHTED_MAGLEV.
Sebelum memulai
- Baca Ringkasan Load Balancing Jaringan eksternal berbasis layanan backend.
- Instal Google Cloud CLI. Untuk mengetahui ringkasan lengkap tentang alat ini, baca ringkasan gcloud CLI. Anda dapat menemukan perintah terkait load balancing dalam referensi API dan gcloud CLI. Jika Anda belum pernah menjalankan Google Cloud CLI, jalankan gcloud init terlebih dahulu untuk melakukan autentikasi.
- Mengaktifkan Compute API.
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 dari load balancer Anda.
- Membuat subnet dan jaringan 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.
- Buat aturan firewall izinkan traffic masuk untuk mengizinkan paket yang dikirim ke port TCP tujuan 80 dan 443 agar dapat dikirim 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 perintahgcloud 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:
- Konfigurasikan tiga instance VM backend untuk menampilkan bobot di header X-Load-Balancing-Endpoint-Weight dengan respons HTTP. Untuk tutorial ini, Anda mengonfigurasi satu backend instance untuk melaporkan bobot nol, backend instance kedua untuk melaporkan bobot 100, dan backend instance 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 memberikan petunjuk untuk membuat grup instance tidak terkelola yang berisi ketiga instance VM(instance-0, instance-100, and instance-900
).
- Untuk membuat grup instance, jalankan perintah
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
Ganti INSTANCE_GROUP
dengan nama grup instance yang akan dibuat.
Membuat health check HTTP
Dalam tutorial ini, Anda memberikan petunjuk cara membuat health check HTTP untuk membaca respons HTTP yang berisi bobot VM backend."
- Untuk membuat health check HTTP, jalankan perintah
gcloud compute health-checks create
:
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.
Membuat layanan backend
Contoh berikut memberikan petunjuk cara membuat layanan backend eksternal regional yang dikonfigurasi untuk menggunakan load balancing berbobot.
- Buat layanan backend dengan health check HTTP dan tetapkan kebijakan load balancer lokalitas ke WEIGHTED_MAGLEV.
- Untuk membuat layanan backend, jalankan perintah
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
- Ganti
BACKEND_SERVICE_NAME
dengan nama layanan backend yang akan dibuat.
- Tambahkan grup instance ke layanan backend.
- Untuk menambahkan grup instance, jalankan perintah
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
- Mencadangkan alamat IP eksternal regional untuk load balancer.
- Untuk mencadangkan satu atau beberapa alamat IP, jalankan perintah
gcloud compute addresses create
:
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
- Buat aturan penerusan menggunakan alamat IP eksternal regional yang dicadangkan 'IP_ADDRESS'. Hubungkan aturan penerusan ke layanan backend.
- Untuk membuat aturan penerusan, jalankan perintah
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
- 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.
- Untuk mendapatkan bobot backend (bersama dengan status respons) dari layanan backend, jalankan perintah
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Output-nya akan terlihat 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