Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membangun kembali replikasi logis setelah peningkatan besar
Sebelum Anda dapat melakukan upgrade versi utama dari cluster Aurora Postgre SQL DB RDS yang diatur sebagai node penerbit untuk replikasi logis, Anda harus menghapus semua slot replikasi, bahkan yang tidak aktif. Kami menyarankan Anda mengalihkan sementara transaksi database dari node penerbit, menjatuhkan slot replikasi, meningkatkan cluster Aurora Postgre SQL DB, meningkatkan instance Postgre DB RDS untuk SQL Postgre, kembali dan memulai ulang replikasi.
Slot replikasi hanya di-hosting di simpul penerbit. Node SQL pelanggan Aurora Postgre dalam skenario replikasi logis tidak memiliki slot untuk dijatuhkan. Proses upgrade versi SQL utama Aurora Postgre mendukung peningkatan pelanggan ke versi utama baru SQL Postgre independen dari node penerbit. Namun, proses upgrade memang mengganggu proses replikasi dan mengganggu sinkronisasi WAL data antara node penerbit dan node pelanggan. Anda perlu membangun kembali replikasi logis antara penerbit dan pelanggan setelah peningkatan penerbit, pelanggan, atau keduanya. Prosedur berikut menunjukkan kepada Anda cara menentukan bahwa replikasi telah terganggu dan cara mengatasi masalah tersebut.
Menentukan bahwa replikasi logis telah terganggu
Anda dapat menentukan bahwa proses replikasi telah terganggu dengan menanyakan simpul penerbit atau simpul pelanggan, sebagai berikut.
Untuk memeriksa simpul penerbit
-
Gunakan
psql
untuk terhubung ke simpul penerbit, lalu buat kueri fungsipg_replication_slots
. Perhatikan nilai di kolom aktif. Biasanya, ini akan kembalit
(benar), menunjukkan bahwa replikasi aktif. Jika kueri kembalif
(salah), ini merupakan indikasi bahwa replikasi ke pelanggan telah berhenti.SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_labcb4fa94_docs_lab3de412c | pglogical_output | logical | f (1 row)
Untuk memeriksa simpul pelanggan
Pada simpul pelanggan, Anda dapat memeriksa status replikasi dengan tiga cara berbeda.
-
Lihat melalui SQL log Postgre pada node pelanggan untuk menemukan pesan kegagalan. Log dapat mengidentifikasi kegagalan dengan pesan yang menyertakan kode keluar 1, sebagaimana ditunjukkan berikut.
2022-07-06 16:17:03 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 14610) exited with exit code 1 2022-07-06 16:19:44 UTC::@:[7361]:LOG: background worker "pglogical apply 16404:2880255011" (PID 21783) exited with exit code 1
-
Buat kueri fungsi
pg_replication_origin
. Hubungkan ke basis data pada simpul pelanggan menggunakanpsql
dan buat kueri fungsipg_replication_origin
, sebagai berikut.SELECT * FROM pg_replication_origin;
roident | roname ---------+-------- (0 rows)
Set hasil kosong berarti replikasi telah terganggu. Biasanya, Anda akan melihat output seperti berikut.
roident | roname ---------+---------------------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
Buat kueri fungsi
pglogical.show_subscription_status
sebagaimana ditunjukkan pada contoh berikut.SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name ---====----------------+--------+------------------------------------- docs_lab_subscription | down | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
Output ini menunjukkan bahwa replikasi telah terganggu. Statusnya adalah
down
. Biasanya, output menunjukkan status sebagaireplicating
.
Jika proses replikasi logis terganggu, Anda dapat membangun kembali replikasi dengan mengikuti langkah-langkah berikut.
Untuk membangun kembali replikasi logis antara simpul penerbit dan pelanggan
Untuk membangun kembali replikasi, pertama-tama Anda memutuskan sambungan pelanggan dari simpul penerbit, lalu membangun kembali langganan, seperti yang diuraikan dalam langkah-langkah ini.
-
Hubungkan ke simpul pelanggan menggunakan
psql
, sebagai berikut.psql --host=
222222222222
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
Nonaktifkan langganan menggunakan fungsi
pglogical.alter_subscription_disable
.SELECT pglogical.alter_subscription_disable('docs_lab_subscription',true);
alter_subscription_disable ---------------------------- t (1 row)
-
Dapatkan identifier simpul penerbit dengan menanyakan
pg_replication_origin
, sebagai berikut.SELECT * FROM pg_replication_origin;
roident | roname ---------+------------------------------------- 1 | pgl_labdb_docs_labcb4fa94_docs_lab3de412c (1 row)
-
Gunakan respons dari langkah sebelumnya dengan perintah
pg_replication_origin_create
untuk menetapkan pengenal yang dapat digunakan oleh langganan saat dibuat kembali.SELECT pg_replication_origin_create('pgl_labdb_docs_labcb4fa94_docs_lab3de412c');
pg_replication_origin_create ------------------------------ 1 (1 row)
-
Aktifkan langganan dengan meneruskan namanya menggunakan status
true
, sebagaimana ditunjukkan dalam contoh berikut.SELECT pglogical.alter_subscription_enable('docs_lab_subscription',true);
alter_subscription_enable --------------------------- t (1 row)
Periksa status simpul. Statusnya harus replicating
sebagaimana ditunjukkan dalam contoh ini.
SELECT subscription_name,status,slot_name FROM pglogical.show_subscription_status();
subscription_name | status | slot_name -------------------------------+-------------+------------------------------------- docs_lab_subscription | replicating | pgl_labdb_docs_lab98f517b_docs_lab3de412c (1 row)
Periksa status slot replikasi pelanggan pada simpul penerbit. Kolom active
slot harus kembali t
(benar), menunjukkan bahwa replikasi telah dibuat kembali.
SELECT slot_name,plugin,slot_type,active FROM pg_replication_slots;
slot_name | plugin | slot_type | active -------------------------------------------+------------------+-----------+-------- pgl_labdb_docs_lab98f517b_docs_lab3de412c | pglogical_output | logical | t (1 row)