Tutorial ini menjelaskan cara menggunakan load balancing dengan grup instance terkelola regional untuk mengalihkan traffic dari instance VM yang sibuk atau tidak tersedia, sehingga Anda dapat memberikan ketersediaan tinggi bahkan selama pemadaman layanan di zona tertentu.
Grup instance terkelola regional mendistribusikan aplikasi di beberapa instance di beberapa zona. Load balancer global mengarahkan traffic di beberapa region melalui satu alamat IP. Dengan menggunakan kedua layanan ini untuk mendistribusikan aplikasi di beberapa zona, Anda dapat membantu memastikan bahwa aplikasi Anda tersedia bahkan dalam kasus ekstrem, seperti gangguan zona.
Load balancer dapat digunakan untuk mengarahkan berbagai jenis traffic. Tutorial ini menunjukkan cara membuat load balancer global yang mengarahkan traffic HTTP eksternal. Namun, sebagian besar konten tutorial ini masih relevan dengan jenis load balancer lainnya. Untuk mempelajari jenis traffic lain yang dapat diarahkan dengan load balancer, lihat Jenis Cloud Load Balancing.
Tutorial ini berisi langkah-langkah mendetail untuk meluncurkan aplikasi web pada grup instance terkelola regional, mengonfigurasi akses jaringan, membuat load balancer untuk mengarahkan traffic ke aplikasi web, dan mengamati load balancer dengan menyimulasikan pemadaman layanan menurut zona. Bergantung pada pengalaman Anda menggunakan fitur tersebut, tutorial ini memerlukan waktu sekitar 45 menit untuk diselesaikan.
Tujuan
- Meluncurkan aplikasi web demo pada grup instance terkelola regional.
- Mengonfigurasi load balancer global yang mengarahkan traffic HTTP di beberapa zona.
- Mengamati efek load balancer dengan menyimulasikan pemadaman layanan zona.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
- Compute Engine
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
Arsitektur aplikasi
Aplikasi ini mencakup komponen Compute Engine berikut:
- Jaringan VPC: jaringan virtual dalam Google Cloud yang dapat menyediakan konektivitas global menggunakan rute dan aturan firewall-nya sendiri.
- Aturan firewall: firewall Google Cloud memungkinkan Anda mengizinkan atau menolak traffic ke instance.
- Template instance: template yang digunakan untuk membuat setiap instance VM dalam grup instance terkelola.
- Grup instance terkelola regional: grup instance VM yang menjalankan aplikasi yang sama di beberapa zona.
- Alamat IP eksternal statis global: alamat IP statis yang dapat diakses di jaringan eksternal dan dapat dipasang ke resource global.
- Load balancer global: load balancer yang memungkinkan backend instance didistribusikan di beberapa region. Gunakan load balancer global saat pengguna memerlukan akses ke aplikasi dan konten yang sama, dan Anda ingin memberikan akses menggunakan satu alamat IP anycast.
- Health check: kebijakan yang digunakan oleh load balancer untuk mengevaluasi responsivitas aplikasi di setiap instance VM.
Meluncurkan aplikasi web
Tutorial ini menggunakan aplikasi web yang disimpan di GitHub. Jika Anda ingin mempelajari cara pengimplimentasian aplikasi lebih lanjut, lihat repositori GoogleCloudPlatform/python-docs-samples di GitHub.
Luncurkan aplikasi web di setiap VM dalam grup instance dengan menyertakan skrip startup dalam template instance. Selain itu, jalankan grup instance dalam jaringan VPC khusus agar aturan firewall tutorial ini tidak mengganggu resource yang ada yang sedang berjalan di project Anda.
Membuat jaringan VPC
Penggunaan jaringan VPC melindungi resource yang ada dalam project Anda agar tidak terpengaruh oleh resource yang akan Anda buat untuk tutorial ini. Jaringan VPC juga diperlukan untuk membatasi traffic masuk sehingga harus melalui load balancer.
Buat jaringan VPC guna mengenkapsulasi aturan firewall untuk aplikasi web demo:
Di Google Cloud konsol, buka halaman VPC networks.
Klik Create VPC Network.
Di bagian Name, masukkan
web-app-vpc
.Setel Subnet creation mode ke Custom.
Buat subnet baru sebagai berikut:
- Di bagian Subnets, tetapkan kolom Name, masukkan
web-app-vpc-subnet
. - Di drop-down Region, pilih us-central1.
- Pastikan opsi IP stack type ditetapkan ke IPv4.
- Di bagian Rentang IPv4 utama, masukkan rentang IPv4
10.2.0.0/24
.
- Di bagian Subnets, tetapkan kolom Name, masukkan
Di bagian bawah halaman, klik Create.
Tunggu hingga jaringan VPC dibuat sebelum melanjutkan.
Membuat aturan firewall
Setelah jaringan VPC dibuat, siapkan aturan firewall untuk mengizinkan traffic HTTP ke jaringan VPC:
Di konsol Google Cloud , buka halaman Firewall.
Klik Create firewall rule.
Di kolom Name, masukkan
allow-web-app-http
.Setel Network ke
web-app-vpc
.Pastikan opsi berikut disetel seperti yang diberikan:
- Opsi Direction of traffic disetel ke Ingress.
- Opsi Tindakan jika ada kecocokan ditetapkan ke Izinkan.
Di drop-down Targets, pilih All instances in the network.
Setel Source filter ke
IPv4 ranges
.Di kolom Source IP ranges, masukkan
130.211.0.0/22, 35.191.0.0/16
untuk mengizinkan health check load balancer.Di bagian Protocols and ports, lakukan hal berikut:
- Pilih Protokol dan port yang ditentukan.
- Pilih TCP.
- Di kolom Ports, masukkan
80
untuk mengizinkan akses untuk traffic HTTP.
Klik Buat.
Membuat template instance
Buat template yang akan Anda gunakan untuk membuat grup instance VM. Setiap instance yang dibuat dari template akan meluncurkan aplikasi web demo menggunakan skrip startup.
Di konsol Google Cloud , buka halaman Instance templates.
Klik Create instance template.
Di bagian Name, masukkan
load-balancing-web-app-template
.Di bagian Machine configuration, setel Machine type ke
e2-medium
.Klik bagian Advanced options untuk meluaskan.
Klik bagian Networking, lalu lakukan hal berikut:
- Di bagian Network interfaces, hapus semua antarmuka jaringan yang ada dengan mengklik ikon di sampingnya.
- Klik Add a network interface, lalu pilih jaringan
web-app-vpc
tersebut. Hal ini memaksa setiap instance yang dibuat dengan template ini untuk dijalankan di jaringan yang dibuat sebelumnya. - Di drop-down Subnetwork, pilih
web-app-vpc-subnet
. - Klik Selesai.
Klik bagian Pengelolaan, lalu lakukan hal berikut:
Di bagian Automation, masukkan skrip startup berikut:
apt-get update apt-get -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo
Skrip akan mengambil, menginstal, dan meluncurkan aplikasi web saat instance VM dimulai.
Biarkan nilai default untuk opsi lainnya.
Klik Buat.
Tunggu hingga template dibuat sebelum melanjutkan.
Membuat grup instance terkelola regional
Untuk menjalankan aplikasi web, gunakan template instance untuk membuat grup instance terkelola regional:
Di konsol Google Cloud , buka halaman Instance groups.
Klik Create instance group.
Untuk Name, masukkan
load-balancing-web-app-group
.Untuk Instance template, pilih
load-balancing-web-app-template
.Setel Number of instances ke
6
. Jika kolom ini dinonaktifkan, nonaktifkan penskalaan otomatis terlebih dahulu.Untuk menonaktifkan penskalaan otomatis, buka bagian Penskalaan otomatis. Di drop-down Autoscaling mode, pilih Off: do not autoscale.
Untuk Location, pilih Multiple zones.
Untuk Region, pilih us-central1.
Untuk Zones, pilih zona berikut dari menu drop-down:
- us-central1-b
- us-central1-c
- us-central1-f
Biarkan nilai default untuk opsi lainnya.
Klik Buat. Tindakan ini akan mengalihkan Anda kembali ke halaman Grup instance.
Anda mungkin perlu menunggu beberapa menit hingga semua instance dalam grup berjalan.
Mengonfigurasi load balancer
Agar dapat menggunakan load balancer untuk mengarahkan traffic ke aplikasi web, Anda harus mencadangkan alamat IP eksternal untuk menerima semua traffic masuk. Kemudian, buat load balancing yang menerima traffic dari alamat IP tersebut dan mengalihkan traffic tersebut ke grup instance.
Sediakan alamat IP statis
Gunakan alamat IP eksternal statis global untuk memberikan satu titik masuk ke load balancer untuk menerima semua traffic pengguna. Compute Engine mempertahankan alamat IP statis meskipun Anda mengubah atau menghapus resource Google Cloud yang berafiliasi. Hal ini memungkinkan aplikasi web selalu memiliki titik entri yang sama, meskipun bagian lain dari aplikasi web mungkin berubah.
Di konsol Google Cloud , buka halaman Alamat IP.
Klik Reserve external static IP address.
Di kolom Name, masukkan
web-app-ipv4
.Setel IP version ke IPv4.
Setel Type ke Global.
Klik Reserve.
Membuat load balancer
Bagian ini menjelaskan langkah-langkah yang diperlukan untuk membuat load balancing global yang mengarahkan traffic HTTP.
Load balancer ini menggunakan frontend untuk menerima traffic masuk dan backend untuk mendistribusikan traffic ini ke instance yang berfungsi dengan baik. Karena load balancer terdiri dari beberapa komponen, tugas ini dibagi menjadi lima bagian:
- Pilih jenis load balancer
- Beri nama load balancer
- Mengonfigurasi frontend
- Mengonfigurasi backend
- Tinjau dan selesaikan
Selesaikan semua bagian untuk membuat load balancer.
Pilih jenis load balancer
Di konsol Google Cloud , buka halaman Load balancing.
- Klik Create load balancer.
- Untuk Type of load balancer, pilih Application Load Balancer (HTTP/HTTPS), lalu klik Next.
- Untuk Public facing or internal, pilih Public facing (external), lalu klik Next.
- Untuk Global or single region deployment, pilih Best for global workloads, lalu klik Next.
- Untuk Load balancer generation, pilih Global external Application Load Balancer, lalu klik Next.
- Klik Configure.
Beri nama load balancer
- Di panel kiri, untuk Load balancer name, masukkan
web-app-load-balancer
.
Mengonfigurasi frontend
- Di halaman Frontend configuration, di bagian Name, masukkan
web-app-ipv4-frontend
. - Setel Protocol ke
HTTP
. - Setel IP version ke
IPv4
. - Setel IP address ke
web-app-ipv4
. - Tetapkan Port ke
80
. - Klik Done untuk membuat frontend.
Mengonfigurasi backend
- Di panel kiri, klik Backend configuration.
- Klik drop-down Backend services & backend buckets untuk membuka menu, lalu klik Create a backend service.
- Di jendela baru, untuk Name layanan backend, masukkan
web-app-backend
. - Di bagian Backends, lakukan tindakan berikut:
- Setel Instance group ke
load-balancing-web-app-group
. - Setel Transfer nomor ke
80
. Hal ini memungkinkan traffic HTTP antara load balancer dan grup instance. - Di bagian Balancing mode, pilih Utilization.
- Klik Selesai.
- Setel Instance group ke
Buat health check untuk backend load balancer sebagai berikut:
- Klik drop-down Health check, lalu klik Create a health check. Jendela baru akan terbuka.
- Di jendela baru di bagian Name, masukkan
web-app-load-balancer-check
. - Setel Protocol ke HTTP.
- Di bagian Port, masukkan
80
. - Untuk tutorial ini, setel Request path ke
/health
, yang merupakan jalur yang disiapkan untuk merespons oleh aplikasi web demo. Setel Kriteria respons berikut:
- Setel Check interval ke
3
detik. Fungsi menentukan jumlah waktu dari awal satu pemeriksaan hingga awal pemeriksaan berikutnya. - Setel Waktu Tunggu ke
3
detik. Fungsi ini menentukan jumlah waktu yang dibutuhkan Google Cloud untuk menunggu respons atas penyelidikan. Nilainya harus kurang dari atau sama dengan interval pemeriksaan. - Setel Batas Responsif ke
2
keberhasilan berturut-turut. Hal ini menentukan jumlah pemeriksaan berurutan yang harus berhasil agar instance dianggap responsif. - Setel Batas Tidak Responsif ke
2
kegagalan berturut-turut. Ini menentukan jumlah pemeriksaan berurutan yang harus gagal agar instance dianggap tidak responsif.
- Setel Check interval ke
Klik Create untuk membuat health check.
Biarkan nilai default untuk opsi lainnya.
Klik Create untuk membuat layanan backend.
Tinjau dan selesaikan
Verifikasi setelan load balancing Anda sebelum membuat load balancer:
- Di panel kiri halaman Create global external Application Load Balancer, klik Review and finalize.
Di halaman Review and finalize, pastikan Frontend menggunakan alamat IP dengan Protokol
HTTP
.Di halaman yang sama, verifikasi setelan Backend berikut:
- Layanan backend adalah
web-app-backend
. - Protokol endpoint adalah
HTTP
. - Health check adalah
web-app-load-balancer-check
. - Grup instance adalah
load-balancing-web-app-group
.
- Layanan backend adalah
Klik Create untuk menyelesaikan pembuatan load balancer.
Anda mungkin perlu menunggu beberapa menit sampai load balancer selesai dibuat.
Menguji Load Balancer
Pastikan Anda dapat terhubung ke aplikasi web dengan menggunakan load balancer sebagai berikut:
Di konsol Google Cloud , buka halaman Load balancing.
Di kolom Name, klik
web-app-load-balancer
untuk memperluas load balancer yang baru saja Anda buat.Untuk terhubung ke aplikasi web menggunakan alamat IP statis eksternal, lakukan hal berikut:
- Di bagian Frontend, salin alamat IP yang ditampilkan di kolom IP:Port.
Buka tab browser baru dan tempelkan alamat IP ke kolom URL. Aplikasi web demo akan ditampilkan:
Perhatikan bahwa setiap kali Anda memuat ulang halaman, load balancer akan terhubung ke berbagai instance di zona yang berbeda. Ini terjadi karena Anda tidak terhubung ke instance secara langsung; Anda terhubung ke load balancer, yang memilih instance yang menjadi tujuan pengalihan.
Setelah selesai, tutup tab browser untuk aplikasi web demo.
Menyimulasikan pemadaman layanan zona
Anda dapat mengamati fungsi load balancer dengan menyimulasikan ketidaktersediaan yang luas dari pemadaman layanan di zona tertentu. Simulasi ini bekerja dengan memaksa semua instance yang berada di zona tertentu untuk melaporkan status tidak responsif pada jalur permintaan /health
. Saat melaporkan status tidak responsif, instance ini gagal dalam health check load balancing, sehingga meminta load balancer untuk berhenti mengarahkan traffic ke instance ini.
Memantau zona mana yang menjadi tujuan load balancer mengarahkan traffic.
Di konsol Google Cloud , buka Cloud Shell.
Cloud Shell akan terbuka di panel Google Cloud konsol. Perlu waktu beberapa detik hingga sesi dimulai.
Simpan alamat IP eksternal statis load balancer Anda sebagai berikut:
Dapatkan alamat IP eksternal dari aturan penerusan frontend load balancer dengan memasukkan perintah berikut di terminal Anda:
gcloud compute forwarding-rules describe web-app-ipv4-frontend --global
Outputnya akan terlihat seperti berikut. Salin
EXTERNAl_IP_ADDRESS
dari output.IPAddress: EXTERNAl_IP_ADDRESS ...
Buat variabel bash lokal:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
Ganti
EXTERNAl_IP_ADDRESS
dengan alamat IP eksternal yang Anda salin.
Untuk memantau zona mana load balancer mengarahkan traffic, jalankan skrip bash berikut:
while true do BODY=$(curl -s "$LOAD_BALANCER_IP") NAME=$(echo -n "$BODY" | grep "load-balancing-web-app-group" | perl -pe 's/.+?load-balancing-web-app-group-(.+?)<.+/\1/') ZONE=$(echo -n "$BODY" | grep "us-" | perl -pe 's/.+?(us-.+?)<.+/\1/') echo $ZONE sleep 2 # Wait for 2 seconds done
Skrip ini terus berupaya terhubung ke aplikasi web dengan menggunakan alamat IP untuk frontend load balancer, dan menghasilkan output zona tempat aplikasi web dijalankan untuk setiap koneksi.
Output yang dihasilkan harus mencakup zona
us-central1-b
,us-central1-c
, danus-central1-f
:us-central1-f us-central1-b us-central1-c us-central1-f us-central1-f us-central1-c us-central1-f us-central1-c us-central1-c
Biarkan terminal ini tetap terbuka.
Saat monitor berjalan, mulai menyimulasikan pemadaman layanan zona.
- Di Cloud Shell, buka sesi terminal kedua dengan mengklik tombol Add.
Buat variabel bash lokal untuk project ID:
export PROJECT_ID=PROJECT_ID
dengan
PROJECT_ID
adalah project ID untuk project Anda saat ini, yang ditampilkan pada setiap baris baru di Cloud Shell:user@cloudshell:~ (PROJECT_ID)$
Buat variabel bash lokal untuk zona yang ingin dinonaktifkan. Untuk menyimulasikan kegagalan zona
us-central1-f
, gunakan perintah berikut:export DISABLE_ZONE=us-central1-f
Kemudian, jalankan skrip bash berikut. Skrip ini menyebabkan instance aplikasi web demo di zona yang dinonaktifkan untuk menghasilkan respons yang tidak responsif pada health check load balancer. Respons yang tidak responsif akan meminta load balancer untuk mengalihkan traffic dari instance ini.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($DISABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal failure for zone $DISABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeUnhealthy" >/dev/null --retry 2 done
Setelah penundaan singkat, load balancer berhenti mengarahkan traffic ke zona tidak responsif, sehingga output dari jendela terminal pertama akan berhenti mencantumkan zona
us-central1-f
:us-central1-c us-central1-c us-central1-c us-central1-b us-central1-b us-central1-c us-central1-b us-central1-c us-central1-c
Hal ini menunjukkan bahwa load balancer hanya mengarahkan traffic ke instance yang sehat dan responsif.
Biarkan kedua terminal tetap terbuka.
Pada terminal kedua, buat variabel bash lokal untuk zona yang ingin dipulihkan. Untuk memulihkan traffic ke zona
us-central1-f
, gunakan perintah berikut:export ENABLE_ZONE=us-central1-f
Kemudian, jalankan skrip bash berikut. Skrip ini menyebabkan instance aplikasi web demo di zona yang diaktifkan untuk menghasilkan respons responsif pada health check load balancer. Respons yang responsif akan meminta load balancer untuk mulai mendistribusikan traffic kembali ke instance ini.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($ENABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal restoration for zone $ENABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeHealthy" >/dev/null --retry 2 done
Setelah beberapa menit, output dari jendela terminal pertama secara bertahap mencantumkan zona
us-central1-f
lagi:us-central1-b us-central1-b us-central1-c us-central1-f us-central1-c us-central1-c us-central1-b us-central1-c us-central1-f
Hal ini menunjukkan bahwa load balancer kembali mengarahkan traffic masuk ke semua zona.
Tutup kedua terminal setelah selesai.
Pembersihan
Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.
Jika Anda membuat project terpisah untuk tutorial ini, hapus seluruh project tersebut. Atau, jika project memiliki resource yang ingin Anda pertahankan, hapus resource yang dibuat dalam tutorial ini saja.
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource tertentu
Bagian berikut menjelaskan cara menghapus resource tertentu yang Anda buat selama tutorial ini.
Menghapus load balancer
Di konsol Google Cloud , buka halaman Load balancing.
Klik kotak centang di samping
web-app-load-balancer
.Klik
Delete di bagian atas halaman.Di jendela baru, pilih semua kotak centang. Kemudian, klik Delete load balancer and selected resources untuk mengonfirmasi penghapusan.
Menghapus alamat IP eksternal statis
Tunggu hingga load balancer dihapus sebelum menghapus alamat IP eksternal statis.
Di konsol Google Cloud , buka halaman External IP addresses.
Klik kotak centang di samping
web-app-ipv4
.Klik Release static address di bagian atas halaman. Di jendela baru, klik Lepaskan untuk mengonfirmasi pelepasan.
Menghapus grup instance
Tunggu hingga load balancer dihapus sebelum menghapus grup instance.
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
load-balancing-web-app-group
instance group. - To delete the instance group, click Delete.
Menghapus template instance
Anda harus menyelesaikan penghapusan grup instance sebelum menghapus template instance. Anda tidak dapat menghapus template instance jika grup instance terkelola menggunakannya.
Di konsol Google Cloud , buka halaman Instance Templates.
Klik kotak centang di samping
load-balancing-web-app-template
.Klik
Delete di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
Menghapus jaringan VPC
Anda harus selesai menghapus grup instance sebelum menghapus jaringan VPC. Anda tidak dapat menghapus jaringan VPC jika resource lain masih menggunakannya.
Di Google Cloud konsol, buka halaman VPC networks.
Klik
web-app-vpc
.Klik
Delete VPC network di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
Langkah berikutnya
- Coba tutorial lain:
- Pelajari Grup Instance Terkelola lebih lanjut.
- Pelajari Load Balancing lebih lanjut.
- Pelajari lebih lanjut cara Mengoptimalkan Latensi Aplikasi dengan Load Balancing.
- Pelajari lebih lanjut cara Mendesain Sistem yang tangguh.
- Pelajari lebih lanjut cara Membangun Aplikasi Web yang Skalabel dan Tangguh di Google Cloud.