Tutorial ini menunjukkan cara menyiapkan infrastruktur alat Autoscaler untuk Spanner. Tutorial ini menunjukkan dua cara untuk menyiapkan infrastruktur, sesuai dengan persyaratan Anda:
- Topologi deployment per project. Kami merekomendasikan topologi ini untuk tim independen yang ingin mengelola konfigurasi dan infrastruktur Autoscaler mereka sendiri. Topologi deployment per project juga merupakan titik awal yang baik untuk menguji kemampuan Autoscaler.
- Topologi deployment terpusat. Kami merekomendasikan topologi ini untuk tim yang mengelola konfigurasi dan infrastruktur satu atau beberapa instance Spanner sekaligus menyimpan komponen dan konfigurasi untuk Autoscaler di tempat terpusat. Dalam topologi terpusat, selain project Autoscaler, Anda menyiapkan project kedua, yang dalam tutorial ini disebut sebagai Project aplikasi. Project Aplikasi menyimpan resource aplikasi, termasuk Spanner. Anda akan menyiapkan dan mengaktifkan penagihan dan API untuk dua project ini secara terpisah dalam tutorial ini.
Dokumen ini adalah bagian dari rangkaian:
- Spanner penskalaan otomatis
- Men-deploy alat Autoscaler per project atau terpusat untuk Spanner (dokumen ini)
- Men-deploy alat Autoscaler terdistribusi untuk Spanner
Seri ini ditujukan untuk tim IT, Operasi, dan Site Reliability Engineering (SRE) yang ingin mengurangi overhead operasional dan mengoptimalkan biaya penempatan Spanner.
Tujuan
- Men-deploy Autoscaler menggunakan topologi deployment per project atau terpusat.
- Mengimpor instance Spanner yang ada ke status Terraform.
- Konfigurasi Autoscaler.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Biaya yang terkait dengan pengoperasian komponen Autoscaler saat Anda menerapkan tutorial ini harus nol atau mendekati nol. Namun, estimasi ini tidak mencakup biaya untuk instance Spanner. Untuk contoh cara menghitung biaya instance Spanner, lihat Melakukan penskalaan otomatis Spanner.
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
-
In the Google Cloud console, activate Cloud Shell.
Di Cloud Shell, clone repositori GitHub berikut:
git clone https://github.com/cloudspannerecosystem/autoscaler
Mengekspor variabel untuk direktori kerja tempat file konfigurasi Terraform untuk setiap topologi berada:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
Menyiapkan project Autoscaler
Di bagian ini, Anda akan menyiapkan project Autoscaler untuk di-deploy.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, Cloud Build, and Cloud Scheduler APIs.
Di Cloud Shell, tetapkan variabel lingkungan dengan ID project Autoscaler Anda:
export PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${PROJECT_ID}"
Tetapkan region dan zona serta lokasi App Engine (untuk Cloud Scheduler dan Firestore untuk infrastruktur Autoscaler:
export REGION=us-central1 export ZONE=us-central1-c export APP_ENGINE_LOCATION=us-central
Buat akun layanan yang akan digunakan Terraform untuk membuat semua resource di infrastruktur Anda:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Berikan peran pemilik project (
roles/owner
) ke akun layanan:gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Buat file kunci akun layanan:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Jika project Anda belum memiliki instance Firestore, buat instance:
gcloud app create --region="${APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
Menyiapkan project Aplikasi
Jika men-deploy Autoscaler dalam mode per project, Anda dapat langsung ke bagian Men-deploy Autoscaler.
Dalam topologi deployment terpusat, semua komponen Autoscaler berada dalam project yang sama. Instance Spanner dapat berada di project yang berbeda.
Di bagian ini, Anda akan mengonfigurasi project Aplikasi tempat instance Spanner berada. Instance Spanner menayangkan satu atau beberapa aplikasi tertentu. Dalam tutorial ini, tim yang bertanggung jawab atas aplikasi ini diasumsikan terpisah dari tim yang bertanggung jawab atas infrastruktur dan konfigurasi Autoscaler.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Spanner API.
Di Cloud Shell, tetapkan variabel lingkungan:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
Ganti INSERT_YOUR_APP_PROJECT_ID dengan ID project Aplikasi.
Berikan peran pemilik (
roles/owner
) kepada akun layananterraformer
yang Anda buat di project Aplikasi:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Dengan memberikan peran ini ke akun layanan, akun layanan tersebut dapat membuat resource.
Tetapkan project ID Aplikasi di variabel lingkungan Terraform yang sesuai:
export TF_VAR_app_project_id="${APP_PROJECT_ID}"
Men-deploy Autoscaler
Di bagian ini, Anda akan men-deploy komponen yang membentuk Autoscaler menggunakan modul Terraform yang telah dikonfigurasi sebelumnya. File Terraform yang menentukan modul ini berada di direktori berikut:
Direktori | Konten direktori |
---|---|
terraform/ |
Konfigurasi tingkat teratas, yang mencakup setiap opsi deployment dan modul yang dapat digunakan kembali. |
terraform/cloud-functions/per-project/ |
Petunjuk untuk opsi deployment per project. |
terraform/modules/autoscaler-functions/ |
Konfigurasi fungsi Cloud Run Poller dan Scaler, serta topik Pub/Sub |
terraform/modules/scheduler/ |
Konfigurasi Cloud Scheduler untuk memicu polling. |
terraform/modules/spanner/ |
Konfigurasi database Spanner |
terraform/cloud-functions/centralized/ |
Petunjuk untuk opsi deployment terpusat. |
Di Cloud Shell, tetapkan project ID, region, dan zona di variabel lingkungan Terraform yang sesuai:
export TF_VAR_project_id="${PROJECT_ID}" export TF_VAR_region="${REGION}" export TF_VAR_zone="${ZONE}"
Pada langkah ini, Anda menyiapkan instance yang ada untuk dipantau Autoscaler, atau membuat dan menyiapkan instance baru.
Jika Anda sudah memiliki instance Spanner, tetapkan nama instance dalam variabel berikut:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Jika Anda ingin membuat instance Spanner baru untuk menguji Autoscaler, tetapkan variabel berikut:
export TF_VAR_terraform_spanner=true
Instance Spanner yang dibuat Terraform bernama
autoscale-test
.Untuk mengetahui informasi selengkapnya tentang cara menyiapkan Terraform untuk mengelola instance Spanner, lihat Mengimpor instance Spanner.
Ubah direktori kerja Anda menjadi direktori per project Terraform:
cd "${AUTOSCALER_DIR}" terraform init
Perintah ini juga melakukan inisialisasi direktori per project Terraform.
Mengimpor aplikasi App Engine yang ada ke status Terraform:
terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
Buat infrastruktur Autoscaler:
terraform apply -parallelism=2
Anda akan melihat pesan berikut yang meminta Anda memverifikasi bahwa daftar resource yang akan dibuat Terraform sudah benar:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Setelah Anda memverifikasi resource, ketik
yes
saat diminta.Saat menjalankan perintah ini di Cloud Shell, Anda mungkin melihat pesan error berikut:
"Error: cannot assign requested address"
Error ini adalah masalah umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:
terraform apply -parallelism=1.
Mengimpor instance Spanner
Jika Anda sudah memiliki instance Spanner yang ingin diimpor agar Terraform dapat mengelolanya, ikuti petunjuk di bagian ini. Jika tidak, lanjutkan ke Mengonfigurasi Autoscaler.
Di Cloud Shell, cantumkan instance Spanner Anda:
gcloud spanner instances list
Tetapkan variabel berikut dengan nama instance yang ingin Anda skalakan secara otomatis:
SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
Buat file konfigurasi Terraform dengan resource
google_spanner_instance
kosong:echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
Impor instance Spanner ke status Terraform:
terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
Setelah impor selesai, perbarui file konfigurasi Terraform untuk instance Anda dengan atribut instance yang sebenarnya:
terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \ | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \ > "${SPANNER_INSTANCE_NAME}.tf"
Jika Anda memiliki instance Spanner tambahan untuk diimpor, ulangi proses impor.
Mengonfigurasi Autoscaler
Setelah men-deploy Autoscaler, Anda akan mengonfigurasi parameternya.
Di konsol Google Cloud, buka halaman Cloud Scheduler.
Centang kotak di samping tugas
poll-main-instance-metrics
yang dibuat oleh deployment Autoscaler.Klik Edit.
Ubah parameter untuk Autoscaler yang ditampilkan di kolom payload.
Berikut adalah contoh payload:
[ { "projectId": "my-spanner-project", "instanceId": "spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "NODES", "minSize": 1, "maxSize": 3 },{ "projectId": "different-project", "instanceId": "another-spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "PROCESSING_UNITS", "minSize": 500, "maxSize": 3000, "scalingMethod": "DIRECT" } ]
Payload ditentukan menggunakan array JSON. Setiap elemen dalam array mewakili instance Spanner yang memiliki jadwal tugas Autoscaler yang sama.
Untuk mengetahui detail selengkapnya tentang parameter dan nilai defaultnya, lihat
README
untuk komponen Poller.Untuk menyimpan perubahan, klik Perbarui.
Autoscaler kini telah dikonfigurasi dan siap untuk mulai memantau dan menskalakan instance Anda dalam tugas terjadwal berikutnya yang dijalankan.
Jika ada error sintaksis dalam payload JSON, Anda dapat memeriksanya di konsol Google Cloud pada halaman Logs Explorer sebagai entri log dari fungsi
tf-poller-function
.Berikut adalah contoh error yang mungkin Anda lihat:
SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse
Untuk menghindari error sintaksis, gunakan editor yang dapat memformat ulang dan memvalidasi JSON.
Memantau Autoscaler
Pada langkah ini, Anda akan menyiapkan pemantauan pada fungsi Cloud Run Poller dan Scaler.
Di konsol Google Cloud, buka halaman Logs Explorer.
Klik Pratinjau kueri dan masukkan filter berikut ke dalam Query builder:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Klik Run Query.
Di bagian Hasil kueri, Anda dapat melihat semua pesan dari fungsi Autoscaler. Karena polling hanya berjalan setiap 2 menit, Anda mungkin perlu menjalankan ulang kueri untuk menerima pesan log.
Untuk hanya melihat pesan dari fungsi Cloud Run Scaler, klik kotak Pratinjau kueri dan ganti filter sebelumnya di kotak teks Pembuat kueri dengan kode berikut:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klik Run Query.
Di bagian Hasil kueri, karena filter yang diterapkan ke payload teks, Anda hanya melihat pesan dari fungsi Scaler yang terkait dengan saran dan keputusan penskalaan.
Dengan menggunakan kueri filter atau filter serupa, Anda dapat membuat metrik berbasis log. Metrik ini berguna untuk fungsi seperti mencatat frekuensi peristiwa penskalaan otomatis, atau dalam kebijakan pemberitahuan dan diagram Cloud Monitoring.
Menguji Autoscaler
Di bagian ini, Anda akan memverifikasi operasi Autoscaler dengan mengubah ukuran instance minimum dan memantau log.
Saat Anda men-deploy Autoscaler dengan database pengujian, Autoscaler dikonfigurasi untuk menggunakan
NODES
sebagai unit untuk kapasitas komputasi. Anda dapat memverifikasi apakah
alat berfungsi dengan mengubah setelan untuk ukuran minimum (minSize
)
menjadi 2. Jika alat berjalan seperti yang diharapkan, instance Spanner akan diskalakan
ke 2 node. Jika menggunakan database yang ada untuk tutorial ini, Anda mungkin melihat
nilai yang berbeda.
Di konsol Google Cloud, buka halaman Cloud Scheduler.
Centang kotak di samping tugas
poll-main-instance-metrics
yang dibuat oleh deployment Autoscaler.Klik Edit.
Di kolom Job payload, ubah nilai
minSize
dari1
menjadi2
:"minSize": 2
Untuk menyimpan perubahan, klik Perbarui.
Buka halaman Logs Explorer.
Klik Pratinjau kueri dan masukkan filter berikut ke dalam Query builder:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klik Run Query.
Klik Langsung ke Sekarang hingga Anda melihat pesan log berikut:
Scaling spanner instance to 2 NODES
Untuk memverifikasi bahwa Spanner telah diskalakan ke 2 node, di konsol Google Cloud, buka halaman konsol Spanner.
Klik instance
autoscale-test
.Di bagian ringkasan, pastikan jumlah node sekarang 2. Pengujian cepat ini menunjukkan peristiwa penskalaan keluar dengan mengubah parameter Autoscaler. Anda dapat melakukan pengujian beban dengan alat seperti YCSB untuk menyimulasikan Autoscaler yang memicu peristiwa penskalaan berdasarkan penggunaan.
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.
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah selanjutnya
- Baca Arsitektur Autoscaler.
- Baca cara men-deploy Autoscaler dalam mode terdistribusi.
- Baca selengkapnya tentang nilai minimum yang direkomendasikan Spanner.
- Baca selengkapnya tentang Metrik penggunaan CPU dan Metrik latensi Spanner.
- Baca selengkapnya tentang praktik terbaik desain skema Spanner.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.