Menggunakan autohealing untuk aplikasi dengan ketersediaan tinggi


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 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 pada grup instance terkelola.
  • Menyimulasikan kegagalan health check dan saksikan proses pemulihan autohealing.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih termasuk:

  • Compute Engine

Sebelum memulai

    Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.

    Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

    Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

    Enable the Compute Engine API.

    Enable the API

    Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

    Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

    Enable the Compute Engine API.

    Enable the API

Jika Anda lebih suka bekerja dari command line, instal Google Cloud CLI.

  • Menginstal Google Cloud CLI.
  • Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init

Arsitektur aplikasi

Aplikasi ini mencakup komponen Compute Engine berikut:

  • Health check: kebijakan health check HTTP yang digunakan oleh autohealer untuk mendeteksi instance VM yang gagal.
  • Aturan firewall: Aturan firewall Google Cloud dapat digunakan untuk mengizinkan atau menolak traffic ke instance Anda.
  • Grup instance terkelola: Grup instance yang menjalankan layanan web demo yang sama.
  • Template instance: Template yang digunakan untuk membuat setiap instance dalam grup instance.

Arsitektur sistem untuk health check dan grup instance.

Cara health check memeriksa layanan web demo

Health check mengirimkan permintaan pemeriksaan ke instance menggunakan protokol yang ditentukan, seperti HTTP(S), SSL, atau TCP. Untuk mengetahui informasi selengkapnya, lihat cara kerja health check serta 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. 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. Dalam tutorial ini, Anda akan membuat health check global.

Konsol

  1. Membuat health check.

    1. Di konsol Google Cloud, buka halaman Health checks.

      Buka Health checks

    2. Klik Create health check.

    3. Di kolom Name, masukkan autohealer-check.

    4. Tetapkan Scope ke Global. Untuk autohealing, Anda dapat menggunakan health check regional atau global.

    5. Untuk Protocol, pilih HTTP.

    6. 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 respons HTTP 200 (OK) saat responsif atau respons HTTP 500 (Internal Server Error) saat tidak responsif.

    7. Tetapkan Health criteria:

      1. Tetapkan Check interval ke 10. Fungsi ini menentukan jumlah waktu dari awal satu pemeriksaan hingga awal pemeriksaan berikutnya.
      2. 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.
      3. Tetapkan Healthy threshold ke 2. Batas ini menentukan jumlah pemeriksaan berurutan yang harus berhasil agar instance dianggap responsif.
      4. Tetapkan Unhealthy threshold ke 3. Batas ini menentukan jumlah pemeriksaan berurutan yang harus gagal agar instance dianggap tidak responsif.
    8. Klik Create di bagian bawah.

  2. Buat aturan firewall untuk mengizinkan pemeriksaan health check untuk membuat permintaan HTTP.

    1. Di konsol Google Cloud, buka halaman Create firewall rule.

      Buka Create firewall rule

    2. Untuk Name, masukkan default-allow-http-health-check.

    3. Untuk Network, pilih default.

    4. Untuk Targets, pilih All instances in the network.

    5. Untuk Source filter, pilih IP ranges.

    6. Untuk Source IP ranges, masukkan 130.211.0.0/22 dan 35.191.0.0/16.

    7. Di bagian Protocols and ports, pilih tcp lalu masukkan 80.

    8. Klik Create.

gcloud

  1. Buat health check global menggunakan perintah health-checks create http.

    gcloud compute health-checks create http autohealer-check \
        --global \
        --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 instance dianggap responsif.
    • unhealthy-threshold menentukan jumlah pemeriksaan berurutan yang harus gagal agar instance dianggap tidak responsif.
    • request-path menunjukkan jalur HTTP yang digunakan health check. Untuk tutorial ini, server web demo menentukan jalur /health untuk menampilkan respons HTTP 200 (OK) saat responsif atau respons HTTP 500 (Internal Server Error) jika tidak responsif.
  2. 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 dari 1. Idealnya, tetapkan nilai ini ke 3 atau lebih. Tindakan ini akan melindungi dari kegagalan yang jarang terjadi seperti kehilangan paket jaringan.
  • healthy-threshold. Nilai 2 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 tentang 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

  1. Buat template instance. Sertakan skrip startup yang memulai server web demo.

    1. Di konsol Google Cloud, buka halaman Instance templates.

      Buka Instance templates

    2. Klik Create instance template.

    3. Tetapkan Name ke webserver-template.

    4. Untuk Machine configuration, pilih micro (e2-micro).

    5. Di bagian Firewall, centang kotak Allow HTTP traffic.

    6. Klik Management, security, disks, networking, sole tenancy untuk membuka setelan lanjutan. Beberapa tab akan muncul.

    7. Di tab Management, cari Automation dan masukkan Skrip startup 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
      

    8. Klik Create.

  2. Deploy server web sebagai grup instance terkelola.

    1. Di konsol Google Cloud, buka halaman Instance groups.

      Buka Instance groups

    2. Klik Create grup instance.

    3. Tetapkan Name ke webserver-group.

    4. Untuk Region, pilih europe-west1.

    5. Untuk Zone, pilih europe-west1-b.

    6. Untuk Instance template, pilih webserver-template.

    7. Untuk Autoscaling, pilih Don't autoscale.

    8. Tetapkan Number of instances ke 3.

    9. Untuk Health check, pilih autohealer-check.

    10. Tetapkan Initial delay ke 90.

    11. Klik Create.

  3. Buat aturan firewall yang mengizinkan permintaan HTTP ke server web.

    1. Di konsol Google Cloud, buka halaman Create firewall rule.

      Buka Create firewall rule

    2. Untuk Name, masukkan default-allow-http.

    3. Untuk Network, pilih default.

    4. Untuk Targets, pilih Specified target tags.

    5. Untuk Target Tags, masukkan http-server.

    6. Untuk Source filter, pilih IP ranges.

    7. Untuk Source IP ranges, masukkan 0.0.0.0/0.

    8. Di bagian Protocols and ports, pilih tcp lalu masukkan 80.

    9. Klik Create.

gcloud

  1. Buat template instance. Sertakan skrip startup yang memulai server web demo.

    gcloud compute instance-templates create webserver-template \
        --machine-type e2-micro \
        --tags http-server \
        --metadata startup-script='
      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'
    
  2. Buat grup instance.

    gcloud compute instance-groups managed create webserver-group \
        --zone europe-west1-b \
        --template webserver-template \
        --size 3 \
        --health-check autohealer-check \
        --initial-delay 90
    
  3. 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
    

Menyimulasikan kegagalan health check

Untuk menyimulasikan kegagalan health check, server web demo menyediakan cara bagi Anda untuk memaksakan kegagalan health check.

Konsol

  1. Buka instance server web.

    1. Di Konsol Google Cloud, buka halaman VM instance.

      Buka VM instance

    2. Di kolom External IP, klik alamat IP untuk instance webserver-group apa pun. 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:

    Halaman web demo yang menampilkan tombol status hijau dan tombol tindakan biru.

  2. Di halaman web demo, klik Make unhealthy.

    Hal ini menyebabkan server web gagal dalam health check. Secara khusus, server web akan membuat jalur /health menampilkan HTTP 500 (Internal Server Error). Anda dapat memverifikasinya sendiri dengan mengklik cepat tombol Check health (tindakan ini berhenti berfungsi setelah autohealer mulai memulai ulang instance).

  3. Tunggu hingga autohealer mengambil tindakan.

    1. Di Konsol Google Cloud, buka halaman VM instance.

      Buka VM instance

    2. Tunggu hingga status instance server web berubah. Tanda centang hijau di samping nama instance akan berubah menjadi kotak abu-abu, yang menunjukkan bahwa autohealer telah memulai ulang instance yang tidak responsif.

    3. Klik Refresh di bagian atas halaman secara berkala untuk mendapatkan status terbaru.

    4. Proses autohealing selesai saat kotak abu-abu berubah kembali menjadi tanda centang hijau, yang menunjukkan bahwa instance responsif kembali.

gcloud

  1. Pantau status grup instance. (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                 ZONE            STATUS   ACTION  INSTANCE_TEMPLATE   VERSION_NAME  LAST_ERROR
    webserver-group-d5tz  europe-west1-b  RUNNING  NONE    webserver-template
    webserver-group-q6t9  europe-west1-b  RUNNING  NONE    webserver-template
    webserver-group-tbpj  europe-west1-b  RUNNING  NONE    webserver-template
    

    Jika ada instance yang menampilkan status selain RUNNING, misalnya STAGING, tunggu beberapa saat sampai instance selesai disiapkan, lalu coba lagi.

  2. Buka sesi Cloud Shell baru dengan Google Cloud CLI terinstal.

  3. Mendapatkan alamat instance server web.

    gcloud compute instances list --filter webserver-group
    

    Di kolom EXTERNAL_IP, salin alamat IP instance server web apa pun dan simpan sebagai variabel bash lokal.

    export IP_ADDRESS=EXTERNAL_IP_ADDRESS
    
  4. 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/19.6.0
    ...
    

    Jika Anda mendapatkan error Connection refused, tunggu sebentar untuk membiarkan server menyelesaikan penyiapan dan mencoba lagi.

  5. 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 menampilkan HTTP 500 INTERNAL SERVER ERROR. Anda dapat memverifikasinya sendiri dengan membuat permintaan ke /health secara cepat (tindakan ini berhenti berfungsi setelah autohealer memulai ulang instance).

    curl --head $IP_ADDRESS/health
    
    HTTP/1.1 500 INTERNAL SERVER ERROR
    Server: gunicorn/19.6.0
    ...
    
  6. Kembalilah ke sesi shell pertama Anda untuk memantau grup instance dan tunggu hingga autohealer mengambil tindakan.

    1. Saat proses autohealing dimulai, kolom STATUS dan ACTION akan diperbarui, yang menunjukkan bahwa autohealer telah memulai ulang instance yang tidak responsif.

      NAME                 ZONE            STATUS    ACTION      INSTANCE_TEMPLATE   VERSION_NAME  LAST_ERROR
      webserver-group-d5tz  europe-west1-b  RUNNING   NONE        webserver-template
      webserver-group-q6t9  europe-west1-b  RUNNING   NONE        webserver-template
      webserver-group-tbpj  europe-west1-b  STOPPING  RECREATING  webserver-template
      
    2. Proses autohealing telah selesai saat instance kembali melaporkan STATUS RUNNING dan ACTION NONE, yang menunjukkan instance berhasil dimulai ulang.

      NAME                 ZONE            STATUS   ACTION  INSTANCE_TEMPLATE   VERSION_NAME  LAST_ERROR
      webserver-group-d5tz  europe-west1-b  RUNNING  NONE    webserver-template
      webserver-group-q6t9  europe-west1-b  RUNNING  NONE    webserver-template
      webserver-group-tbpj  europe-west1-b  RUNNING  NONE    webserver-template
      
    3. Setelah Anda selesai memantau grup instance, hentikan dengan menekan Ctrl+C.

Jangan ragu untuk mengulangi latihan ini. Berikut adalah beberapa ide:

  • Apa yang terjadi jika Anda membuat semua instance tidak responsif sekaligus? Untuk mengetahui informasi selengkapnya tentang perilaku autohealing selama kegagalan serentak, lihat perilaku autohealing.

  • Dapatkah Anda memperbarui konfigurasi health check untuk memulihkan instance 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 instance tidak sengaja terhapus dan dimulai ulang pada saat tidak ada masalah sungguhan.)

  • Grup instance memiliki setelan konfigurasi initial delay. Dapatkah Anda menentukan penundaan minimum yang diperlukan untuk server web demo ini? (Dalam praktiknya, Anda harus menetapkan penundaan menjadi agak lebih lama (10%–20%) dari yang diperlukan instance untuk melakukan booting dan mulai melayani permintaan aplikasi. Jika tidak, Anda akan menghadapi risiko instance 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

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. 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

  1. Di Konsol Google Cloud, buka halaman Instance groups.

    Buka Instance groups

  2. Pilih kotak centang untuk grup instance webserver-group Anda.
  3. Untuk menghapus grup instance, klik Hapus.

gcloud

gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q

Menghapus template instance

konsol

  1. Di konsol Google Cloud, buka halaman Instance templates.

    Buka Instance templates

  2. Klik kotak centang di samping template instance.

  3. 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

konsol

  1. Di konsol Google Cloud, buka halaman Health checks.

    Buka Health checks

  2. Klik kotak centang di samping health check.

  3. 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

  1. Di konsol Google Cloud, buka halaman Firewall rules.

    Buka Firewall rules

  2. Klik kotak centang di samping aturan firewall bernama default-allow-http dan default-allow-http-health-check.

  3. 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 selanjutnya