Menyiapkan load balancing lintas region untuk server web Microsoft IIS


Tutorial ini menjelaskan cara menggunakan Load Balancer Aplikasi eksternal untuk mendistribusikan traffic ke server web Microsoft Internet Information Services (IIS) yang berjalan di VM Compute Engine yang disediakan di region yang berbeda.

Tujuan

Tutorial ini menunjukkan cara melakukan load balancing traffic untuk situs www.example.com dan memastikan bahwa:

  • Permintaan masuk dirutekan ke region terdekat.
  • Jika sebuah instance gagal atau mencapai kapasitasnya, load balancer akan merutekan permintaan ke instance lain yang responsif di region yang sama atau berbeda.

Konfigurasi untuk skenario ini menggunakan Load Balancer Aplikasi eksternal yang mengambil permintaan melalui satu alamat IP global. Alamat IP ini dapat merutekan setiap permintaan masuk berdasarkan jenis koneksi—yaitu, HTTP atau HTTPS. Untuk permintaan HTTPS, load balancer menerapkan enkripsi SSL/TLS antara klien yang mengirim permintaan dan load balancer.

Diagram berikut menunjukkan arsitektur load balancer:

Load balancing lintas region

Perhatikan bahwa load balancer mencakup beberapa komponen untuk konfigurasi maksimum. Untuk deskripsi tentang fungsi setiap komponen, lihat Ringkasan Load Balancer Aplikasi Eksternal.

Tutorial ini menunjukkan cara menyelesaikan tugas berikut untuk mencapai tujuan Anda:

  • Menyiapkan backend instance.
  • Membuat dan mengonfigurasi layanan load balancing.
  • Mengirim traffic ke backend.
  • Membatasi akses ke backend.
  • Menyimulasikan pemadaman layanan.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Compute Engine virtual machine (VM) instances
  • Compute Engine persistent disks
  • Optional: Google-managed SSL certificate
  • Windows Server 2016 machine images

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

  9. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Anda juga dapat menggunakan Cloud Shell di Konsol Google Cloud untuk berinteraksi dengan Google Cloud, yang dalam hal ini Anda tidak perlu menginstal Google Cloud CLI.
  13. Instal klien Remote Desktop Protocol (RDP). Untuk informasi selengkapnya, lihat Klien Microsoft Remote Desktop. Jika klien RDP sudah terinstal, Anda dapat melewati tugas ini.
  14. Tentukan zona dan region tempat Anda ingin menyediakan resource. Diagram arsitektur menunjukkan resource yang di-deploy di berbagai zona di Amerika Serikat dan Uni Eropa. Deployment ini hanya sebagai referensi. Anda dapat men-deploy resource di region/zona mana pun yang Anda inginkan.
  15. Opsional: Baca dan pahami Ringkasan Load Balancer Aplikasi Eksternal.

Menyiapkan backend instance

Di bagian ini, Anda akan membuat dua layanan backend di region berbeda. Setiap layanan backend berisi dua backend instance, yang masing-masing menjalankan server web Microsoft IIS di Windows Server 2016. Untuk menghindari konfigurasi manual yang rumit dari setiap server, buat disk image dari satu instance server, lalu gunakan image ini untuk membuat instance server satunya.

Membuat dan mengonfigurasi instance Compute Engine

Untuk membuat instance yang akan digunakan sebagai image sumber:

Dari Google Cloud Marketplace, luncurkan instance Windows Server 2016 yang menjalankan Microsoft IIS di Compute Engine di zona pilihan Anda, lalu siapkan aturan firewall untuk mengizinkan traffic HTTP, HTTPS, dan RDP eksternal ke instance image sumber Anda:

  1. Di Konsol Google Cloud, buka halaman Cloud Marketplace ASP.NET Framework.

    Buka Cloud Marketplace

  2. Klik Launch.

  3. Di kolom Deployment name, masukkan src-img.

  4. Di kolom Zone, pilih zona tempat Anda ingin men-deploy image.

  5. Di kolom Windows Server OS Version, pilih 2016.

  6. Di bagian Networking - Firewall, hanya pilih opsi berikut:

    • Allow HTTP traffic
    • Allow HTTPS traffic
    • Allow RDP traffic

  7. Setujui persyaratan layanan, lalu klik Deploy.

  8. Tunggu hingga instance Compute Engine dibuat.

Mengonfigurasi instance image sumber

Untuk mengonfigurasi instance image sumber baru, buat pengguna Windows baru pada instance image sumber, lalu buat koneksi RDP:

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

    Buka VM instances

  2. Klik nama instance image sumber (src-img).

  3. Klik Set Windows password.

  4. Pada dialog Set new Windows password, tambahkan nama pengguna Anda, lalu klik Set untuk membuat akun pengguna di instance Anda.

  5. Salin sandi yang diberikan dan tutup dialog.

  6. Klik menu dropdown RDP, lalu pilih opsi Download the RDP file guna mendownload file RDP untuk instance Anda. Gunakan file ini untuk terhubung ke instance menggunakan klien RDP. Untuk informasi selengkapnya, lihat Klien Microsoft Remote Desktop.

Setelah Anda membuat koneksi RDP dengan instance image sumber, tambahkan halaman beranda default di direktori web default IIS:

  1. Di instance image sumber, buka PowerShell sebagai administrator.

  2. Buat halaman beranda baru di direktori web IIS default C:\inetpub\wwwroot:

    Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
    

Memverifikasi bahwa instance image sumber dapat menayangkan konten

Di Konsol Google Cloud, buka halaman VM instances.

Buka VM instances

Klik alamat IP eksternal instance untuk memverifikasi bahwa halaman beranda yang Anda buat sebelumnya ditayangkan.

Membuat image Windows Server 2016 yang dapat digunakan kembali dari instance image sumber

Setelah memverifikasi bahwa instance image sumber telah dikonfigurasi dengan benar dan dapat menayangkan konten, buat disk image yang dapat digunakan kembali dari persistent disk root instance:

  1. Di instance image sumber, buka PowerShell sebagai administrator.
  2. Jalankan perintah berikut untuk menyiapkan proses cloning sistem Anda:

    GCESysprep
    

    Setelah operasi GCESysprep selesai, koneksi Anda akan otomatis terputus dari sesi RDP.

  3. Di mesin lokal, jalankan perintah berikut untuk menghapus instance sumber dengan tetap mempertahankan persistent disk root-nya:

    gcloud compute instances delete src-img \
       --keep-disks=boot \
       --zone=INSTANCE_ZONE
    

    Ganti INSTANCE_ZONE dengan zona instance sumber Anda.

  4. Setelah instance dihapus, buat image baru dari persistent disk root yang Anda pertahankan:

    gcloud compute images create win-be-img \
       --source-disk=src-img \
       --source-disk-zone=IMAGE_ZONE
    

    Ganti IMAGE_ZONE dengan zona tempat Anda ingin membuat image sumber.

Membuat template instance menggunakan image sumber

Gunakan disk image dari server Windows yang telah Anda konfigurasi sebagai image sumber untuk template instance. Nanti, Anda akan mengonfigurasi dua grup instance terkelola agar dapat menggunakan template ini untuk instance baru.

Di komputer lokal, jalankan perintah berikut untuk membuat template instance yang menggunakan win-be-img sebagai image sumber serta rdp-tag dan www-tag sebagai tag instance:

gcloud compute instance-templates create win-be-tmpl \
    --tags=rdp-tag,www-tag \
    --image=win-be-img

Membuat grup instance terkelola untuk setiap region

Di setiap region, buat grup instance terkelola. Setelah Anda membuat setiap grup instance, grup tersebut akan otomatis diisi dengan dua instance yang identik berdasarkan template instance yang Anda tentukan sebelumnya. Nanti, Anda akan mengonfigurasi load balancer untuk memperlakukan grup instance ini sebagai target backend.

Untuk membuat grup instance terkelola:

  1. Di komputer lokal, jalankan perintah berikut untuk membuat grup instance terkelola baru di zona tempat Anda membuat image dan otomatis mengisinya dengan dua instance identik:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \
       --base-instance-name=BASE_INSTANCE_NAME_1 \
       --size=2 \
       --zone=ZONE_1 \
       --template=win-be-tmpl
    

    Ganti kode berikut:

    • MANAGED_INSTANCE_GROUP_NAME_1: nama instance terkelola
    • BASE_INSTANCE_NAME_1: nama instance dasar
    • ZONE_1: zona tempat Anda ingin men-deploy instance terkelola
  2. Buat grup instance terkelola di zona kedua:

    gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \
       --base-instance-name=BASE_INSTANCE_NAME_2 \
       --size=2 \
       --zone=ZONE_2 \
       --template=win-be-tmpl
    

    Ganti kode berikut:

    • MANAGED_INSTANCE_GROUP_NAME_2: nama instance terkelola
    • BASE_INSTANCE_NAME_2: nama instance dasar
    • ZONE_2: zona tempat Anda ingin men-deploy instance terkelola

Memastikan backend instance berjalan

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

    Buka VM instances

  2. Klik alamat IP eksternal setiap backend untuk memverifikasi bahwa backend menayangkan halaman beranda yang Anda buat sebelumnya.

Membuat dan mengonfigurasi layanan load balancing

Layanan load balancing Compute Engine mencakup beberapa komponen. Di bagian ini, Anda akan membuat komponen tersebut dan menghubungkannya bersama-sama.

  1. Di komputer lokal, jalankan perintah berikut untuk membuat health check baru. Load balancer menggunakan health check ini untuk memeriksa responsivitas backend instance:

    gcloud compute http-health-checks create basic-check
    
  2. Buat layanan backend:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --protocol=HTTP \
      --http-health-checks=basic-check \
      --global
    

    Ganti BACKEND_SERVICE_NAME dengan nama untuk layanan backend.

  3. Tambahkan grup instance Anda sebagai target backend untuk layanan backend Anda:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \
       --instance-group-zone=ZONE_1
    
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \
       --instance-group-zone=ZONE_2
    
  4. Buat peta URL default yang mengarahkan semua permintaan masuk ke semua instance Anda:

    gcloud compute url-maps create lb-map \
       --default-service=BACKEND_SERVICE_NAME
    
  5. Buat resource sertifikat SSL. Load balancer menggunakan resource ini untuk mengenkripsi dan mendekripsi traffic.

    Jika sudah memiliki kunci pribadi dan sertifikat SSL dari certificate authority, Anda dapat menggunakannya untuk membuat resource SSLCertificate baru dengan menjalankan perintah berikut. Jika belum, Anda dapat membuat dan menggunakan sertifikat SSL yang dikelola Google atau sertifikat yang ditandatangani sendiri untuk pengujian. Untuk informasi selengkapnya, lihat Sertifikat SSL.

    Jalankan perintah berikut untuk membuat resource sertifikat SSL:

    gcloud compute ssl-certificates create www-cert \
       --certificate CRT_FILE_PATH \
       --private-key KEY_FILE_PATH
    

    Ganti kode berikut:

    • CRT_FILE_PATH: jalur file lokal sertifikat
    • KEY_FILE_PATH: jalur file kunci pribadi
  6. Buat proxy HTTP dan HTTPS target untuk merutekan permintaan ke peta URL. Proxy ini merupakan bagian dari load balancer yang menampung sertifikat SSL untuk load balancing HTTPS, sehingga Anda juga memuat sertifikat pada langkah ini:

    gcloud compute target-http-proxies create http-lb-proxy \
       --url-map=lb-map
    
    gcloud compute target-https-proxies create https-lb-proxy \
       --url-map lb-map \
       --ssl-certificate SSL_CERT
    

    Ganti SSL_CERT berdasarkan pertimbangan berikut:

    • Jika Anda telah membuat resource SSLCertificate dengan sertifikat SSL dan kunci pribadi, ganti SSL_CERT dengan www-cert.
    • Jika Anda menggunakan sertifikat SSL yang dikelola Google atau yang ditandatangani sendiri, ganti SSL_CERT dengan nama sertifikat Anda.
  7. Agar load balancer dapat menerima traffic dengan andal, Anda perlu menetapkan alamat IP statis global ke aturan penerusan global load balancer.

    Untuk membuat resource alamat IP statis global, jalankan perintah berikut:

    gcloud compute addresses create lb-ip \
       --global \
       --network-tier=PREMIUM
    

    Catat alamat IP-nya.

  8. Buat dua aturan penerusan global untuk menangani permintaan HTTP dan HTTPS yang masuk. Setiap aturan penerusan mengirimkan traffic ke salah satu proxy target yang Anda buat, bergantung pada alamat IP, protokol IP, dan port yang ditentukan.

    • Untuk Load Balancer Aplikasi eksternal global, gunakan perintah gcloud CLI dengan load-balancing-scheme=EXTERNAL_MANAGED. Setelan ini menawarkan kapabilitas pengelolaan traffic tingkat lanjut.
    • Untuk Load Balancer Aplikasi klasik, gunakan load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create http-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-http-proxy=http-lb-proxy \
       --ports=80
    
    gcloud compute forwarding-rules create https-fwd-rule \
       --load-balancing-scheme=LOAD_BALANCING_SCHEME \
       --network-tier=PREMIUM \
       --address=lb-ip \
       --global \
       --target-https-proxy=https-lb-proxy \
       --ports=443
    

Setelah membuat aturan penerusan global, diperlukan waktu beberapa menit untuk menerapkan konfigurasi Anda. Untuk memeriksa progres penerapan, Anda dapat memantau konfigurasi di Konsol Google Cloud atau menjalankan perintah berikut di komputer lokal:

gcloud compute backend-services get-health BACKEND_SERVICE_NAME

Mengirim traffic ke backend

Setelah mengonfigurasi layanan load balancing, Anda dapat mulai mengirimkan traffic ke aturan penerusan dan melihat traffic tersebut disebar ke berbagai instance.

Kirim traffic ke backend Anda sebagai berikut:

  1. Di Konsol Google Cloud, buka halaman Load balancing.

    Buka Load balancing

  2. Pilih tab Frontends.

  3. Untuk melihat halaman beranda default, klik alamat IP di kolom Address.

Membatasi akses ke backend

Setelah memastikan bahwa semuanya berfungsi sebagaimana mestinya, ubah aturan firewall Anda sehingga traffic HTTP atau HTTPS hanya dapat berasal dari layanan load balancing Anda:

  1. Di Konsol Google Cloud, buka halaman Firewall.

    Buka Firewall

  2. Klik nama aturan firewall yang mengizinkan akses eksternal ke port tcp:80.

  3. Klik Edit untuk mengedit aturan firewall.

  4. Di kolom Source IPv4 ranges, hapus nilai 0.0.0.0/0 dan masukkan 130.211.0.0/22. Tindakan ini akan membatasi IP sumber yang diizinkan aturan firewall ke rentang 130.211.0.0/22, yang merupakan rentang IP health check load balancing HTTPS.

  5. Klik Simpan.

  6. Di Konsol Google Cloud, buka halaman VM instances.

    Buka VM instances

  7. Klik alamat IP eksternal setiap instance untuk memverifikasi bahwa instance tersebut kini tidak dapat diakses.

Menyimulasikan pemadaman layanan

Untuk mengetahui bagaimana beban diseimbangkan di antara instance yang responsif, Anda dapat menyimulasikan pemadaman layanan untuk satu atau beberapa instance di sebuah region.

Untuk menghentikan instance menerima permintaan tambahan:

  1. Buat koneksi RDP ke instance.
  2. Pada instance tersebut, buka PowerShell sebagai administrator.
  3. Jalankan perintah berikut untuk membuat aturan firewall baru pada instance. Perintah ini memblokir traffic health check dari health checker dan mencegah semua koneksi HTTP baru dari load balancer ke instance:

    netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
    
  4. Di mesin lokal, jalankan perintah berikut untuk memverifikasi bahwa instance kini melaporkan status UNHEALTHY:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    
  5. Setelah instance mulai melaporkan status UNHEALTHY, kirim permintaan ke load balancer. Hanya instance responsif yang akan merespons.

  6. Setelah selesai menyimulasikan pemadaman layanan, Anda dapat memulihkan konektivitas instance dengan menghapus aturan firewall. Setelah membuka PowerShell sebagai administrator di instance yang tidak responsif, jalankan perintah berikut untuk menghapus aturan:

    netsh advfirewall firewall delete rule name="Outage Test"
    

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.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

Anda harus menghapus semua resource yang dibuat untuk project ini satu per satu (image, template instance, grup instance, health check, layanan backend, peta URL, proxy http, alamat, aturan penerusan). Anda tidak dapat menghapus instance VM sebelum menjalankan perintah berikut.

Jalankan perintah berikut di komputer lokal guna menghapus resource yang dibuat untuk tutorial ini:

  1. Menghapus aturan penerusan HTTP/S:
    gcloud compute forwarding-rules delete https-fwd-rule --global
    
    gcloud compute forwarding-rules delete http-fwd-rule --global
    
  2. Menghapus alamat IP statis global:
    gcloud compute addresses delete lb-ip --global
    
  3. Menghapus proxy HTTP/S:
    gcloud compute target-https-proxies delete https-lb-proxy
    
    gcloud compute target-http-proxies delete http-lb-proxy
    
  4. Menghapus sertifikat SSL:
    gcloud compute ssl-certificates delete SSL_CERT
    
  5. Menghapus peta URL:
    gcloud compute url-maps delete lb-map
    
  6. Menghapus layanan backend:
    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
    
  7. Menghapus health check HTTP:
    gcloud compute http-health-checks delete basic-check
    
  8. Menghapus grup instance terkelola:
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
    
    gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
    
  9. Menghapus template instance:
    gcloud compute instance-templates delete win-be-tmpl
    
  10. Hapus gambar:
    gcloud compute images delete IMAGE_NAME
  11. Hapus disk:
    gcloud compute disks delete DISK_NAME

Langkah berikutnya