Menggunakan impor terkelola untuk menyiapkan replikasi dari database eksternal

Halaman ini menjelaskan cara menyiapkan dan menggunakan impor terkelola untuk data saat mereplikasi dari server eksternal ke Cloud SQL.

Anda harus menyelesaikan semua langkah di halaman ini. Setelah selesai, Anda dapat mengelola dan memantau instance representasi sumber dengan cara yang sama seperti yang Anda lakukan pada instance Cloud SQL lainnya.

Sebelum memulai

Sebelum Anda memulai, selesaikan langkah-langkah berikut:

  1. Konfigurasi server eksternal.

  2. Buat instance representasi sumber.

  3. Siapkan replika Cloud SQL.

Verifikasi setelan replikasi Anda

Setelah penyiapan selesai, pastikan replika Cloud SQL dapat direplikasi dari server eksternal.

Setelan sinkronisasi eksternal berikut harus benar.

  • Konektivitas antara replika Cloud SQL dan server eksternal
  • Hak istimewa pengguna replikasi
  • Kompatibilitas versi
  • Replika Cloud SQL belum direplikasi

Untuk memverifikasi setelan ini, buka terminal Cloud Shell dan masukkan perintah berikut:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

contoh

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Panggilan ini menampilkan daftar jenis sql#externalSyncSettingErrorList.

Jika daftar kosong, tidak ada error. Respons tanpa error akan muncul seperti ini:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Properti Deskripsi
SYNC_MODE Memastikan Anda dapat terus menyinkronkan replika Cloud SQL dan server eksternal setelah replikasi disiapkan. Mode sinkronisasi mencakup EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE, dan OFFLINE.
SYNC_PARALLEL_LEVEL

Verifikasi setelan yang mengontrol kecepatan transfer data dari tabel database. Nilai berikut ini tersedia:

  • min: Menggunakan jumlah resource komputasi terendah di database. Ini adalah kecepatan paling lambat untuk mentransfer data.
  • optimal: Memberikan performa yang seimbang dengan beban yang optimal pada database.
  • max: Memberikan kecepatan tertinggi untuk mentransfer data, tetapi hal ini dapat menyebabkan peningkatan beban pada database.

Catatan: Nilai default untuk parameter ini adalah optimal karena setelan ini memberikan kecepatan yang baik untuk mentransfer data dan memiliki dampak yang wajar pada database. Sebaiknya gunakan nilai ini.

PROJECT_ID ID project Google Cloud Anda.
REPLICA_INSTANCE_ID ID replika Cloud SQL Anda.

Memulai replikasi pada server eksternal

Setelah memverifikasi bahwa Anda dapat mereplikasi dari server eksternal, mulai replikasi. Kecepatan untuk melakukan replikasi untuk proses impor awal adalah hingga 500 GB per jam. Namun, kecepatan ini dapat bervariasi berdasarkan tingkat mesin, ukuran disk data, throughput jaringan, dan sifat database Anda.

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync

contoh

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Properti Deskripsi
SYNC_MODE Verifikasi bahwa Anda dapat terus menyinkronkan replika Cloud SQL dan server eksternal setelah replikasi disiapkan.
SKIP_VERIFICATION Apakah Anda akan melewati langkah verifikasi bawaan sebelum menyinkronkan data. Parameter ini hanya direkomendasikan jika Anda telah memverifikasi setelan replikasi.
SYNC_PARALLEL_LEVEL

Berikan setelan yang mengontrol kecepatan transfer data dari tabel database. Nilai berikut ini tersedia:

  • min: Menggunakan jumlah resource komputasi terendah di database. Ini adalah kecepatan paling lambat untuk mentransfer data.
  • optimal: Memberikan performa yang seimbang dengan beban yang optimal pada database.
  • max: Memberikan kecepatan tertinggi untuk mentransfer data, tetapi hal ini dapat menyebabkan peningkatan beban pada database.

Catatan: Nilai default untuk parameter ini adalah optimal karena setelan ini memberikan kecepatan yang baik untuk mentransfer data dan memiliki dampak yang wajar pada database. Sebaiknya gunakan nilai ini.

PROJECT_ID ID project Google Cloud Anda.
REPLICA_INSTANCE_ID ID replika Cloud SQL Anda.

Memantau migrasi

Setelah memulai replikasi dari server eksternal, Anda perlu memantau replikasi. Untuk mempelajari lebih lanjut, lihat Memantau replikasi. Setelah itu, Anda dapat menyelesaikan migrasi.

Memecahkan masalah

Pertimbangkan opsi pemecahan masalah berikut:

Masalah Pemecahan masalah
Replika baca tidak mulai direplikasi pada saat pembuatan. Mungkin ada error yang lebih spesifik di file log. Periksa log di Cloud Logging untuk menemukan error yang sebenarnya.
Tidak dapat membuat replika baca - error invalidFlagValue. Salah satu tanda dalam permintaan tidak valid. Ini bisa berupa tanda yang Anda berikan secara eksplisit atau tanda yang ditetapkan ke nilai default.

Pertama, pastikan nilai tanda max_connections lebih besar dari atau sama dengan nilai pada tanda utama.

Jika flag max_connections sudah ditetapkan dengan tepat, periksa log di Cloud Logging untuk menemukan error yang sebenarnya.

Tidak dapat membuat replika baca - error tidak diketahui. Mungkin ada error yang lebih spesifik di file log. Periksa log di Cloud Logging untuk menemukan error yang sebenarnya.

Jika error-nya adalah: set Service Networking service account as servicenetworking.serviceAgent role on consumer project, makan nonaktifkan dan aktifkan kembali Service Networking API. Tindakan ini akan membuat akun layanan yang diperlukan untuk melanjutkan prosesnya.

Disk penuh. Ukuran disk instance utama dapat penuh selama pembuatan replika. Edit instance utama untuk mengupgrade ke ukuran disk yang lebih besar.
Kapasitas disk meningkat secara signifikan. Slot yang tidak digunakan secara aktif untuk melacak data menyebabkan PostgreSQL menahan segmen WAL tanpa batas waktu sehingga kapasitas disk bertambah tanpa batas. Jika Anda menggunakan fitur replika dan decoding logis di Cloud SQL, slot replika akan dibuat dan dihapus secara otomatis. Slot replika yang tidak digunakan dapat dideteksi dengan membuat kueri pg_replication_slots tampilan sistem dan pemfilteran di kolom active. Slot yang tidak digunakan dapat dihapus untuk menghapus segmen WAL menggunakan perintah pg_drop_replication_slot.
Instance replika menggunakan terlalu banyak memori. Replika menggunakan memori sementara untuk meng-cache operasi baca yang sering diminta, yang dapat menyebabkannya menggunakan lebih banyak memori daripada instance utama.

Mulai ulang instance replika untuk mengklaim kembali ruang memori sementara.

Replikasi dihentikan. Batas penyimpanan maksimum tercapai dan peningkatan penyimpanan otomatis tidak diaktifkan.

Edit instance untuk mengaktifkan automatic storage increase.

Jeda replikasi selalu tinggi. Beban tulis terlalu tinggi untuk ditangani replika. Kelambatan replikasi terjadi saat thread SQL pada replika tidak dapat mengikuti thread IO. Beberapa jenis kueri atau beban kerja dapat menyebabkan kelambatan replikasi tinggi yang bersifat sementara atau permanen untuk skema tertentu. Beberapa penyebab umum kelambatan replikasi adalah:
  • Kueri lambat pada replika. Temukan dan perbaiki.
  • Semua tabel harus memiliki kunci utama/unik. Setiap update pada tabel tersebut tanpa kunci utama/unik akan menyebabkan pemindaian tabel penuh pada replika tersebut.
  • Kueri seperti DELETE ... WHERE field < 50000000 menyebabkan kelambatan replikasi dengan replikasi berbasis baris karena sejumlah besar update tertumpuk di replika.

Beberapa kemungkinan solusinya mencakup:

  • Edit instance untuk meningkatkan ukuran replika.
  • Kurangi beban pada database.
  • Kirim traffic baca ke replika baca.
  • Indeks tabel.
  • Iidentifikasi dan perbaiki kueri penulisan yang lambat.
  • Membuat ulang replika.
Terjadi error saat membangun ulang indeks di PostgreSQL 9.6. Anda mendapatkan pemberitahuan terjadinya error dari PostgreSQL yang menginformasikan bahwa Anda perlu membangun ulang indeks tertentu. Tindakan ini hanya dapat dilakukan pada instance utama. Jika Anda membuat instance replika baru, maka error yang sama akan segera terjadi lagi. Indeks hash tidak diterapkan ke replika pada versi PostgreSQL di bawah 10.

Jika Anda harus menggunakan indeks hash, upgrade ke PostgreSQL 10+. Atau, jika Anda juga ingin menggunakan replika, jangan gunakan indeks hash di PostgreSQL 9.6.

Kueri pada instance utama selalu berjalan. Setelah membuat replika, kueri SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' diharapkan dapat berjalan secara terus-menerus pada instance utama Anda
Pembuatan replika gagal karena waktu tunggu habis. Transaksi tanpa komitmen yang berjalan lama pada instance utama dapat menyebabkan pembuatan replika baca gagal.

Buat ulang replika setelah menghentikan semua kueri yang berjalan.

Jika instance utama dan replika memiliki ukuran vCPU yang berbeda, mungkin ada masalah performa kueri karena pengoptimal kueri memperhitungkan ukuran vCPU.

Untuk mengatasi masalah ini, selesaikan beberapa langkah berikut:

  1. Aktifkan tanda log_duration dan tetapkan parameter log_statement ke ddl. Tindakan ini akan memberi Anda kueri dan waktu proses di database. Namun, bergantung pada beban kerja Anda, hal ini dapat menyebabkan masalah performa.
  2. Pada instance utama dan replika baca, jalankan explain analyze untuk kueri.
  3. Bandingkan rencana kueri dan periksa perbedaannya.

Jika ini adalah kueri tertentu, ubah kueri. Misalnya, Anda dapat mengubah urutan join untuk melihat apakah Anda mendapatkan performa yang lebih baik.

Meninjau log replikasi Anda

Saat Anda memverifikasi setelan replikasi, log akan dihasilkan.

Anda dapat melihat log ini dengan mengikuti langkah-langkah berikut:

  1. Buka Logs Viewer di konsol Google Cloud.

    Buka Logs Viewer

  2. Pilih replika Cloud SQL dari dropdown Instance.
  3. Pilih file log replication-setup.log.

Jika replika Cloud SQL tidak dapat terhubung ke server eksternal, konfirmasi hal berikut:

  • Setiap firewall di server eksternal akan dikonfigurasi untuk mengizinkan koneksi dari alamat IP keluar replika Cloud SQL.
  • Konfigurasi SSL/TLS Anda sudah benar.
  • Pengguna, host, dan sandi replikasi Anda sudah benar.

Langkah berikutnya