Dokumen ini ditujukan untuk arsitek dan orang yang bekerja di tim operasi dan administratif. Dokumen ini menjelaskan contoh pola yang dapat digunakan untuk deployment Anda sendiri di Google Cloud.
Dalam arsitektur ini, Cloud DNS mengarahkan traffic ke instance Compute Engine dalam grup instance terkelola yang menayangkan konten. Jika terjadi pemadaman layanan, Anda memperbarui zona Cloud DNS dan beralih ke situs statis di Cloud Storage.
Untuk men-deploy solusi ini, Anda memerlukan nama domain terdaftar yang Anda kontrol dan ingin digunakan dengan dokumen ini.
Dalam deployment produksi, situs Anda mungkin berisi lebih banyak file dan kode aplikasi tambahan di virtual machine (VM) grup instance terkelola Anda daripada yang ditampilkan dalam dokumen ini. Cloud Storage kemudian menghosting versi statis yang lebih terbatas dengan fungsi minimal. Dalam skenario warm failover, pengguna melihat situs terbatas ini hingga grup instance yang dikelola pulih dan dapat menyalurkan traffic untuk pengalaman situs web sepenuhnya.
Arsitektur
Dalam arsitektur ini, Anda men-deploy resource untuk menciptakan lingkungan seperti yang ditunjukkan pada gambar berikut:
Jika perlu melakukan failover, Anda perlu memperbarui konfigurasi Cloud DNS untuk mengarahkan traffic ke Cloud Storage, seperti yang ditunjukkan pada gambar berikut:
Pola warm failover ini menyeimbangkan biaya menjalankan grup instance terkelola lainnya di region berbeda yang hanya Anda gunakan saat region utama gagal. Biaya situs statis yang menggunakan Cloud Storage lebih rendah daripada menjalankan grup instance terkelola lainnya, tetapi ada sedikit keterlambatan saat Anda mengupdate Cloud DNS di antara opsi hosting. Pengalaman situs yang terbatas di Cloud Storage lebih baik daripada situs yang sama sekali tidak tersedia dan pengalaman pelanggan yang buruk.
Untuk pendekatan alternatif yang menggunakan Load Balancer Aplikasi eksternal, bukan Cloud DNS, untuk mengontrol failover, lihat Men-deploy server web warm yang dapat dipulihkan dengan Compute Engine dan Cloud Storage. Pola ini berguna jika Anda tidak memiliki, atau tidak ingin menggunakan, Cloud DNS.
Untuk menjalankan aplikasi yang andal di Google Cloud, sebaiknya desain infrastruktur aplikasi Anda untuk menangani pemadaman layanan. Bergantung pada kebutuhan aplikasi dan bisnis, Anda mungkin memerlukan pola cold failover, warm failover, atau hot failover. Untuk mengetahui informasi selengkapnya tentang cara menentukan pendekatan terbaik untuk aplikasi Anda sendiri, lihat Panduan perencanaan pemulihan dari bencana.
Dokumen ini menggunakan server web Apache, dasar, tetapi pendekatan yang sama untuk deployment infrastruktur juga berlaku untuk lingkungan aplikasi lain yang perlu Anda buat.
Tujuan
- Membuat grup instance terkelola regional dengan gambar VM kustom.
- Membuat bucket Cloud Storage.
- Membuat dan mengonfigurasi zona Cloud DNS.
- Menguji warm failover server web dengan data Cloud DNS yang diperbarui.
- Uji pemulihan dan failover dengan data Cloud DNS yang diperbarui.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.
- 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.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Compute Engine API.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Compute Engine API.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
Anda dapat menjalankan Google Cloud CLI di Konsol Google Cloud tanpa menginstal Google Cloud CLI. Untuk menjalankan gcloud CLI di Konsol Google Cloud, gunakan Cloud Shell.
Menyiapkan lingkungan
Pada bagian ini, Anda akan menentukan beberapa variabel untuk nama dan lokasi resource. Variabel ini digunakan oleh perintah Google Cloud CLI saat Anda men-deploy resource.
Selama deployment ini, kecuali jika dinyatakan lain, Anda memasukkan semua perintah di Cloud Shell atau lingkungan pengembangan lokal Anda.
Ganti
PROJECT_ID
dengan project ID Anda. Jika diinginkan, berikan akhiran nama Anda sendiri untuk resource guna membantu menelusuri dan mengidentifikasi resource tersebut, sepertiapp
.Tentukan dua region, seperti
us-west1
danus-west2
, serta zona dalam salah satu region tersebut, sepertius-west1-a
. Zona ini menentukan tempat VM dasar awal dibuat yang digunakan untuk membuat image bagi grup instance terkelola.Terakhir, tetapkan domain yang digunakan untuk situs statis Anda, seperti
example.com
.PROJECT_ID=PROJECT_ID NAME_SUFFIX=app REGION1=us-west1 REGION2=us-west2 ZONE=us-west1-a DOMAIN=example.com
Membuat VPC dan subnet
Untuk memberikan akses jaringan ke VM, Anda harus membuat Virtual Private Cloud (VPC) dan subnet. Karena memerlukan grup instance terkelola di dua region, Anda membuat satu subnet di setiap region. Untuk mengetahui informasi selengkapnya tentang keuntungan mode subnet kustom untuk mengelola rentang alamat IP yang digunakan di lingkungan Anda, lihat Menggunakan jaringan VPC mode kustom.
Buat VPC dengan mode subnet kustom:
gcloud compute networks create network-$NAME_SUFFIX --subnet-mode=custom
Sekarang, buat dua subnet di VPC baru, satu untuk setiap region. Tentukan rentang alamat Anda sendiri, seperti
10.1.0.0/20
dan10.2.0.0/20
, yang sesuai dengan rentang jaringan Anda:gcloud compute networks subnets create \ subnet-$NAME_SUFFIX-$REGION1 \ --network=network-$NAME_SUFFIX \ --range=10.1.0.0/20 \ --region=$REGION1 gcloud compute networks subnets create \ subnet-$NAME_SUFFIX-$REGION2 \ --network=network-$NAME_SUFFIX \ --range=10.2.0.0/20 \ --region=$REGION2
Membuat aturan firewall
Agar traffic jaringan dapat mengalir dengan benar di VPC, gunakan aturan firewall.
Membuat aturan firewall untuk mengizinkan traffic web dan health check untuk load balancer dan grup instance terkelola:
gcloud compute firewall-rules create allow-http-$NAME_SUFFIX \ --network=network-$NAME_SUFFIX \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --rules=tcp:80 \ --source-ranges=0.0.0.0/0 \ --target-tags=http-server gcloud compute firewall-rules create allow-health-check-$NAME_SUFFIX \ --network=network-$NAME_SUFFIX \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp:80
Aturan HTTP mengizinkan traffic ke VM mana pun tempat tag
http-server
diterapkan, dan dari sumber mana pun yang menggunakan rentang0.0.0.0/0
. Untuk aturan health check, rentang default pada Google Cloud ditetapkan untuk memungkinkan platform memeriksa status resource dengan benar.Guna mengizinkan traffic SSH untuk konfigurasi awal image VM dasar, buat cakupan aturan firewall ke lingkungan Anda menggunakan parameter
--source-range
. Anda mungkin perlu bekerja dengan tim jaringan untuk menentukan rentang sumber yang digunakan organisasi Anda.Ganti
IP_ADDRESS_SCOPE
dengan cakupan alamat IP Anda sendiri:gcloud compute firewall-rules create allow-ssh-$NAME_SUFFIX \ --network=network-$NAME_SUFFIX \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=IP_ADDRESS_SCOPE
Setelah membuat aturan firewall, pastikan bahwa ketiga aturan tersebut telah ditambahkan:
gcloud compute firewall-rules list \ --project=$PROJECT_ID \ --filter="NETWORK=network-$NAME_SUFFIX"
Contoh output berikut menunjukkan bahwa tiga aturan telah dibuat dengan benar:
NAME NETWORK DIRECTION PRIORITY ALLOW allow-health-check-app network-app INGRESS 1000 tcp:80 allow-http-app network-app INGRESS 1000 tcp:80 allow-ssh-app network-app INGRESS 1000 tcp:22
Membuat dan mengonfigurasi image VM dasar
Untuk membuat VM identik yang di-deploy tanpa konfigurasi tambahan, gunakan image VM kustom. Gambar ini merekam konfigurasi OS dan Apache, serta digunakan untuk membuat setiap VM dalam grup instance terkelola pada langkah berikutnya.
Di VM, Anda membuat file index.html
dasar di persistent disk dan
memasangnya ke /var/www/example.com
. File konfigurasi Apache di
/etc/apache2/sites-available/example.com.conf
menyalurkan konten web dari
lokasi persistent disk yang terpasang.
Diagram berikut menunjukkan halaman HTML dasar yang disalurkan oleh Apache yang disimpan di persistent disk:
Anda membangun lingkungan ini pada langkah-langkah berikut.
Buat VM dasar dengan persistent disk yang terpasang:
gcloud compute instances create vm-base-$NAME_SUFFIX \ --zone=$ZONE \ --machine-type=n1-standard-1 \ --subnet=subnet-$NAME_SUFFIX-$REGION1 \ --tags=http-server \ --image=debian-10-buster-v20210420 \ --image-project=debian-cloud \ --boot-disk-size=10GB \ --boot-disk-type=pd-balanced \ --boot-disk-device-name=vm-base-$NAME_SUFFIX \ --create-disk=type=pd-ssd,name=disk-base-$NAME_SUFFIX,size=10GB,device-name=disk-base-$NAME_SUFFIX
Anda menggunakan parameter yang ditentukan di awal dokumen ini untuk memberi nama VM dan terhubung ke subnet yang benar. Nama juga telah ditetapkan dari parameter untuk boot disk dan disk data.
Untuk menginstal dan mengonfigurasi situs sederhana, pertama-tama hubungkan ke VM dasar menggunakan SSH:
gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE
Dalam sesi SSH ke VM, buat skrip untuk mengonfigurasi VM di editor pilihan Anda. Contoh berikut menggunakan Nano sebagai editor:
nano configure-vm.sh
Tempel skrip konfigurasi berikut ke dalam file:
#!/bin/bash NAME_SUFFIX=app # Create directory for the basic website files sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Find the disk name, then format and mount it DISK_NAME="google-disk-base-$NAME_SUFFIX" DISK_PATH="$(find /dev/disk/by-id -name "${DISK_NAME}" | xargs -I '{}' readlink -f '{}')" sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_PATH sudo mount -o discard,defaults $DISK_PATH /var/www/example.com # Install Apache sudo apt-get update && sudo apt-get -y install apache2 # Write out a basic HTML file to the mounted persistent disk sudo tee -a /var/www/example.com/index.html >/dev/null <<'EOF' <!doctype html> <html lang=en> <head> <meta charset=utf-8> <title>HA / DR example</title> </head> <body> <p>Welcome to a Compute Engine website with warm failover to Cloud Storage!</p> </body> </html> EOF # Write out an Apache configuration file sudo tee -a /etc/apache2/sites-available/example.com.conf >/dev/null <<'EOF' <VirtualHost *:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> EOF # Enable the Apache configuration file and reload service sudo a2dissite 000-default sudo a2ensite example.com.conf sudo systemctl reload apache2
Perbarui variabel
NAME_SUFFIX
agar cocok dengan nilai yang ditetapkan di awal dokumen ini, seperti app.Tulis file dan keluar dari editor Anda. Misalnya, di Nano Anda menggunakan
Ctrl-O
untuk menulis file, lalu keluar denganCtrl-X
.Jadikan skrip konfigurasi sebagai file yang dapat dieksekusi, lalu jalankan:
chmod +x configure-vm.sh ./configure-vm.sh
Keluar dari sesi SSH ke VM:
exit
Dapatkan alamat IP VM dan gunakan
curl
untuk melihat halaman web dasar:curl $(gcloud compute instances describe vm-base-$NAME_SUFFIX \ --zone $ZONE \ --format="value(networkInterfaces.accessConfigs.[0].natIP)")
Situs dasar ditampilkan, seperti yang ditunjukkan dalam contoh output berikut:
<!doctype html> <html lang=en> <head> <meta charset=utf-8> <title>HA / DR example</title> </head> <body> <p>Welcome to a Compute Engine website with warm failover to Cloud Storage!</p> </body> </html>
Langkah ini mengonfirmasi bahwa Apache dikonfigurasi dengan benar, dan halaman dimuat dari persistent disk yang terpasang. Di bagian berikut, Anda akan membuat image menggunakan VM dasar ini dan mengonfigurasi template instance dengan skrip startup.
Men-deploy resource Compute Engine
Pola warm failover menggunakan grup instance terkelola untuk menjalankan VM. Grup instance terkelola berjalan di dua region, dan setiap grup memantau kondisi VM. Jika terjadi pemadaman dan salah satu VM gagal, grup instance terkelola akan membuat ulang VM. Konfigurasi ini akan menghasilkan aplikasi yang sangat tersedia, bahkan tanpa failover warm ke situs statis di Cloud Storage.
Sebelum dapat membuat image, Anda harus menghentikan VM:
gcloud compute instances stop vm-base-$NAME_SUFFIX --zone=$ZONE
Jalankan rangkaian perintah berikut untuk membuat image VM, template instance, dan grup instance terkelola:
# Create the base VM images gcloud compute images create image-$NAME_SUFFIX \ --source-disk=vm-base-$NAME_SUFFIX \ --source-disk-zone=$ZONE gcloud compute images create image-disk-$NAME_SUFFIX \ --source-disk=disk-base-$NAME_SUFFIX \ --source-disk-zone=$ZONE # Create instance templates gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION1 \ --machine-type=n1-standard-1 \ --subnet=projects/$PROJECT_ID/regions/$REGION1/subnetworks/subnet-$NAME_SUFFIX-$REGION1 \ --region=$REGION1 \ --tags=http-server \ --metadata=^,@^startup-script=\!\#\ /bin/bash$'\n'echo\ UUID=\`blkid\ -s\ UUID\ -o\ value\ /dev/sdb\`\ /var/www/example.com\ ext4\ discard,defaults,nofail\ 0\ 2\ \|\ tee\ -a\ /etc/fstab$'\n'mount\ -a \ --image=image-$NAME_SUFFIX \ --create-disk=image=image-disk-$NAME_SUFFIX,auto-delete=yes gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION2 \ --machine-type=n1-standard-1 \ --subnet=projects/$PROJECT_ID/regions/$REGION2/subnetworks/subnet-$NAME_SUFFIX-$REGION2 \ --region=$REGION2 \ --tags=http-server \ --metadata=^,@^startup-script=\!\#\ /bin/bash$'\n'echo\ UUID=\`blkid\ -s\ UUID\ -o\ value\ /dev/sdb\`\ /var/www/example.com\ ext4\ discard,defaults,nofail\ 0\ 2\ \|\ tee\ -a\ /etc/fstab$'\n'mount\ -a \ --image=image-$NAME_SUFFIX \ --create-disk=image=image-disk-$NAME_SUFFIX,auto-delete=yes # Create a health check for VM instances gcloud compute health-checks create http http-basic-check-$NAME_SUFFIX \ --port 80 # Create the managed instance groups gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION1 \ --template=template-$NAME_SUFFIX-$REGION1 \ --size=2 \ --region=$REGION1 \ --health-check=http-basic-check-$NAME_SUFFIX gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION2 \ --template=template-$NAME_SUFFIX-$REGION2 \ --size=2 \ --region=$REGION2 \ --health-check=http-basic-check-$NAME_SUFFIX
Membuat dan mengonfigurasi load balancer
Agar pengguna dapat mengakses situs Anda, Anda harus mengizinkan traffic masuk ke VM yang berjalan di grup instance terkelola. Anda juga perlu mengalihkan traffic secara otomatis ke VM baru jika ada kegagalan zona dalam grup instance terkelola.
Di bagian berikut, Anda akan membuat load balancer HTTPS eksternal dengan layanan backend untuk traffic HTTP di port 80, menggunakan health check yang dibuat pada langkah sebelumnya, dan memetakan alamat IP eksternal ke layanan backend.
Untuk mengetahui informasi selengkapnya, lihat Cara menyiapkan load balancer HTTP eksternal sederhana.
Membuat dan mengonfigurasi load balancer untuk aplikasi Anda:
# Configure port rules for HTTP port 80 gcloud compute instance-groups set-named-ports \ instance-group-$NAME_SUFFIX-$REGION1 \ --named-ports http:80 \ --region $REGION1 gcloud compute instance-groups set-named-ports \ instance-group-$NAME_SUFFIX-$REGION2 \ --named-ports http:80 \ --region $REGION2 # Create a backend service and add the managed instance groups to it gcloud compute backend-services create \ web-backend-service-$NAME_SUFFIX \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check-$NAME_SUFFIX \ --global gcloud compute backend-services add-backend \ web-backend-service-$NAME_SUFFIX \ --instance-group=instance-group-$NAME_SUFFIX-$REGION1 \ --instance-group-region=$REGION1 \ --global gcloud compute backend-services add-backend \ web-backend-service-$NAME_SUFFIX \ --instance-group=instance-group-$NAME_SUFFIX-$REGION2 \ --instance-group-region=$REGION2 \ --global # Create a URL map for the backend service gcloud compute url-maps create web-map-http-$NAME_SUFFIX \ --default-service web-backend-service-$NAME_SUFFIX # Configure forwarding for the HTTP traffic gcloud compute target-http-proxies create \ http-lb-proxy-$NAME_SUFFIX \ --url-map web-map-http-$NAME_SUFFIX gcloud compute forwarding-rules create \ http-content-rule-$NAME_SUFFIX \ --global \ --target-http-proxy=http-lb-proxy-$NAME_SUFFIX \ --ports=80
Dapatkan alamat IP aturan penerusan untuk traffic web:
IP_ADDRESS=$(gcloud compute forwarding-rules describe http-content-rule-$NAME_SUFFIX \ --global \ --format="value(IPAddress)")
Gunakan
curl
, atau buka browser web Anda, untuk melihat situs menggunakan alamat IP load balancer dari langkah sebelumnya:curl $IP_ADDRESS
Load balancer memerlukan waktu beberapa menit untuk menyelesaikan deployment dan mengarahkan traffic ke backend dengan benar. Error HTTP 404 akan ditampilkan jika load balancer masih di-deploy. Jika perlu, tunggu beberapa menit dan coba akses situs lagi.
Situs dasar ditampilkan, seperti yang ditunjukkan dalam contoh output berikut:
<!doctype html> <html lang=en> <head> <meta charset=utf-8> <title>HA / DR example</title> </head> <body> <p>Welcome to a Compute Engine website with warm failover to Cloud Storage!</p> </body> </html>
Membuat dan mengonfigurasi bucket penyimpanan
Cloud Storage digunakan untuk menyimpan file situs statis. Dalam contoh dasar ini, Anda membuat satu file dengan teks yang sedikit berbeda dari yang ada di VM.
Dalam deployment produksi, situs Anda mungkin berisi lebih banyak file dan kode aplikasi tambahan pada VM grup instance terkelola Anda daripada yang ditunjukkan dalam dokumen ini. Versi statis yang dihosting di Cloud Storage sering kali merupakan versi yang lebih terbatas yang menyediakan fungsionalitas minimal. Dalam skenario warm failover situs terbatas dari Cloud Storage ini ditampilkan sampai grup instance terkelola pulih dan dapat menyalurkan traffic untuk pengalaman situs lengkap.
Verifikasi domain yang ingin digunakan dengan bucket Cloud Storage.
Buat bucket Cloud Storage agar sesuai dengan nama domain yang Anda miliki dan ingin digunakan:
gsutil mb gs://static-web.$DOMAIN
Variabel
DOMAIN
yang ditentukan pada awal dokumen ini digunakan, sepertiexample.com
. Contoh ini menyimpan file statis distatic-web.example.com
.Buat file lokal yang Anda salin ke bucket Cloud Storage pada langkah berikutnya:
cat <<EOF > index.html <!doctype html> <html lang=en> <head> <meta charset=utf-8> <title>HA / DR example</title> </head> <body> <p>Welcome to a test static web server with warm failover from Cloud Storage!</p> </body> </html> EOF
Upload file HTML dasar ke bucket Cloud Storage:
gsutil cp index.html gs://static-web.$DOMAIN
Untuk mengizinkan pengguna melihat konten web statis, tetapkan izin yang sesuai di bucket Cloud Storage:
gsutil iam ch allUsers:objectViewer gs://static-web.$DOMAIN
Konfigurasikan bucket Cloud Storage untuk menayangkan file
index.html
sebagai halaman web default:gsutil web set -m index.html gs://static-web.$DOMAIN
Buat zona DNS dan rekam
Untuk mengizinkan traffic diarahkan ke situs statis warm di Cloud Storage saat terjadi pemadaman layanan pada grup instance terkelola, buatlah zona Cloud DNS. Dalam kondisi normal, zona DNS ini mengarahkan traffic melalui load balancer eksternal ke grup instance terkelola yang dibuat di bagian sebelumnya.
Buat zona Cloud DNS
gcloud dns managed-zones create zone-$NAME_SUFFIX \ --dns-name=$DOMAIN \ --description="DNS zone for warm site failover"
Variabel
DOMAIN
yang ditentukan pada awal dokumen ini digunakan, sepertiexample.com
Dapatkan detail zona Cloud DNS:
gcloud dns managed-zones describe zone-$NAME_SUFFIX
Contoh output berikut menunjukkan
nameServers
untuk zona, sepertins-cloud-b1.googledomains.com
.[...] kind: dns#managedZone name: zone-app nameServers: - ns-cloud-b1.googledomains.com. - ns-cloud-b2.googledomains.com. - ns-cloud-b3.googledomains.com. - ns-cloud-b4.googledomains.com.
Cloud DNS harus bersifat otoritatif untuk domain Anda. Buat data server nama (NS) dengan registrar domain yang mengarah ke zona Cloud DNS Anda. Gunakan alamat server nama yang ditampilkan di langkah sebelumnya.
Untuk mengetahui informasi lebih lanjut dan contoh penggunaan Google Domains, lihat Cara mengupdate server nama.
Di zona Cloud DNS Anda, tambahkan data untuk
www
menggunakan alamat IP load balancer yang diperoleh di bagian sebelumnya:gcloud dns record-sets transaction start \ --zone=zone-$NAME_SUFFIX gcloud dns record-sets transaction add $IP_ADDRESS \ --name=www.$DOMAIN \ --ttl=300 \ --type=A \ --zone=zone-$NAME_SUFFIX
Data ini mengarahkan permintaan pengguna untuk situs melalui load balancer ke grup instance terkelola. TTL selama 300 detik ditetapkan untuk mengurangi panjangnya durasi data DNS yang di-cache untuk pengguna.
Buat data yang akan digunakan oleh bucket Cloud Storage untuk situs statis:
gcloud dns record-sets transaction add c.storage.googleapis.com. \ --name=static-web.$DOMAIN \ --ttl=300 \ --type=CNAME \ --zone=zone-$NAME_SUFFIX
Contoh ini menggunakan
static-web
sebagai subdomain. Tutupc.storage.googleapis.com.
Sekali lagi, TTL selama 300 detik akan disetel untuk mengurangi durasi data DNS yang di-cache untuk penggunaTerakhir, commit penambahan data DNS ke zona:
gcloud dns record-sets transaction execute \ --zone=zone-$NAME_SUFFIX
Memverifikasi dan menguji zona dan kumpulan data DNS
Mari kita tinjau deployment resource sebelum menyimulasikan kegagalan zona. Semua resource telah dibuat untuk mendukung lingkungan, seperti yang ditunjukkan pada gambar berikut:
- Data zona Cloud DNS mengarahkan pengguna ke load balancer untuk didistribusikan di seluruh VM grup instance terkelola.
- Bucket Cloud Storage dikonfigurasi untuk menghosting halaman web statis jika terjadi pemadaman layanan pada grup instance terkelola.
- Zona Cloud DNS dikonfigurasi untuk menggunakan situs statis di Cloud Storage, tetapi saat ini tidak menyelesaikan permintaan ke bucket penyimpanan.
Untuk melihat data DNS dan resolusi pengujian, Anda harus me-resolve alamat terhadap server Cloud DNS. Dalam deployment produksi, pastikan Anda menguji dan memverifikasi alamat yang di-resolve dengan benar, lalu perbarui server DNS Anda agar dapat menyelesaikan dengan benar. Dokumen ini tidak menjelaskan langkah-langkah untuk mengupdate server DNS Anda sendiri, hanya cara memverifikasi traffic alur dengan benar dalam kondisi normal dan failover.
Dapatkan lagi detail zona Cloud DNS:
gcloud dns managed-zones describe zone-$NAME_SUFFIX
Contoh output berikut menunjukkan
nameServers
untuk zona, sepertins-cloud-b1.googledomains.com
.[...] kind: dns#managedZone name: zone-app nameServers: - ns-cloud-b1.googledomains.com. - ns-cloud-b2.googledomains.com. - ns-cloud-b3.googledomains.com. - ns-cloud-b4.googledomains.com.
Untuk menyelesaikan data
www
untuk zona Cloud DNS terhadap salah satu server nama berikut, gunakan perintahdig
:dig @ns-cloud-b1.googledomains.com www.$DOMAIN
Contoh ini menggunakan alamat server nama
ns-cloud-b1.googledomains.com
yang ditampilkan dari perintahdescribe
sebelumnya. Berikan alamat server nama Anda sendiri yang ditunjukkan di output perintah sebelumnyaContoh output berikut menunjukkan bahwa data diselesaikan ke alamat IP load balancer. Jika Anda menggunakan server nama ini untuk mengakses alamat, seperti menggunakan parameter
curl
dan--resolve
dengan server nama Cloud DNS, halaman default akan ditampilkan dari salah satu server terkelola grup instance di balik load balancer.; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @ns-cloud-b1.googledomains.com www.example.com ; (1 server found) [...] ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 300 IN A 35.227.253.90
Gunakan perintah
dig
lagi untuk memverifikasi data DNS untuk situs statis di Cloud Storage:dig @ns-cloud-b1.googledomains.com static-web.$DOMAIN
Contoh output berikut menunjukkan bahwa data me-resolve ke Cloud Storage yang dapat menyalurkan konten statis dari bucket penyimpanan:
; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @ns-cloud-b1.googledomains.com static-web.example.com ; (1 server found) [...] ;; QUESTION SECTION: ;static-web.example.com. IN A ;; ANSWER SECTION: static-web.example.com. 300 IN CNAME c.storage.googleapis.com.
Gagal membuka bucket Cloud Storage
Dalam lingkungan produksi, Anda mungkin mendapatkan pemberitahuan menggunakan Cloud Monitoring atau solusi pemantauan lainnya saat ada masalah dengan grup instance terkelola. Pemberitahuan ini akan meminta manusia memahami cakupan kegagalan sebelum Anda memperbarui data Cloud DNS untuk mengalihkan traffic ke situs statis yang dihosting Cloud Storage. Pendekatan alternatifnya adalah menggunakan solusi pemantauan untuk merespons pemadaman layanan secara otomatis dengan grup instance terkelola.
Jika Anda melakukan failover, Cloud DNS akan menyelesaikan traffic ke situs statis yang dihosting Cloud Storage, seperti yang ditunjukkan pada gambar berikut:
Saat Anda atau solusi pemantauan Anda menentukan tindakan yang paling sesuai adalah memperbarui data Cloud DNS untuk mengarahkan traffic ke Cloud Storage, perbarui data A
DNS yang ada. Dalam dokumen ini, Anda akan memperbarui data Cloud DNS secara manual untuk mengalihkan traffic ke situs statis yang dihosting Cloud Storage.
Untuk menggagalkan data Cloud DNS, hapus data
A
yang ada yang di-resolve ke load balancer:gcloud dns record-sets transaction start \ --zone=zone-$NAME_SUFFIX gcloud dns record-sets transaction remove $IP_ADDRESS \ --name=www.$DOMAIN \ --ttl=300 \ --type=A \ --zone=zone-$NAME_SUFFIX
Buat data
CNAME
untukwww
yang mengarah ke konten yang dihosting Cloud Storage:gcloud dns record-sets transaction add static-web.$DOMAIN \ --name=www.$DOMAIN. \ --ttl=30 \ --type=CNAME \ --zone=zone-$NAME_SUFFIX
Commit update ke zona Cloud DNS:
gcloud dns record-sets transaction execute \ --zone=zone-$NAME_SUFFIX
Gunakan perintah
dig
untuk mengonfirmasi bahwa datawww
kini di-resolve ke alamat situs statis Cloud Storage:dig @ns-cloud-b1.googledomains.com www.$DOMAIN
Contoh output berikut menunjukkan bahwa data
www.example.com
di-resolve menjadi data CNAME untuk situs statis Cloud Storage. Permintaan untuk mengakseswww.example.com
dialihkan ke bucket Cloud Storage, yang menampilkan situs statis:; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @ns-cloud-b1.googledomains.com www.example.com ; (1 server found) [...] ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 30 IN CNAME static-web.example.com. static-web.example.com. 300 IN CNAME c.storage.googleapis.com.
Gagal kembali ke grup instance terkelola
Setelah masalah pada grup instance terkelola teratasi, Anda dapat gagal kembali menyajikan konten dari grup instance terkelola yang di-load balanced dengan memperbarui data Cloud DNS lagi. Sekali lagi, manusia mungkin membuat keputusan ini menggunakan insight Cloud Monitoring untuk kondisi grup instance terkelola. Atau, Anda dapat menggunakan otomatisasi untuk merespons kondisi grup instance terkelola yang pulih. Dalam dokumen ini, Anda memperbarui data Cloud DNS secara manual.
Jika Anda gagal kembali, Cloud DNS akan me-resolve lagi traffic ke grup instance terkelola, seperti yang ditunjukkan pada gambar berikut:
Hapus data CNAME
www
yang mengalihkan traffic ke konten yang dihosting Cloud Storage:gcloud dns record-sets transaction start \ --zone=zone-$NAME_SUFFIX gcloud dns record-sets transaction remove static-web.$DOMAIN \ --name=www.$DOMAIN \ --ttl=30 \ --type=CNAME \ --zone=zone-$NAME_SUFFIX
Tambahkan data
A
untuk diarahkan ke load balancer di depan grup instance terkelola lagi:gcloud dns record-sets transaction add $IP_ADDRESS \ --name=www.$DOMAIN \ --ttl=300 \ --type=A \ --zone=zone-$NAME_SUFFIX
Commit update ke zona Cloud DNS:
gcloud dns record-sets transaction execute \ --zone=zone-$NAME_SUFFIX
Gunakan perintah
dig
sekali lagi untuk mengonfirmasi bahwa datawww
telah diselesaikan ke alamat load balancer di depan grup instance terkelola lagi:dig @ns-cloud-b1.googledomains.com www.$DOMAIN
Contoh output berikut menunjukkan bahwa data diselesaikan ke alamat IP load balancer dan traffic akan disalurkan dari salah satu grup instance terkelola:
; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @ns-cloud-b1.googledomains.com www.example.com ; (1 server found) [...] ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 300 IN A 35.227.253.90
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Untuk menghapus masing-masing resource yang dibuat dalam dokumen ini, selesaikan langkah-langkah berikut:
Hapus zona DNS dan data:
touch empty-file gcloud dns record-sets import -z zone-$NAME_SUFFIX \ --delete-all-existing \ empty-file rm empty-file gcloud dns managed-zones delete zone-$NAME_SUFFIX
Hapus bucket Cloud Storage:
gsutil rm -r gs://static-web.$DOMAIN
Hapus konfigurasi load balancer:
gcloud compute forwarding-rules delete \ http-content-rule-$NAME_SUFFIX --global --quiet gcloud compute target-http-proxies delete \ http-lb-proxy-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet gcloud compute backend-services delete \ web-backend-service-$NAME_SUFFIX --global --quiet
Hapus grup instance terkelola dan health check:
gcloud compute instance-groups managed delete \ instance-group-$NAME_SUFFIX-$REGION1 \ --region=$REGION1 --quiet gcloud compute instance-groups managed delete \ instance-group-$NAME_SUFFIX-$REGION2 \ --region=$REGION2 --quiet gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet
Hapus template instance, image, VM dasar, dan persistent disk:
gcloud compute instance-templates delete \ template-$NAME_SUFFIX-$REGION1 --quiet gcloud compute instance-templates delete \ template-$NAME_SUFFIX-$REGION2 --quiet gcloud compute images delete image-$NAME_SUFFIX --quiet gcloud compute images delete image-disk-$NAME_SUFFIX --quiet gcloud compute instances delete vm-base-$NAME_SUFFIX \ --zone=$ZONE --quiet
Hapus aturan Firewall
gcloud compute firewall-rules delete \ allow-health-check-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete \ allow-ssh-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete \ allow-http-$NAME_SUFFIX --quiet
Hapus subnet dan VPC.
gcloud compute networks subnets delete \ subnet-$NAME_SUFFIX-$REGION1 --region=$REGION1 --quiet gcloud compute networks subnets delete \ subnet-$NAME_SUFFIX-$REGION2 --region=$REGION2 --quiet gcloud compute networks delete network-$NAME_SUFFIX --quiet
Langkah selanjutnya
- Untuk pendekatan alternatif yang menggunakan Load Balancer Aplikasi eksternal, bukan Cloud DNS, untuk mengontrol failover, lihat Men-deploy server web warm yang dapat dipulihkan dengan Compute Engine dan Cloud Storage. Pola ini berguna jika Anda tidak memiliki, atau tidak ingin menggunakan, Cloud DNS.
- Untuk mempelajari cara menentukan pendekatan terbaik untuk aplikasi Anda sendiri dan metode pemulihan yang akan digunakan, lihat Panduan perencanaan pemulihan dari bencana.
- Untuk melihat pola lain pada aplikasi, seperti failover cold dan hot, lihat Skenario pemulihan dari bencana (disaster recovery) untuk aplikasi.
- Untuk mengetahui cara lainnya dalam menangani skala dan ketersediaan, lihat Pola untuk aplikasi yang skalabel dan tangguh.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.