Halaman ini menjelaskan cara menyiapkan penggantian untuk MySQL menggunakan replikasi terbalik. Penggantian mengacu pada rencana darurat untuk kembali ke database MySQL sumber jika Anda mengalami masalah dengan Spanner.
Replikasi terbalik berguna saat Anda mengalami masalah yang tidak terduga dan perlu melakukan fallback ke database MySQL asli dengan gangguan minimum pada layanan. Replikasi terbalik memungkinkan Anda melakukan failback dengan mereplikasi data yang ditulis ke Spanner ke database MySQL sumber Anda. Hal ini memastikan kedua database pada akhirnya konsisten.
Alur replikasi terbalik melibatkan langkah-langkah berikut, yang dilakukan oleh
Spanner_to_SourceDb template Dataflow:
Membaca perubahan dari Spanner menggunakan aliran perubahan Spanner.
Pastikan mode pemfilteran adalah
forward_migration.Ubah data Spanner agar kompatibel dengan skema database sumber Anda menggunakan alat migrasi Spanner. Untuk mengetahui informasi selengkapnya, lihat Transformasi kustom.
Verifikasi apakah database sumber sudah berisi data yang lebih baru untuk kunci utama yang ditentukan.
Tulis data ke database sumber Anda.
Menggunakan template Dataflow Spanner_to_SourceDb
Template Dataflow memastikan konsistensi di tingkat kunci utama. Template membuat tabel metadata, yang dikenal sebagai tabel bayangan, di Spanner yang berisi stempel waktu commit transaksi tulis terakhir pada shard untuk tabel tertentu tersebut.
Penulisan konsisten hingga stempel waktu penerapan kunci utama.
Anda dapat mengonfigurasi tugas Dataflow yang melakukan replikasi terbalik agar berjalan dalam salah satu mode berikut:
Reguler: Ini adalah mode default. Tugas Dataflow membaca peristiwa dari aliran perubahan Spanner, mengonversinya ke jenis data yang kompatibel dengan skema database sumber, dan menerapkannya ke database sumber. Tugas akan otomatis mencoba lagi jika terjadi error. Setelah mencoba ulang beberapa kali, error akan dipindahkan ke folder
severedi direktori dead letter queue (DLQ) di bucket Cloud Storage. Tugas ini juga memindahkan semua error permanen ke foldersevere.RetryDLQ: Dalam mode ini, tugas Dataflow membaca peristiwa dari folder
severeDLQ dan mencoba ulang peristiwa tersebut. Jalankan mode ini setelah Anda memperbaiki semua error permanen. Mode ini hanya membaca dari DLQ, dan bukan dari aliran perubahan Spanner. Jika kumpulan data yang diproses dari folderseveredipindahkan ke folderretry, tugas akan mencoba lagi.
Sebelum memulai
Pastikan konektivitas jaringan antara database MySQL sumber dan Google Cloud project Anda, tempat tugas Dataflow akan berjalan.
Masukkan alamat IP pekerja Dataflow ke daftar yang diizinkan di instance MySQL tujuan Anda.
Pastikan kredensial MySQL ditentukan dengan benar di
source shards file.Pastikan instance MySQL Anda online dan berjalan.
Pastikan pengguna MySQL memiliki hak istimewa
INSERT,UPDATE, danDELETEpada database MySQL.Pastikan Anda memiliki izin IAM yang diperlukan untuk menjalankan template fleksibel Dataflow. Untuk mengetahui informasi selengkapnya, lihat Membangun dan menjalankan template fleksibel.
Pastikan port
12345terbuka untuk komunikasi antara VM pekerja Dataflow.
Peran yang diperlukan
-
Untuk mendapatkan izin yang Anda perlukan untuk meluncurkan replikasi terbalik, minta administrator Anda untuk memberi Anda peran IAM berikut di instance:
-
Pengguna Database Cloud Spanner (
roles/spanner.databaseUser) -
Dataflow Developer (
roles/dataflow.developer)
-
Pengguna Database Cloud Spanner (
-
Untuk memastikan bahwa akun layanan Compute Engine memiliki izin yang diperlukan untuk meluncurkan replikasi terbalik, minta administrator untuk memberikan peran IAM berikut kepada akun layanan Compute Engine di instance:
-
Pengguna Database Cloud Spanner (
roles/spanner.databaseUser) -
Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) -
Secret Manager Viewer (
roles/secretmanager.viewer)
-
Pengguna Database Cloud Spanner (
Menjalankan replikasi terbalik
Untuk menjalankan replikasi terbalik, ikuti langkah-langkah berikut:
Upload file sesi ke bucket Cloud Storage.
Buat notifikasi Pub/Sub untuk folder
retrydari direktori DLQ. Anda dapat melakukannya dengan membuat topik Pub/Sub dan langganan Pub/Sub untuk topik tersebut.Bangun dan siapkan template Dataflow. Untuk mengetahui informasi selengkapnya, lihat Membangun template.
Jalankan template Dataflow replikasi terbalik menggunakan perintah Google Cloud CLI berikut:
gcloud dataflow flex-template run "spanner-to-sourcedb-job" \ --project "PROJECT" \ --region "REGION" \ --template-file-gcs-location "TEMPLATE_SPEC_GCSPATH" \ --parameters "changeStreamName=CHANGE_STREAM_NAME" \ --parameters "instanceId=INSTANCE_ID" \ --parameters "databaseId=DATABASE_ID" \ --parameters "spannerProjectId=SPANNER_PROJECT_ID" \ --parameters "metadataInstance=METADATA_INSTANCE" \ --parameters "metadataDatabase=METADATA_DATABASE" \ --parameters "sourceShardsFilePath=SOURCE_SHARDS_FILE_PATH" \ --parameters "startTimestamp=START_TIMESTAMP" \ --parameters "endTimestamp=END_TIMESTAMP" \ --parameters "shadowTablePrefix=SHADOW_TABLE_PREFIX" \ [--parameters "sessionFilePath=SESSION_FILE_PATH"] \ [--parameters "filtrationMode=FILTRATION_MODE"] \ [--parameters "shardingCustomJarPath=SHARDING_CUSTOM_JAR_PATH"] \ [--parameters "shardingCustomClassName=SHARDING_CUSTOM_CLASS_NAME"] \ [--parameters "shardingCustomParameters=SHARDING_CUSTOM_PARAMETERS"] \ [--parameters "sourceDbTimezoneOffset=SOURCE_DB_TIMEZONE_OFFSET"] \ [--parameters "dlqGcsPubSubSubscription=DLQ_GCS_PUB_SUB_SUBSCRIPTION"] \ [--parameters "skipDirectoryName=SKIP_DIRECTORY_NAME"] \ [--parameters "maxShardConnections=MAX_SHARD_CONNECTIONS"] \ [--parameters "deadLetterQueueDirectory=DEAD_LETTER_QUEUE_DIRECTORY"] \ [--parameters "dlqMaxRetryCount=DLQ_MAX_RETRY_COUNT"] \ [--parameters "runMode=RUN_MODE"] \ [--parameters "dlqRetryMinutes=DLQ_RETRY_MINUTES"] \ [--parameters "sourceType=SOURCE_TYPE"] \ [--parameters "transformationJarPath=TRANSFORMATION_JAR_PATH"] \ [--parameters "transformationClassName=TRANSFORMATION_CLASS_NAME"] \ [--parameters "transformationCustomParameters=TRANSFORMATION_CUSTOM_PARAMETERS"] \ [--parameters "filterEventsDirectoryName=FILTER_EVENTS_DIRECTORY_NAME"]
Variabel wajib dijelaskan dalam daftar berikut:
project: Google Cloud Project IDregion: Google Cloud region.template-file-gcs-location: jalur ke file Cloud Storage tempat Anda menyiapkan template Dataflow.changeStreamName: nama aliran perubahan Spanner yang dibaca tugas.instanceId: ID instance Spanner.databaseId: ID database Spanner.spannerProjectId: project ID tempat instance Spanner Anda berada.metadataInstance: instance yang menyimpan metadata yang digunakan konektor untuk mengontrol penggunaan data Change Stream API.metadataDatabase: database yang menyimpan metadata yang digunakan konektor untuk mengontrol penggunaan data Change Stream API.sourceShardsFilePath: jalur ke file Cloud Storage yang berisi informasi profil koneksi untuk shard sumber.
Variabel opsional dijelaskan dalam daftar berikut:
startTimestamp: stempel waktu dari mana perubahan mulai dibaca. Nilai defaultnya adalah kosong.endTimestamp: stempel waktu hingga perubahan dibaca. Jika Anda tidak memberikan stempel waktu, proses akan membaca perubahan tanpa batas waktu. Nilai defaultnya adalah kosong.shadowTablePrefix: awalan untuk memberi nama tabel bayangan. Nilai defaultnya adalahshadow_.sessionFilePath: jalur ke file sesi di Cloud Storage yang berisi informasi pemetaan dari alat migrasi Spanner.filtrationMode: mode yang menentukan cara memfilter rekaman berdasarkan kriteria. Mode yang didukung adalahnoneatauforward_migration.shardingCustomJarPath: lokasi (jalur) di Cloud Storage dari file JAR kustom yang berisi logika untuk mengambil ID shard. Nilai defaultnya adalah kosong.shardingCustomClassName: nama class yang memenuhi syarat sepenuhnya yang memiliki implementasi ID partisi kustom. Kolom ini wajib diisi jikashardingCustomJarPathditentukan. Nilai defaultnya adalah kosong.shardingCustomParameters: string yang berisi parameter kustom apa pun yang akan diteruskan ke class sharding kustom. Nilai defaultnya adalah kosong.sourceDbTimezoneOffset: selisih zona waktu dari UTC untuk database sumber. Contoh: +10.00. Default: +00:00.dlqGcsPubSubSubscription: langganan Pub/Sub yang digunakan dalam kebijakan notifikasi Cloud Storage untuk direktori percobaan ulang DLQ saat berjalan dalam moderegular. Tentukan nama dalam formatprojects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_ID>. Saat Anda menetapkan parameter ini, sistem akan mengabaikandeadLetterQueueDirectorydandlqRetryMinutes.skipDirectoryName: direktori tempat sistem menulis catatan yang dilewati selama replikasi terbalik. Default:skip.maxShardConnections: jumlah maksimum koneksi yang diizinkan per shard. Default: 10000.deadLetterQueueDirectory: jalur untuk menyimpan output DLQ. Defaultnya adalah direktori di lokasi sementara tugas Dataflow.dlqMaxRetryCount: jumlah maksimum percobaan ulang sistem untuk mengatasi kesalahan sementara melalui DLQ. Default: 500.runMode: jenis mode operasi. Opsinya adalahregularatauretryDLQ. GunakanretryDLQuntuk mencoba ulang hanya rekaman DLQ yang parah. Default:regular.dlqRetryMinutes: jumlah menit antara percobaan ulang DLQ. Default: 10.sourceType: jenis database sumber yang akan direplikasi terbalik. Default:mysql.transformationJarPath: lokasi (jalur) di Cloud Storage dari file JAR kustom yang berisi logika transformasi kustom untuk memproses rekaman dalam replikasi terbalik. Nilai defaultnya adalah kosong.transformationClassName: nama class yang sepenuhnya memenuhi syarat yang memiliki logika transformasi kustom. Kolom ini wajib diisi jikatransformationJarPathditentukan. Nilai defaultnya adalah kosong.transformationCustomParameters: string yang berisi parameter kustom untuk diteruskan ke class transformasi kustom. Nilai defaultnya adalah kosong.filterEventsDirectoryName: direktori tempat sistem menulis catatan yang dilewati selama replikasi terbalik. Default:skip.