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

    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.

    Go to project selector

    Make sure that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the API

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Make sure that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the API

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.

Arsitektur sistem untuk health check dan 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

  1. Membuat health check.

    1. Di konsol Google Cloud, buka halaman Create health check.

      Buka Create health check

    2. Di kolom Name, masukkan autohealer-check.

    3. Tetapkan Scope ke Regional.

    4. Di drop-down Region, pilih europe-west1.

    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 VM dianggap responsif.
      4. Tetapkan Unhealthy threshold ke 3. Batas ini menentukan jumlah pemeriksaan berurutan yang harus gagal agar VM dianggap tidak responsif.
    8. Biarkan nilai default untuk opsi lainnya.

    9. 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 IPv4 ranges.

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

    7. Di Protocols and ports, pilih TCP, lalu masukkan 80.

    8. Biarkan nilai default untuk opsi lainnya.

    9. Klik Create.

gcloud

  1. 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 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 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 Create instance template.

      Buka Create instance template

    2. Tetapkan Name ke webserver-template.

    3. Di bagian Location, dari drop-down Region, pilih europe-west1.

    4. Di bagian Machine configuration, untuk drop-down Machine type, pilih e2-medium.

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

    6. Luaskan bagian Advanced options untuk menampilkan setelan lanjutan. Beberapa subbagian akan muncul.

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

    8. Biarkan nilai default untuk opsi lainnya.

    9. Klik Create.

  2. Deploy server web sebagai grup instance terkelola.

    1. Di konsol Google Cloud, buka halaman Create instance group.

      Buka Buat grup instance

    2. Tetapkan Name ke webserver-group.

    3. Untuk Instance template, pilih webserver-template.

    4. Untuk Region, pilih europe-west1.

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

    6. Di bagian Autoscaling, untuk Autoscaling mode, pilih Off: do not autoscale.

    7. Scroll kembali ke kolom Number of instances dan tetapkan ke 3.

    8. Di bagian Autohealing, lakukan hal berikut:

      1. Di drop-down Health check, pilih autohealer-check.
      2. Tetapkan Initial delay ke 180.

    9. Biarkan nilai default untuk opsi lainnya.

    10. 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 IPv4 ranges.

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

    8. Di Protocols and ports, pilih TCP, lalu masukkan 80.

    9. Biarkan nilai default untuk opsi lainnya.

    10. Klik Create.

gcloud

  1. 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'
    
  2. 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
    
  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
    

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

  1. Buka VM server web.

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

      Buka instance VM

    2. 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:

    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 VM).

  3. Tunggu hingga autohealer mengambil tindakan.

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

      Buka instance VM

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

    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 VM responsif kembali.

gcloud

  1. 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 dan ACTION: NONE. Jika tidak, tunggu beberapa menit hingga VM selesai disiapkan dan coba lagi.

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

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

    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 VM).

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

    1. Saat proses autohealing dimulai, kolom STATUS dan ACTION 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:
      
        ...
      
    2. Proses autohealing telah selesai saat VM kembali melaporkan STATUS RUNNING dan ACTION 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:
      
        ...
      
    3. 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the 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. In the Google Cloud console, go to the Instance groups page.

    Go to Instance groups

  2. Select the checkbox for your webserver-group instance group.
  3. To delete the instance group, click Delete.

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

console

  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 berikutnya