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 menggunakan komponen Google Cloud yang 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure 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 melalui 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 konsol Google Cloud, buka halaman VPC networks.
Klik Create VPC Network.
Di bagian Name, masukkan
web-app-vpc
.Setel Subnet creation mode ke Automatic.
Di bagian bawah halaman, klik Create.
Tunggu hingga jaringan VPC selesai 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 bagian Name, masukkan
allow-web-app-http
.Setel Network ke
web-app-vpc
.Pada bagian Target, pilih All instances in the network.
Setel Source filter ke
IP ranges
.Pada bagian Source IP ranges, masukkan
0.0.0.0/0
untuk mengizinkan akses bagi semua alamat IP.Di bagian Ports and protocol, pilih Specified protocols and ports.
Centang tcp dan masukkan80
agar dapat mengizinkan akses untuk traffic HTTP.Klik Create.
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 melalui 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-micro
.Di bagian Firewall, pilih Allow HTTP traffic.
Klik Networking, disks, security, management, sole tenancy untuk melihat setelan lanjutan.
Klik tab Management. Di bagian Automation, masukkan Startup script berikut.
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
Skrip akan menarik, menginstal, dan meluncurkan aplikasi web saat instance dimulai.
Klik tab Networking. Di bagian Network, pilih
web-app-vpc
. Hal ini memaksa setiap instance yang dibuat dengan template ini untuk dijalankan di jaringan yang dibuat sebelumnya.Klik Create.
Tunggu hingga template selesai 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 Buat grup instance.
Pilih New managed instance group (stateless)."
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 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
Pilih Allow instance redistribution.
Untuk Autoscaling mode, pilih Off: do not autoscale.
Klik Create. Tindakan ini akan mengalihkan Anda kembali ke halaman Grup instance.
Untuk memverifikasi bahwa instance Anda menjalankan aplikasi web demo dengan benar:
- Dari halaman Instance groups, klik
load-balancing-web-app-group
untuk melihat instance dalam grup tersebut. Di bagian External IP, klik alamat IP untuk menghubungkan instance tersebut. Tab browser baru akan terbuka dan menampilkan aplikasi web demo:
Setelah selesai, tutup tab browser untuk aplikasi web demo.
- Dari halaman Instance groups, klik
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 External IP addresses.
Klik Reserve static address.
Di bagian 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 beberapa bagian:
- Konfigurasi backend
- Konfigurasi frontend
- Tinjau dan selesaikan
Selesaikan semua langkah untuk membuat load balancer.
Memulai konfigurasi Anda
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 (eksternal), lalu klik Next.
- Untuk Global or single region deployment, pilih Best for global Workload, lalu klik Next.
- Untuk Load balancer Generation, pilih Global external Application Load Balancer, lalu klik Next.
- Klik Konfigurasikan.
Konfigurasi dasar
- Untuk Load balancer name, masukkan
web-app-load-balancer
.
Konfigurasi backend
- Di panel kiri halaman Create global external Application Load Balancer, klik Backend configuration.
- Klik Create or select backend services & backend buckets untuk membuka menu drop-down. Klik Backend services, lalu klik Create a backend service.
- Di jendela baru, untuk Name aplikasi backend, masukkan
web-app-backend
. - 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 Done untuk membuat backend.
Buat health check untuk backend load balancer:
- Di bagian Health check, pilih Create a health check (atau Create another health check) dari menu drop-down. 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. Metrik 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 Save and continue untuk membuat health check.
Klik Create untuk membuat layanan backend.
Konfigurasi frontend
- Di panel kiri halaman Create global external Application Load Balancer, klik Frontend configuration.
- 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
. - Setel Port ke
80
. - Klik Done untuk membuat frontend.
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, 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
Di halaman yang sama, pastikan Frontend menggunakan alamat IP dengan Protokol
HTTP
.
Di panel kiri halaman Create global external Application Load Balancer, klik Create untuk menyelesaikan pembuatan load balancer.
Anda mungkin perlu menunggu beberapa menit sampai load balancer selesai dibuat.
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 Konsol Google Cloud. Perlu waktu beberapa detik hingga sesi dimulai.
Simpan alamat IP eksternal statis dari load balancer:
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
Salin
EXTERNAl_IP_ADDRESS
dari output:IPAddress: EXTERNAl_IP_ADDRESS ...
Buat variabel bash lokal:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
dengan
EXTERNAl_IP_ADDRESS
adalah 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 done
Skrip ini terus berupaya terhubung ke aplikasi web melalui 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.
(Opsional) Membatasi traffic masuk
Saat membuat grup instance terkelola regional, Anda dapat mengakses setiap instance secara langsung melalui alamat IP sementara eksternalnya. Namun, setelah menyiapkan load balancer dan alamat IP eksternal statis, Anda perlu memodifikasi firewall jaringan agar traffic masuk harus melewati load balancer singkat ini.
Jika Anda ingin membatasi traffic masuk ke load balancer, ubah firewall jaringan untuk menonaktifkan alamat IP eksternal sementara untuk setiap instance.
Edit aturan firewall untuk membatasi traffic HTTP sehingga aplikasi web hanya dapat diakses menggunakan load balancer:
Di konsol Google Cloud, buka halaman Firewall.
Di bagian Name, klik
allow-web-app-http
.Klik Edit.
Ubah Source IP ranges agar hanya mengizinkan pemeriksaan health check:
- Hapus
0.0.0.0/0
. - Pada baris yang sama, masukkan
130.211.0.0/22
lalu tekan Tab. - Pada baris yang sama, masukkan
35.191.0.0/16
, lalu tekan Tab.
- Hapus
Klik Save.
Pastikan Anda tidak dapat terhubung ke aplikasi web menggunakan alamat IP eksternal sementara untuk instance tertentu:
Di konsol Google Cloud, buka halaman Instance groups.
Klik
load-balancing-web-app-group
untuk melihat instance di grup tersebut.Di bagian External IP, klik alamat IP untuk menghubungkan instance tersebut. Tab browser baru akan terbuka, tetapi aplikasi web tidak terbuka. (Pada akhirnya, halaman akan menampilkan error waktu tunggu habis).
Setelah selesai, tutup tab browser untuk instance tersebut.
Pastikan Anda dapat terhubung ke aplikasi web dengan menggunakan load balancer:
Di konsol Google Cloud, buka halaman Load balancing.
Di bagian Name, klik
web-app-load-balancer
untuk memperluas load balancing yang baru saja Anda buat.Untuk terhubung ke aplikasi web melalui alamat IP statis eksternal, lihat di bagian Frontend dan IP:Port, lalu salin alamat IP. Kemudian, 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.
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
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tertentu
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
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 Delete untuk mengonfirmasi penghapusan.
Menghapus grup instance
- Di Konsol Google Cloud, buka halaman Instance groups.
-
Pilih kotak centang untuk grup instance
load-balancing-web-app-group
Anda. - Untuk menghapus grup instance, klik Hapus.
Menghapus template instance
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
Di konsol Google Cloud, buka halaman VPC networks.
Klik
web-app-vpc
.Klik
Delete di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
Langkah selanjutnya
- 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 Membuat Aplikasi Web yang Skalabel dan Tangguh di Google Cloud.