Mengelola replika baca

Halaman ini menjelaskan cara mengelola replika baca. Operasi ini termasuk menonaktifkan dan mengaktifkan replikasi, mempromosikan replika, mengonfigurasi replika paralel, dan memeriksa status replikasi.

Untuk mengetahui informasi selengkapnya tentang cara kerja replikasi, baca Replikasi di Cloud SQL.

Nonaktifkan replikasi

Secara default, replika dimulai dengan mengaktifkan replikasi. Namun, Anda dapat menonaktifkan replikasi, misalnya, untuk men-debug atau menganalisis status sebuah instance. Jika sudah siap, Anda dapat mengaktifkan kembali replikasi secara eksplisit. Menonaktifkan atau mengaktifkan kembali replikasi tidak akan memulai ulang instance replika.

Menonaktifkan replikasi tidak menghentikan instance replika; instance menjadi hanya-baca yang tidak lagi direplikasi dari instance utamanya. Anda akan tetap ditagih untuk instance tersebut. Pada replika yang dinonaktifkan, Anda dapat mengaktifkan kembali replikasi, menghapus replika, atau mempromosikan replika ke instance mandiri.

Untuk menonaktifkan replikasi:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Pilih instance replika dengan mengklik namanya.
  3. Klik Nonaktifkan replikasi di panel tombol.
  4. Klik OK.

gcloud

gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication

REST v1

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer pada halaman Instance:patch untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, buat pengganti berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Meminta isi JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer pada halaman Instance:patch untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, buat pengganti berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Meminta isi JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Aktifkan replikasi

Jika replika tidak melakukan replikasi untuk waktu yang lama, akan membutuhkan waktu lebih lama untuk mengejar ketertinggalan dari instance utama. Dalam hal ini, hapus replika dan buat yang baru.

Untuk mengaktifkan replikasi:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Pilih instance replika dengan mengklik namanya.
  3. Klik Aktifkan Replikasi.
  4. Klik Oke.

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer pada halaman Instance:patch untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, buat pengganti berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

Meminta isi JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer pada halaman Instance:patch untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, buat pengganti berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

Meminta isi JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Mempromosikan replika

Mempromosikan replika baca akan menghentikan replikasi dan mengonversi instance menjadi instance utama Cloud SQL mandiri dengan kemampuan baca dan tulis.

Saat dipromosikan, replika baca otomatis dikonfigurasi dengan cadangan, tetapi tidak dikonfigurasi secara otomatis sebagai instance ketersediaan tinggi (HA). Anda dapat mengaktifkan ketersediaan tinggi setelah mempromosikan replika seperti yang Anda lakukan untuk instance non-replika apa pun. Mengonfigurasi replika baca untuk ketersediaan tinggi dilakukan dengan cara yang sama seperti untuk instance utama. Pelajari lebih lanjut cara mengonfigurasi instance untuk ketersediaan tinggi.

Sebelum mempromosikan replika baca, jika replika baca masih tersedia dan menayangkan klien, Anda harus melakukan hal berikut:

  1. Menghentikan semua penulisan ke instance utama.
  2. Periksa status replikasi replika (ikuti petunjuk di tab psql Client).
  3. Pastikan bahwa replika sedang mereplikasi, lalu tunggu hingga jeda replikasi yang dilaporkan oleh metrikreplay_lag adalah 0.

Jika tidak, instance yang baru dipromosikan mungkin tidak memiliki beberapa transaksi yang di-commit ke instance utama.

Guna mempromosikan replika ke instance mandiri:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Pilih instance replika dengan mengklik namanya.
  3. Klik Promosikan replika.
  4. Klik Oke.

gcloud

gcloud sql instances promote-replica REPLICA_NAME
  

REST v1

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer di halaman Instances:promoteReplica untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

REST v1beta4

Untuk menjalankan perintah cURL ini pada command line prompt, Anda perlu memperoleh token akses menggunakan perintah gcloud auth print-access-token. Anda juga dapat menggunakan APIs Explorer di halaman Instances:promoteReplica untuk mengirim permintaan REST API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID Project
  • replica-name: Nama instance replika

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Pastikan instance yang dipromosikan sudah dikonfigurasi dengan benar. Secara khusus, pertimbangkan untuk mengonfigurasi instance untuk ketersediaan tinggi jika diperlukan.

Memeriksa status replikasi

Saat melihat instance replika menggunakan Google Cloud Console atau login ke instance menggunakan klien administrasi, Anda akan mendapatkan detail tentang replikasi, termasuk status dan metrik. Saat menggunakan gcloud CLI, Anda akan mendapatkan ringkasan singkat tentang konfigurasi replikasi.

Sebelum memeriksa status replikasi untuk instance replika Cloud SQL, gunakan perintah
gcloud sql instances describe untuk menampilkan status instance. Akibatnya, Anda dapat melihat apakah replikasi diaktifkan untuk instance replika atau tidak.

Metrik berikut tersedia untuk instance replika. (Pelajari lebih lanjut metrik tambahan yang tersedia untuk semua instance, termasuk instance non-replika.)

MetrikDeskripsi
Status Replikasi
(cloudsql.googleapis.com/database/replication/state)

Menunjukkan apakah replikasi secara aktif melakukan streaming log dari log utama ke replika. Nilainya dapat berupa:

  • Running
  • Stopped
  • Error

Metrik ini melaporkan Running jika:

  1. pg_catalog.pg_stat_wal_receiver melaporkan status dari "streaming", dan
  2. pg_catalog.pg_is_wal_replay_paused() melaporkan "f" (salah).

Untuk mengetahui informasi selengkapnya, lihat The Kolektor Statistik dan Fungsi Sistem Administrasidi Panduan Referensi PostgreSQL.

Jeda Replikasi
(cloudsql.googleapis.com/database/replication/replica_lag)

Durasi saat status replika mengalami keterlambatan dibandingkan status instance utama. Ini adalah perbedaan antara (1) waktu saat ini dan (2) stempel waktu asli saat transaksi utama di-commit yang sedang diterapkan pada replika. Secara khusus, penulisan mungkin dianggap sebagai keterlambatan meskipun telah diterima oleh replika, jika replika belum menerapkan penulisan ke database.

Untuk replika beruntun, setiap pasangan replika utama dipantau secara terpisah dan tidak ada metrik tunggal yang menghasilkan keterlambatan (utama ke replika) secara menyeluruh.

Untuk informasi selengkapnya, lihat Jeda replikasi.

Byte Jeda
(cloudsql.googleapis.com/database/postgresql/replication/replica_byte_lag)

Melaporkan jumlah byte yang digunakan oleh replika baca yang tertinggal dari yang utama. Empat deret waktu dihasilkan untuk setiap replika, yang menunjukkan jumlah byte dalam log write-ahead utama yang belum…

  • sent_location: …dikirim ke replika
  • write_location: …ditulis ke disk oleh replika
  • flush_location: …di-flush ke disk oleh replika
  • replay_location: …diputar ulang oleh replika

Metrik ini memiliki tujuan yang berbeda; misalnya, replay_location memberikan indikasi jeda replikasi (jumlah transaksi yang di-commit ke transaksi utama yang belum diterapkan ke replika), sementara flush_location memberikan indikasi jumlah transaksi yang belum dicatat secara permanen pada instance replika.

Metrik ini dihitung dengan membandingkan pg_catalog.pg_current_wal_lsn() dengan salah satu kolom berikut dari pg_stat_replication: sent_lsn, write_lsn, flush_lsn, atau replay_lsn. Untuk mengetahui informasi selengkapnya, lihat The Statistics Collector di Panduan Referensi PostgreSQL.

Byte Jeda Maksimal
(cloudsql.googleapis.com/database/postgresql/external_sync/max_replica_byte_lag)

Untuk replika primer eksternal, laporkan jeda replikasi maksimum (dalam byte) pada semua database yang direplikasi ke instance ini. Untuk setiap database, hal ini didefinisikan sebagai jumlah byte dalam write-ahead log utama yang belum dikonfirmasi untuk diterima oleh replika.

Metrik ini dihitung dengan mengirimkan kueri ke instance utama untuk membandingkan pg_catalog.pg_current_wal_lsn() dengan nilai confirmed_flush_lsn untuk setiap database yang direplikasi ke instance replika ini. Untuk mengetahui informasi selengkapnya, lihat The Statistics Collector di Panduan Referensi PostgreSQL.

Untuk memeriksa status replikasi:

Konsol

Cloud SQL melaporkan Replication State metrik di dasbor pemantauan Cloud SQL default.

Untuk melihat metrik lain untuk replika dalam region dan lintas region, serta replika server eksternal, buat dasbor kustom dan tambahkan metrik yang ingin Anda pantau ke dasbor tersebut:

  1. Di konsol Google Cloud, buka halaman Monitoring.

    Buka Monitoring

  2. Pilih tab Dasbor.
  3. Klik Buat Dasbor.
  4. Beri nama dasbor lalu klik OK.
  5. Klik Tambahkan Diagram.
  6. Untuk Resource Type, pilih Cloud SQL Database.
  7. Lakukan salah satu tindakan berikut:
    1. Guna memantau kondisi replikasi metrik: di kolom Pilih metrik, ketik Replication state. Lalu, tambahkan filter untuk state = "Running". Diagram menunjukkan 1 jika replikasi berjalan dan 0 jika tidak.
    2. Untuk memantau jeda replikasi, dalam byte, untuk replika baca: di kolom Pilih metrik, ketik Lag Bytes. Lalu tambahkan filter di replica_lag_type = "replay_location". Diagram ini menunjukkan jumlah byte yang terkait dengan transaksi yang telah di-commit di jaringan utama, tetapi belum di-replay di replika.
    3. Guna memantau jeda replikasi, dalam byte, untuk replika primer eksternal: di kolom Pilih metrik ketik Max Lag Bytes. Diagram ini menunjukkan jumlah byte yang terkait dengan transaksi yang telah di-commit di jaringan utama, tetapi belum dikonfirmasi diterima oleh replika.

gcloud

Untuk instance replika, periksa status replikasi dengan:

gcloud sql instances describe REPLICA_NAME

Pada output, cari properti databaseReplicationEnabled dan masterInstanceName.

Untuk instance utama, periksa apakah ada replika dengan:

gcloud sql instances describe PRIMARY_INSTANCE_NAME

Di output, cari properti replicaNames.

Klien psql

Beberapa metrik status replikasi dihasilkan oleh elemen utama dan beberapa lainnya dihasilkan oleh replika. Untuk langkah-langkah berikut, hubungkan ke replika atau instance utama (seperti yang diarahkan di bawah) dengan klien PostgreSQL.

Untuk mengetahui informasinya, lihat Opsi koneksi untuk aplikasi eksternal.

  1. Untuk memeriksa status replika dari instance utama:
    select * from pg_stat_replication;
    Cari metrik berikut dalam output perintah:
    • client_addr: Alamat IP instance replika.
    • state: Menunjukkan apakah thread SQL untuk mengeksekusi peristiwa di log relay sedang berjalan atau tidak. Nilainya adalah streaming saat replikasi dimulai.
    • replay_lag: Jumlah byte yang digunakan oleh thread SQL replika di belakang instance utama. Nilainya adalah O atau sejumlah kecil byte.
  2. Untuk memeriksa status replika dari instance replika:
    select * from pg_stat_wal_receiver;

    Cari metrik berikut dalam output perintah:

    • sender_host: Alamat IP instance utama.
    • status: Menunjukkan apakah thread SQL untuk mengeksekusi peristiwa di log relay sedang berjalan atau tidak. Nilainya adalah streaming saat replikasi dimulai.
    • last_msg_send_time dan last_msg_receipt_time: Perbedaan antara kedua stempel waktu ini adalah waktu keterlambatan.

    Untuk memeriksa apakah replikasi telah dijeda:

    select pg_is_wal_replay_paused();

    Nilainya adalah t jika replikasi dijeda dan f jika tidak.

    Untuk memeriksa apakah ada transaksi yang telah diterima dari transaksi utama tetapi belum diterapkan:

    # for PostgreSQL 9.6
    select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location();
    # for PostgreSQL 10 and above
    select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();

    Jika kedua nilai tersebut sama, berarti replika telah memproses semua transaksi yang diterima dari transaksi utama.

  • Untuk detail selengkapnya tentang output dari perintah ini, lihat dokumentasi PostgreSQL di Kolektor Statistik.
  • Memecahkan masalah

    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.

    Langkah selanjutnya