Codelab Pengoptimalan Load Balancing Lanjutan

Codelab Pengoptimalan Load Balancing Lanjutan

Tentang codelab ini

subjectTerakhir diperbarui Okt 31, 2023
account_circleDitulis oleh Tianmin Zou

1. Pengantar

Selamat datang di codelab pengoptimalan load balancing lanjutan.

Dalam codelab ini, Anda akan mempelajari cara mengonfigurasi opsi load balancing lanjutan untuk load balancer aplikasi eksternal global. Sebelum memulai, sebaiknya baca dokumen tentang load balancing cloud terlebih dahulu ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)

c3fb1d3f027e8640.png

Gambar 1. Alur kerja memilih endpoint tujuan dengan load balancer aplikasi eksternal global.

Topologi Codelab dan kasus penggunaan

2f7368df335d3de9.png

Gambar 2. Topologi Pemilihan Rute Load Balancer HTTP

Selama codelab ini, Anda akan menyiapkan dua grup instance terkelola. Anda akan membuat load balancer https eksternal global. Load balancer akan menggunakan beberapa fitur dari daftar kemampuan lanjutan yang didukung oleh load balancer berbasis envoy. Setelah di-deploy, Anda akan membuat beberapa simulasi beban dan memverifikasi bahwa konfigurasi yang Anda tetapkan berfungsi dengan semestinya.

Yang akan Anda pelajari

  • Cara mengonfigurasi ServiceLbPolicy untuk menyesuaikan load balancer.

Yang Anda butuhkan

2. Sebelum memulai

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

Aktifkan API

Mengaktifkan semua layanan yang diperlukan

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.googleapis.com

3. Membuat jaringan VPC

Membuat jaringan VPC

Dari Cloud Shell

gcloud compute networks create httplbs --subnet-mode=auto

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

Membuat aturan firewall VPC

Setelah membuat VPC, sekarang Anda akan membuat aturan firewall. Aturan firewall akan digunakan untuk mengizinkan semua IP mengakses IP eksternal situs aplikasi pengujian di port 80 untuk traffic http.

Dari Cloud Shell

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

Output

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

Dalam codelab ini, kita akan menyesuaikan kondisi VM. Jadi, kita juga akan membuat aturan firewall untuk mengizinkan SSH.

Dari Cloud Shell

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

Output

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

4. Menyiapkan Grup Instance Terkelola

Anda perlu menyiapkan Grup Instance Terkelola yang menyertakan pola untuk resource backend yang digunakan oleh Load Balancer HTTP. Pertama, kita akan membuat Template Instance yang menentukan konfigurasi untuk VM yang akan dibuat untuk setiap region. Selanjutnya, untuk backend di setiap region, kita akan membuat Grup Instance Terkelola yang mereferensikan Template Instance.

Grup Instance terkelola dapat memiliki cakupan Zona atau Regional. Untuk latihan lab ini, kita akan membuat Grup Instance Terkelola zonal.

Di bagian ini, Anda dapat melihat skrip startup yang telah dibuat sebelumnya yang akan dirujuk saat pembuatan instance. Skrip startup ini menginstal dan mengaktifkan kemampuan server web yang akan kita gunakan untuk menyimulasikan aplikasi web. Silakan pelajari skrip ini.

Membuat Template Instance

Langkah pertama adalah membuat template instance.

Dari Cloud Shell

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

Output

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

Sekarang Anda dapat memverifikasi bahwa template instance berhasil dibuat dengan perintah gcloud berikut:

Dari Cloud Shell

gcloud compute instance-templates list

Output

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

Membuat Grup Instance

Sekarang kita harus membuat grup instance terkelola dari template instance yang telah kita buat sebelumnya.

Dari Cloud Shell

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-a-mig  us-east1-a  zone   us-east1-a-mig       0     1            test-template      no

Dari Cloud Shell

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-b-mig  us-east1-b  zone   us-east1-b-mig       0     5            test-template      no

Kita dapat memverifikasi bahwa grup instance berhasil dibuat dengan perintah gcloud berikut:

Dari Cloud Shell

gcloud compute instance-groups list

Output

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

Memverifikasi Fungsi Server Web

Setiap instance dikonfigurasi untuk menjalankan server web Apache dengan skrip PHP sederhana yang merender sesuatu seperti di bawah ini:

Halaman disajikan dari: us-east1-a-mig-ww2h

Untuk memastikan server web Anda berfungsi dengan benar, buka Compute Engine -> Instance VM. Pastikan instance baru Anda (misalnya, us-east1-a-mig-xxx) telah dibuat sesuai dengan definisi grup instance-nya.

Sekarang, buat permintaan web di browser Anda untuk memastikan server web berjalan (proses ini mungkin memerlukan waktu satu menit untuk dimulai). Di halaman VM instances pada bagian Compute Engine, pilih instance yang dibuat oleh grup instance Anda, lalu klik External (public) IP-nya.

Atau, di browser, buka http://<IP_Address>

5. Menyiapkan Load Balancer

Membuat Health Check

Pertama, kita harus membuat health check dasar untuk memastikan bahwa layanan kita aktif dan berjalan dengan sukses. Kita akan membuat health check dasar, ada banyak penyesuaian lanjutan yang tersedia.

Dari Cloud Shell

gcloud compute health-checks create http http-basic-check \
    --port 80

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

Mencadangkan Alamat IP Eksternal

Untuk langkah ini, Anda harus mencadangkan alamat IP statis yang tersedia secara global yang nantinya akan ditambahkan ke Load Balancer.

Dari Cloud Shell

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

Pastikan untuk mencatat Alamat IP yang dicadangkan.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

Membuat Layanan Backend

Sekarang kita harus membuat layanan backend untuk grup instance terkelola yang telah kita buat sebelumnya.

Dari Cloud Shell

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

Menambahkan MIG ke Layanan Backend

Setelah membuat layanan backend, sekarang kita harus menambahkan Grup Instance Terkelola yang dibuat sebelumnya ke setiap layanan backend.

Dari Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

Dari Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

Anda dapat memastikan bahwa backend telah ditambahkan dengan menjalankan perintah berikut.

Dari Cloud Shell

gcloud compute backend-services list

Output

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

Membuat Peta URL

Sekarang kita akan membuat peta URL.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

Membuat HTTP Frontend

Langkah terakhir dalam membuat load balancer adalah membuat frontend. Tindakan ini akan memetakan alamat IP yang Anda pesan sebelumnya ke peta URL load balancer yang Anda buat.

Dari Cloud Shell

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv].
NAME               URL_MAP
http-lb-proxy-adv  web-map-http

Selanjutnya, Anda perlu membuat aturan penerusan global yang akan memetakan alamat IP yang dicadangkan sebelumnya ke proxy HTTP.

Dari Cloud Shell

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

Pada tahap ini, Anda dapat mengonfirmasi bahwa load balancer berfungsi dengan alamat IP yang Anda catat sebelumnya.

6. Memverifikasi bahwa Load Balancer Berfungsi

Untuk memverifikasi bahwa fitur load balancing berfungsi, Anda perlu membuat beberapa beban. Untuk melakukannya, kita akan membuat VM baru untuk menyimulasikan beban.

Membuat Siege-vm

Sekarang Anda akan membuat siege-vm yang akan digunakan untuk menghasilkan beban

Dari Cloud Shell

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east1-a \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

Output

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

Selanjutnya, Anda dapat menggunakan SSH ke VM yang Anda buat. Setelah dibuat, klik SSH untuk meluncurkan terminal dan terhubung.

Setelah terhubung, jalankan perintah berikut untuk membuat beban. Gunakan alamat IP yang Anda cadangkan sebelumnya untuk load balancer http eksternal.

Dari Cloud Shell

siege -c 20 http://$lb-ipv4-2

Output

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Memeriksa Distribusi Beban

Setelah Siege berjalan, saatnya memeriksa apakah traffic didistribusikan secara merata ke dua grup instance terkelola.

Stop the Siege

Setelah Anda menunjukkan bahwa pemisahan traffic lanjutan berfungsi, sekarang saatnya menghentikan pengepungan. Untuk melakukannya, kembali ke terminal SSH siege-vm dan tekan CTRL+C untuk menghentikan siege yang sedang berjalan.

7. Mengonfigurasi Kebijakan LB Layanan

Membuat Kebijakan LB Layanan

Setelah setelan dasar selesai, kita akan membuat Kebijakan LB Layanan dan mencoba fitur lanjutan. Sebagai contoh, kita akan mengonfigurasi layanan untuk menggunakan beberapa setelan load balancing lanjutan. Dalam contoh ini, kita hanya akan membuat kebijakan untuk menggunakan fitur pengosongan kapasitas otomatis. Tetapi jangan ragu untuk mencoba fitur lainnya.

Dari Cloud Shell

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

Kita dapat memverifikasi bahwa kebijakan berhasil dibuat dengan perintah gcloud berikut:

Dari Cloud Shell

gcloud beta network-services service-lb-policies list --location=global

Output

NAME
http-policy

Melampirkan Kebijakan LB Layanan ke layanan backend

Sekarang kami akan melampirkan kebijakan baru ke layanan backend yang ada di atas.

Dari Cloud Shell

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. Menyesuaikan Kesehatan Backend

Pada tahap ini, kebijakan lb layanan baru telah diterapkan ke layanan backend Anda. Jadi, secara teknis Anda dapat langsung melakukan pembersihan. Namun sebagai bagian dari codelab, kita juga akan melakukan beberapa penyesuaian produksi tambahan untuk menunjukkan cara kerja kebijakan baru ini kepada Anda.

Fitur pengosongan kapasitas otomatis akan otomatis menghapus MIG backend dari load balancer saat jumlah total backend yang sehat turun di bawah batas tertentu (25%). Untuk menguji fitur ini, kita akan menggunakan SSH untuk terhubung ke VM di us-east1-b-mig dan membuatnya tidak sehat. Dengan nilai minimum 25%, Anda harus melakukan SSH ke empat VM dan menonaktifkan server Apache.

Untuk melakukannya, pilih empat VM dan SSH ke VM tersebut dengan mengklik SSH untuk meluncurkan terminal dan terhubung. Lalu jalankan perintah berikut.

sudo apachectl stop

Pada tahap ini, fitur pengurasan kapasitas otomatis akan dipicu dan us-east1-b-mig tidak akan mendapatkan permintaan baru.

9. Memastikan bahwa Fitur Pengosongan Kapasitas Otomatis Berfungsi

Memulai Ulang Siege

Untuk memverifikasi fitur baru, kita akan menggunakan kembali VM pengepungan. Mari kita gunakan SSH ke VM yang Anda buat di langkah sebelumnya. Setelah dibuat, klik SSH untuk meluncurkan terminal dan terhubung.

Setelah terhubung, jalankan perintah berikut untuk membuat beban. Gunakan alamat IP yang Anda cadangkan sebelumnya untuk load balancer http eksternal.

Dari Cloud Shell

siege -c 20 http://$lb-ipv4-2

Output

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Pada tahap ini, Anda akan melihat bahwa semua permintaan dikirim ke us-east1-a-mig.

Stop the Siege

Setelah Anda menunjukkan bahwa pemisahan traffic lanjutan berhasil, saatnya untuk menghentikan pengepungan. Untuk melakukannya, kembali ke terminal SSH siege-vm dan tekan CTRL+C untuk menghentikan siege yang sedang berjalan.

10. Langkah-langkah pembersihan

Setelah selesai dengan lingkungan lab, sekarang saatnya untuk menghapusnya. Jalankan perintah berikut untuk menghapus lingkungan pengujian.

Dari Cloud Shell

gcloud compute instances delete siege-vm --zone=us-east1-a

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv

gcloud compute url-maps delete web-map-http

gcloud compute backend-services delete east-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a
gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b

gcloud compute instance-templates delete test-template 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

11. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Membuat load balancer aplikasi eksternal dengan kebijakan lb layanan.
  • Konfigurasikan layanan backend Anda dengan fitur pengosongan kapasitas otomatis.

Langkah berikutnya

  • Coba fitur lain yang disediakan oleh kebijakan lb layanan.