Tentang codelab ini
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
- 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 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.
- 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:
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 pada 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 alat ini, lihat ringkasan gcloud CLI. Anda dapat menemukan perintah terkait load balancing di referensi API dan gcloud CLI. Jika Anda belum pernah menjalankan Google Cloud CLI sebelumnya, jalankan gcloud init terlebih dahulu untuk melakukan autentikasi.
- Aktifkan 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 load balancer Anda.
- 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.
- 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 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:
- 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
).
- 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 akan memberikan petunjuk untuk membuat health check HTTP guna 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.
Buat layanan backend
Contoh berikut memberikan petunjuk untuk 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
- Cadangkan 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 responsivitas) dari layanan backend, jalankan perintah
gcloud compute backend-services get-health
:
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