Tutorial ini menunjukkan cara menyiapkan infrastruktur alat Autoscaler untuk Spanner. Tutorial ini menunjukkan dua cara untuk menyiapkan infrastruktur, sesuai dengan kebutuhan 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 serta menyimpan komponen dan konfigurasi untuk Autoscaler di satu tempat. 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. Dalam tutorial ini, Anda dapat menyiapkan dan mengaktifkan penagihan dan API untuk kedua project ini secara terpisah.
Dokumen ini adalah bagian dari rangkaian:
- Penskalaan Otomatis Spanner
- Men-deploy alat Autoscaler per project atau terpusat untuk Spanner (dokumen ini)
- Men-deploy alat Autoscaler terdistribusi untuk Spanner
Rangkaian ini ditujukan untuk tim IT, Operasi, dan Site Reliability Engineering (SRE) yang ingin mengurangi overhead operasional dan mengoptimalkan biaya deployment Spanner.
Tujuan
- Men-deploy Autoscaler menggunakan topologi deployment per project atau terpusat.
- Impor instance Spanner yang ada ke status Terraform.
- Konfigurasikan Autoscaler.
Biaya
Dalam dokumen ini, Anda 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 mengetahui contoh cara menghitung biaya instance Spanner, lihat 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
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di Cloud Shell, clone repositori GitHub berikut:
git clone https://github.com/cloudspannerecosystem/autoscaler
Ekspor 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 menyiapkan project Autoscaler untuk deployment.
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
Make sure that billing is enabled for your Google Cloud project.
Aktifkan API Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Functions, Cloud Build, and Cloud Scheduler.
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 untuk Terraform yang akan digunakan guna membuat semua resource di infrastruktur Anda:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Berikan peran project owner (
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 akan men-deploy Autoscaler dalam mode per project, Anda dapat langsung ke Men-deploy Autoscaler.
Dalam topologi deployment terpusat, semua komponen Autoscaler berada dalam project yang sama. Instance Spanner dapat ditempatkan di project berbeda.
Di bagian ini, Anda akan mengonfigurasi project Aplikasi tempat instance Spanner Anda berada. Instance Spanner melayani satu atau beberapa aplikasi tertentu. Dalam tutorial ini, tim yang bertanggung jawab atas aplikasi ini dianggap terpisah dari tim yang bertanggung jawab atas infrastruktur dan konfigurasi Autoscaler.
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
Make sure that billing is enabled for your Google Cloud project.
Aktifkan API Spanner .
Di Cloud Shell, tetapkan variabel lingkungan:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
Ganti INSERT_YOUR_APP_PROJECT_ID dengan ID project Application.
Berikan akun layanan
terraformer
yang Anda buat peran pemilik (roles/owner
) di project Application:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Memberikan peran ini ke akun layanan akan memungkinkannya 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-modul ini berada di direktori berikut:
Direktori | Konten direktori |
---|---|
terraform/ |
Konfigurasi level atas, 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 Cloud Functions Poller dan Scaler, serta 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 akan menyiapkan instance yang ada untuk memantau 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 diberi nama
autoscale-test
.Untuk mengetahui informasi selengkapnya tentang cara menyiapkan Terraform guna mengelola instance Spanner, lihat Mengimpor instance Spanner.
Ubah direktori kerja Anda ke direktori Terraform per project:
cd "${AUTOSCALER_DIR}" terraform init
Perintah ini juga menginisialisasi direktori Terraform per project.
Impor 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 untuk 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 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 yang sering terjadi di penyedia Terraform Google. Dalam hal ini, coba lagi dengan perintah berikut:
terraform apply -parallelism=1.
Mengimpor instance Spanner Anda
Jika sudah memiliki instance Spanner yang ingin diimpor untuk Terraform agar dapat mengelolanya, ikuti petunjuk di bagian ini. Jika tidak, langsung buka Mengonfigurasi Autoscaler.
Di Cloud Shell, cantumkan instance Spanner Anda:
gcloud spanner instances list
Tetapkan variabel berikut dengan nama instance yang ingin Anda skalakan 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 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 harus mengonfigurasi parameternya.
Di konsol Google Cloud, buka halaman Cloud Scheduler.
Pilih kotak centang 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 ditetapkan menggunakan array JSON. Setiap elemen dalam array mewakili instance Spanner yang memiliki jadwal tugas Autoscaler yang sama.
Untuk 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 eksekusi tugas terjadwal berikutnya.
Jika terdapat 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 di Cloud Functions Poller dan Scaler.
Di konsol Google Cloud, buka halaman Logs Explorer.
Klik Query preview dan masukkan filter berikut ke dalam Query builder:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Klik Run Query.
Di bagian Query results, Anda dapat melihat semua pesan dari fungsi Autoscaler. Karena polling hanya berjalan setiap 2 menit, Anda mungkin perlu menjalankan kembali kueri untuk menerima pesan log.
Untuk melihat pesan dari Scaler Cloud Functions saja, klik kotak Query preview dan ganti filter sebelumnya di kotak teks Query builder dengan teks berikut ini:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klik Run Query.
Di bagian Query results, 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-fungsi seperti mencatat frekuensi peristiwa penskalaan otomatis, atau di diagram Cloud Monitoring dan kebijakan pemberitahuan.
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 kapasitas komputasi. Anda dapat memastikan apakah alat ini berfungsi dengan mengubah setelan ukuran minimum (minSize
) menjadi 2. Jika alat berjalan seperti yang diharapkan, instance Spanner
akan diskalakan menjadi 2 node. Jika menggunakan database yang ada untuk tutorial ini, Anda mungkin melihat nilai yang berbeda.
Di konsol Google Cloud, buka halaman Cloud Scheduler.
Pilih kotak centang 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 Query preview dan masukkan filter berikut ke dalam Query builder:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klik Run Query.
Klik Jump to Now hingga Anda melihat pesan log berikut:
Scaling spanner instance to 2 NODES
Untuk memverifikasi bahwa Spanner telah diskalakan ke 2 node, buka halaman konsol Spanner di Konsol Google Cloud.
Klik instance
autoscale-test
.Di bagian Overview, pastikan jumlah node saat ini adalah 2. Pengujian cepat ini menunjukkan peristiwa penyebaran skala dengan memodifikasi parameter Autoscaler. Anda dapat melakukan uji beban dengan alat seperti YCSB untuk menyimulasikan Autoscaler yang memicu peristiwa penskalaan berdasarkan pemakaian.
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
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus 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.