Tutorial interaktif ini menunjukkan cara menggunakan autohealing untuk mem-build aplikasi dengan ketersediaan tinggi di Compute Engine.
Aplikasi dengan ketersediaan tinggi didesain untuk melayani klien dengan latensi dan periode nonaktif yang minimal. Ketersediaan terganggu saat aplikasi mengalami error atau berhenti berfungsi. Klien aplikasi yang disusupi dapat mengalami latensi atau periode nonaktif yang tinggi.
Autohealing memungkinkan Anda memulai ulang aplikasi yang disusupi secara otomatis. Server akan segera mendeteksi instance virtual machine (VM) yang gagal dan membuatnya kembali secara otomatis, sehingga klien dapat disalurkan kembali. Dengan autohealing, Anda tidak perlu lagi mengembalikan aplikasi secara manual setelah kegagalan.
Tujuan
- Mengonfigurasi health check dan kebijakan autohealing.
- Menyiapkan layanan web demo di grup instance terkelola (MIG).
- Menyimulasikan kegagalan health check dan saksikan proses pemulihan autohealing.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih termasuk:- Compute Engine
Sebelum memulai
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.
Aktifkan API Compute Engine.
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.
Aktifkan API Compute Engine.
Jika Anda lebih suka bekerja dari command line, instal Google Cloud CLI.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Arsitektur aplikasi
Aplikasi ini mencakup komponen Compute Engine berikut:
- Health check: Kebijakan health check HTTP yang digunakan oleh autohealer untuk mendeteksi VM yang gagal.
- Aturan firewall: Aturan firewall Google Cloud dapat digunakan untuk mengizinkan atau menolak traffic ke VM Anda.
- Grup instance terkelola: Grup VM yang menjalankan layanan web demo yang sama.
- Template instance: Template yang digunakan untuk membuat setiap VM dalam grup instance.
Cara health check memeriksa layanan web demo
Health check mengirimkan permintaan pemeriksaan ke VM menggunakan protokol yang ditentukan, seperti HTTP(S), SSL, atau TCP. Untuk mengetahui informasi selengkapnya, lihat cara kerja health check dan kategori, protokol, dan port health check.
Health check dalam tutorial ini adalah health check HTTP yang memeriksa jalur HTTP /health
di port 80. Untuk health check HTTP, permintaan pemeriksaan hanya lolos jika jalur menampilkan respons HTTP 200 (OK)
. Untuk tutorial ini, server web demo menentukan jalur /health
untuk menampilkan respons HTTP 200 (OK)
saat responsif atau respons HTTP 500 (Internal Server Error)
saat tidak responsif.
Untuk informasi selengkapnya, lihat
kriteria keberhasilan untuk HTTP, HTTPS, dan HTTP/2.
Membuat health check
Untuk menyiapkan autohealing, buat health check kustom dan konfigurasikan firewall jaringan untuk mengizinkan pemeriksaan health check.
Dalam tutorial ini, Anda akan membuat health check regional. Untuk autohealing, Anda dapat menggunakan health check regional atau global. Health check regional mengurangi dependensi lintas region dan membantu mencapai residensi data. Health check global praktis jika Anda ingin menggunakan health check yang sama untuk MIG di beberapa region.
Konsol
Membuat health check.
Di konsol Google Cloud, buka halaman Create health check.
Di kolom Name, masukkan
autohealer-check
.Tetapkan Scope ke
Regional
.Di drop-down Region, pilih
europe-west1
.Untuk Protocol, pilih
HTTP
.Tetapkan Request path ke
/health
. Setelan ini menunjukkan jalur HTTP yang digunakan health check. Untuk tutorial ini, server web demo menentukan jalur/health
untuk menampilkan responsHTTP 200 (OK)
saat responsif atau responsHTTP 500 (Internal Server Error)
saat tidak responsif.Tetapkan Health criteria:
- Tetapkan Check interval ke
10
. Fungsi ini menentukan jumlah waktu dari awal satu pemeriksaan hingga awal pemeriksaan berikutnya. - Tetapkan Timeout ke
5
. Fungsi ini menentukan jumlah waktu yang dibutuhkan Google Cloud untuk menunggu respons atas penyelidikan. Nilai ini harus kurang dari atau sama dengan interval pemeriksaan. - Tetapkan Healthy threshold ke
2
. Batas ini menentukan jumlah pemeriksaan berurutan yang harus berhasil agar VM dianggap responsif. - Tetapkan Unhealthy threshold ke
3
. Batas ini menentukan jumlah pemeriksaan berurutan yang harus gagal agar VM dianggap tidak responsif.
- Tetapkan Check interval ke
Biarkan nilai default untuk opsi lainnya.
Klik Create di bagian bawah.
Buat aturan firewall untuk mengizinkan pemeriksaan health check untuk membuat permintaan HTTP.
Di konsol Google Cloud, buka halaman Create firewall rule.
Untuk Name, masukkan
default-allow-http-health-check
.Untuk Network, pilih
default
.Untuk Targets, pilih
All instances in the network
.Untuk Source filter, pilih
IPv4 ranges
.Untuk Source IPv4 ranges, masukkan
130.211.0.0/22, 35.191.0.0/16
.Di Protocols and ports, pilih TCP, lalu masukkan
80
.Biarkan nilai default untuk opsi lainnya.
Klik Create.
gcloud
Buat health check menggunakan perintah
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --region europe-west1 \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
menentukan jumlah waktu dari awal satu pemeriksaan hingga awal pemeriksaan berikutnya.timeout
menentukan jumlah waktu yang diperlukan Google Cloud untuk menunggu respons atas pemeriksaan. Nilai ini harus kurang dari atau sama dengan interval pemeriksaan.healthy-threshold
menentukan jumlah pemeriksaan berurutan yang harus berhasil agar VM dianggap responsif.unhealthy-threshold
menentukan jumlah pemeriksaan berurutan yang harus gagal agar VM dianggap tidak responsif.request-path
menunjukkan jalur HTTP yang digunakan health check. Untuk tutorial ini, server web demo menentukan jalur/health
untuk menampilkan responsHTTP 200 (OK)
saat responsif atau responsHTTP 500 (Internal Server Error)
jika tidak responsif.
Buat aturan firewall untuk mengizinkan pemeriksaan health check untuk membuat permintaan HTTP.
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Hal-hal untuk membuat health check autohealing yang baik
Health check yang digunakan untuk autohealing harus bersifat konservatif agar tidak menghapus dan membuat ulang instance secara preemptive. Jika health check autohealer terlalu agresif, autohealer mungkin salah menganggap instance yang sibuk sebagai instance yang gagal, sehingga akan memulai ulang instance tersebut secara tidak perlu sehingga mengurangi ketersediaan.
unhealthy-threshold
. Harus lebih dari1
. Idealnya, tetapkan nilai ini ke3
atau lebih. Tindakan ini akan melindungi dari kegagalan yang jarang terjadi seperti kehilangan paket jaringan.healthy-threshold
. Nilai2
sudah cukup untuk sebagian besar aplikasi.timeout
. Tetapkan nilai waktu ini ke jumlah yang banyak (lima kali atau lebih daripada waktu respons yang diharapkan). Tindakan ini memberikan perlindungan terhadap penundaan yang tidak terduga seperti instance yang sibuk atau koneksi jaringan yang lambat.check-interval
. Nilai ini harus antara 1 detik dan dua kali waktu tunggu (tidak terlalu lama atau terlalu singkat). Jika nilai terlalu panjang, instance yang gagal tidak akan segera diambil. Jika nilai terlalu pendek, instance dan jaringan bisa sangat sibuk, mengingat tingginya jumlah pemeriksaan health check yang dikirim setiap detik.
Menyiapkan layanan web
Tutorial ini menggunakan aplikasi web yang disimpan di GitHub. Jika Anda ingin mempelajari lebih lanjut cara aplikasi diimplementasikan, lihat repositori GitHub GoogleCloudPlatform/python-docs-samples.
Untuk menyiapkan layanan web demo, buat template instance yang meluncurkan server web demo saat memulai. Kemudian, gunakan template instance ini untuk men-deploy grup instance terkelola dan mengaktifkan autohealing.
Konsol
Buat template instance. Sertakan skrip startup yang memulai server web demo.
Di konsol Google Cloud, buka halaman Create instance template.
Tetapkan Name ke
webserver-template
.Di bagian Location, dari drop-down Region, pilih europe-west1.
Di bagian Machine configuration, untuk drop-down Machine type, pilih e2-medium.
Di bagian Firewall, centang kotak Izinkan traffic HTTP.
Luaskan bagian Advanced options untuk menampilkan setelan lanjutan. Beberapa subbagian akan muncul.
Di bagian Management, cari Automation dan masukkan Startup script berikut:
apt update && apt -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
Biarkan nilai default untuk opsi lainnya.
Klik Create.
Deploy server web sebagai grup instance terkelola.
Di konsol Google Cloud, buka halaman Create instance group.
Tetapkan Name ke
webserver-group
.Untuk Instance template, pilih
webserver-template
.Untuk Region, pilih
europe-west1
.Untuk Zone, pilih
europe-west1-b
.Di bagian Autoscaling, untuk Autoscaling mode, pilih Off: do not autoscale.
Scroll kembali ke kolom Number of instances dan tetapkan ke
3
.Di bagian Autohealing, lakukan hal berikut:
- Di drop-down Health check, pilih
autohealer-check
. Tetapkan Initial delay ke
180
.
- Di drop-down Health check, pilih
Biarkan nilai default untuk opsi lainnya.
Klik Create.
Buat aturan firewall yang mengizinkan permintaan HTTP ke server web.
Di konsol Google Cloud, buka halaman Create firewall rule.
Untuk Name, masukkan
default-allow-http
.Untuk Network, pilih
default
.Untuk Targets, pilih
Specified target tags
.Untuk Target Tags, masukkan
http-server
.Untuk Source filter, pilih
IPv4 ranges
.Untuk Source IPv4 ranges, masukkan
0.0.0.0/0
.Di Protocols and ports, pilih TCP, lalu masukkan
80
.Biarkan nilai default untuk opsi lainnya.
Klik Create.
gcloud
Buat template instance. Sertakan skrip startup yang memulai server web demo.
gcloud compute instance-templates create webserver-template \ --instance-template-region europe-west1 \ --machine-type e2-medium \ --tags http-server \ --metadata startup-script=' apt update && apt -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'
Membuat grup instance terkelola.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template projects/PROJECT_ID/regions/europe-west1/instanceTemplates/webserver-template \ --size 3 \ --health-check projects/PROJECT_ID/regions/europe-west1/healthChecks/autohealer-check \ --initial-delay 180
Buat aturan firewall yang mengizinkan permintaan HTTP ke server web.
gcloud compute firewall-rules create default-allow-http \ --network default \ --allow tcp:80 \ --target-tags http-server
Tunggu beberapa menit hingga grup instance terkelola membuat dan memverifikasi VM-nya.
Menyimulasikan kegagalan health check
Untuk menyimulasikan kegagalan health check, server web demo menyediakan cara bagi Anda untuk memaksakan kegagalan health check.
Konsol
Buka VM server web.
Di konsol Google Cloud, buka halaman Instance VM.
Untuk VM
webserver-group
apa pun, di kolom External IP, klik alamat IP. Tab baru akan terbuka di browser web Anda. Jika waktu permintaan habis atau halaman web tidak tersedia, tunggu sebentar hingga server menyelesaikan penyiapan dan coba lagi.
Server web demo akan menampilkan halaman yang mirip dengan halaman berikut:
Di halaman web demo, klik Make unhealthy.
Hal ini menyebabkan server web gagal dalam health check. Secara khusus, server web akan membuat jalur
/health
menampilkanHTTP 500 (Internal Server Error)
. Anda dapat memverifikasinya sendiri dengan mengklik cepat tombol Check health (tindakan ini berhenti berfungsi setelah autohealer mulai memulai ulang VM).Tunggu hingga autohealer mengambil tindakan.
Di Konsol Google Cloud, buka halaman VM instance.
Tunggu hingga status VM server web berubah. Tanda centang hijau di samping nama VM akan berubah menjadi kotak abu-abu, yang menunjukkan bahwa autohealer telah memulai ulang VM yang tidak responsif.
Klik Refresh di bagian atas halaman secara berkala untuk mendapatkan status terbaru.
Proses autohealing selesai saat kotak abu-abu berubah kembali menjadi tanda centang hijau, yang menunjukkan bahwa VM responsif kembali.
gcloud
Pantau status grup instance terkelola. (Jika sudah selesai, hentikan dengan menekan
Ctrl+C
.)while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-4qbx ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-m5v5 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR:
Semua VM dalam grup harus menampilkan
STATUS: RUNNING
danACTION: NONE
. Jika tidak, tunggu beberapa menit hingga VM selesai disiapkan dan coba lagi.Buka sesi Cloud Shell baru dengan Google Cloud CLI terinstal.
Mendapatkan alamat VM server web.
gcloud compute instances list --filter webserver-group
Di kolom
EXTERNAL_IP
, salin alamat IP VM server web apa pun dan simpan sebagai variabel bash lokal.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Verifikasi bahwa server web telah selesai disiapkan. Server menampilkan respons
HTTP 200 OK
.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn ...
Jika Anda mendapatkan error
Connection refused
, tunggu sebentar untuk membiarkan server menyelesaikan penyiapan dan mencoba lagi.Buat server web menjadi tidak responsif.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Hal ini menyebabkan server web gagal dalam health check. Secara khusus, server web akan membuat jalur
/health
menampilkanHTTP 500 INTERNAL SERVER ERROR
. Anda dapat memverifikasinya sendiri dengan membuat permintaan ke/health
secara cepat (tindakan ini berhenti berfungsi setelah autohealer memulai ulang VM).curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn ...
Kembalilah ke sesi shell pertama Anda untuk memantau grup instance terkelola dan tunggu hingga autohealer mengambil tindakan.
Saat proses autohealing dimulai, kolom
STATUS
danACTION
akan diperbarui, yang menunjukkan bahwa autohealer telah memulai ulang VM yang tidak responsif.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: STOPPING HEALTH_STATE: UNHEALTHY ACTION: RECREATING INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
Proses autohealing telah selesai saat VM kembali melaporkan
STATUS
RUNNING
danACTION
NONE
, yang menunjukkan VM berhasil dimulai ulang.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
Setelah Anda selesai memantau grup instance terkelola, hentikan dengan menekan
Ctrl+C
.
Jangan ragu untuk mengulangi latihan ini. Berikut adalah beberapa ide:
Apa yang terjadi jika Anda membuat semua VM tidak responsif sekaligus? Untuk mengetahui informasi selengkapnya tentang perilaku autohealing selama kegagalan serentak, lihat perilaku autohealing.
Dapatkah Anda memperbarui konfigurasi health check untuk memulihkan VM secepat mungkin? (Dalam praktiknya, Anda harus menetapkan parameter health check untuk menggunakan nilai konservatif seperti yang dijelaskan dalam tutorial ini. Jika tidak, Anda mungkin menghadapi risiko VM tidak sengaja terhapus dan dimulai ulang pada saat tidak ada masalah sebenarnya.)
Grup instance terkelola memiliki setelan konfigurasi
initial delay
. Dapatkah Anda menentukan penundaan minimum yang diperlukan untuk server web demo ini? (Dalam prakteknya, Anda harus menetapkan penundaan menjadi agak lebih lama (10%–20%) dari yang diperlukan VM untuk melakukan booting dan mulai melayani permintaan aplikasi. Jika tidak, VM akan berisiko terjebak dalam boot loop autohealing.)
Lihat histori autohealing (opsional)
Untuk melihat histori operasi autohealer, gunakan perintah
gcloud
berikut:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Untuk informasi selengkapnya, lihat histori tampilan operasi autohealing
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, hanya hapus resource tertentu yang dibuat dalam tutorial ini.
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
Jika Anda tidak dapat menghapus project yang digunakan untuk tutorial ini, hapus resource tutorial satu per satu.
Menghapus grup instance
konsol
- Di Konsol Google Cloud, buka halaman Instance groups.
-
Pilih kotak centang untuk grup instance
webserver-group
Anda. - Untuk menghapus grup instance, klik Hapus.
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Menghapus template instance
konsol
Di konsol Google Cloud, buka halaman Instance templates.
Klik kotak centang di samping template instance.
Klik
Delete di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
gcloud
gcloud compute instance-templates delete webserver-template -q
Menghapus health check
console
Di konsol Google Cloud, buka halaman Health checks.
Klik kotak centang di samping health check.
Klik
Delete di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
gcloud
gcloud compute health-checks delete autohealer-check -q
Menghapus aturan firewall
konsol
Di konsol Google Cloud, buka halaman Firewall rules.
Klik kotak centang di samping aturan firewall bernama
default-allow-http
dandefault-allow-http-health-check
.Klik
Delete di bagian atas halaman. Di jendela baru, klik Delete untuk mengonfirmasi penghapusan.
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q
Langkah berikutnya
- Coba tutorial lain:
- Pelajari lebih lanjut tentang grup instance terkelola.
- Pelajari lebih lanjut tentang mendesain sistem yang tangguh.
- Pelajari lebih lanjut tentang mem-build aplikasi web yang skalabel dan tangguh di Google Cloud.