Melakukan decoding logis

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Tunggal

Penting

Azure Database for PostgreSQL - Server Tunggal berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke Azure Database for PostgreSQL - Server Fleksibel. Untuk informasi selengkapnya tentang migrasi ke Azure Database for PostgreSQL - Server Fleksibel, lihat Apa yang terjadi pada Server Tunggal Azure Database for PostgreSQL?.

Decoding logis di PostgreSQL memungkinkan Anda untuk melakukan streaming perubahan data ke konsumen eksternal. Decoding logis populer digunakan untuk streaming acara dan mengubah skenario penangkapan data.

Decoding logis menggunakan plugin output untuk mengonversi log depan tulis (WAL) Postgres ke dalam format yang dapat dibaca. Azure Database for PostgreSQL menyediakan plugin output wal2json, test_decoding, dan pgoutput. pgoutput disediakan oleh PostgreSQL dari PostgreSQL versi 10 dan yang terbaru.

Untuk ringkasan cara kerja decoding logis Postgres, kunjungi blog kami.

Catatan

Replikasi logika yang menggunakan publikasi/langganan PostgreSQL tidak didukung dengan Azure Database for PostgreSQL - Server Tunggal.

Menyiapkan server Anda

Decoding logis dan replika baca bergantung pada log depan tulis (WAL) Postgres untuk informasi. Kedua fitur ini membutuhkan tingkat pengelogan yang berbeda dari Postgres. Pendekodean logis membutuhkan tingkat pengelogan yang lebih tinggi daripada replika baca.

Untuk mengonfigurasi tingkat pengelogan yang benar, gunakan parameter dukungan replikasi Azure. Dukungan replikasi Azure memiliki tiga opsi pengaturan:

  • Nonaktif - Menempatkan informasi paling sedikit di WAL. Pengaturan ini tidak tersedia di sebagian besar server Azure Database for PostgreSQL.
  • Replika - Lebih verbose daripada Nonaktif. Ini adalah tingkat pencatatan minimum yang diperlukan agar replika baca berfungsi. Pengaturan ini telah default di sebagian besar server.
  • Logis - Lebih verbose daripada Replika. Ini adalah level minimum pengelogan agar dekode logis berfungsi. Replika baca juga berfungsi pada pengaturan ini.

Menggunakan Azure CLI

  1. Tetapkan azure.replication_support ke logical.

    az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
    
  2. Hidupkan ulang server untuk menerapkan perubahan .

    az postgres server restart --resource-group mygroup --name myserver
    
  3. Jika Anda menjalankan Postgres 9.5 atau 9.6, dan menggunakan akses jaringan publik, tambahkan aturan firewall untuk menyertakan alamat IP publik klien dari tempat Anda akan menjalankan replikasi logis. Nama aturan firewall harus menyertakan _replrule. Misalnya, test_replrule. Untuk membuat aturan firewall baru di server, jalankan perintah az postgres server firewall-rule create.

Menggunakan portal Azure

  1. Tetapkan dukungan replikasi Azure ke logis Pilih Simpan.

    Azure Database for PostgreSQL - Replikasi - Dukungan replikasi Azure

  2. Hidupkan ulang server untuk menerapkan perubahan dengan memilih Ya.

    Azure Database for PostgreSQL - Replikasi - Mengonfirmasi hidupkan ulang

  3. Jika Anda menjalankan Postgres 9.5 atau 9.6, dan menggunakan akses jaringan publik, tambahkan aturan firewall untuk menyertakan alamat IP publik klien dari tempat Anda akan menjalankan replikasi logis. Nama aturan firewall harus menyertakan _replrule. Misalnya, test_replrule. Kemudian pilih Simpan.

    Azure Database for PostgreSQL - Replikasi - Menambahkan aturan firewall

Melakukan decoding logis

Decoding logis dapat dikonsumsi melalui protokol streaming atau antarmuka SQL. Kedua metode menggunakan slot replikasi. Slot mewakili aliran perubahan dari satu database.

Menggunakan slot replikasi memerlukan hak replikasi Postgres. Saat ini, hak istimewa replikasi hanya tersedia untuk pengguna admin server.

Protokol Streaming

Mengonsumsi perubahan menggunakan protokol streaming seringkali lebih disukai. Anda dapat membuat konsumen/konektor Anda sendiri, atau menggunakan alat seperti Debezium.

Kunjungi dokumentasi wal2json untuk mengetahui contoh menggunakan protokol streaming dengan pg_recvlogical.

Antarmuka SQL

Dalam contoh di bawah ini, kami menggunakan antarmuka SQL dengan plugin wal2json.

  1. Buat slot.

    SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
    
  2. Terbitkan perintah SQL. Contohnya:

    CREATE TABLE a_table (
       id varchar(40) NOT NULL,
       item varchar(40),
       PRIMARY KEY (id)
    );
    
    INSERT INTO a_table (id, item) VALUES ('id1', 'item1');
    DELETE FROM a_table WHERE id='id1';
    
  3. Konsumsi perubahan.

    SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
    

    Output akan terlihat seperti ini:

    {
          "change": [
          ]
    }
    {
          "change": [
                   {
                            "kind": "insert",
                            "schema": "public",
                            "table": "a_table",
                            "columnnames": ["id", "item"],
                            "columntypes": ["character varying(40)", "character varying(40)"],
                            "columnvalues": ["id1", "item1"]
                   }
          ]
    }
    {
          "change": [
                   {
                            "kind": "delete",
                            "schema": "public",
                            "table": "a_table",
                            "oldkeys": {
                                  "keynames": ["id"],
                                  "keytypes": ["character varying(40)"],
                                  "keyvalues": ["id1"]
                            }
                   }
          ]
    }
    
  4. Hilangkan slot setelah Anda selesai menggunakannya.

    SELECT pg_drop_replication_slot('test_slot'); 
    

Memantau slot

Anda harus memantau decoding logis. Slot replikasi yang tidak digunakan harus dihilangkan. Slot bergantung pada log Postgres WAL dan katalog sistem yang relevan sampai perubahan telah dibaca oleh konsumen. Jika konsumen Anda gagal atau belum dikonfigurasi dengan benar, log yang tidak dikonsumsi akan menumpuk dan mengisi penyimpanan Anda. Selain itu, log yang tidak dikonsumsi meningkatkan risiko pengemasan ID transaksi. Kedua situasi ini dapat menyebabkan server menjadi tidak tersedia. Oleh karena itu, slot replikasi logis perlu dikonsumsi terus menerus. Jika slot replikasi logis tidak lagi digunakan, hilangkan segera.

Kolom 'aktif' dalam tampilan pg_replication_slots akan menunjukkan apakah ada konsumen yang tersambung ke slot.

SELECT * FROM pg_replication_slots;

Atur pemberitahuan pada Penyimpanan yang digunakan dan metrik Lag maksimum untuk memberi tahu Anda ketika nilai meningkat melewati ambang normal.

Penting

Anda harus menghilangkan slot replikasi yang tidak digunakan. Gagal melakukannya dapat menyebabkan server tidak tersedia.

Cara menghilangkan slot

Jika Anda tidak secara aktif mengonsumsi slot replikasi, Anda harus menghilangkannya.

Untuk menghilangkan slot replikasi yang disebut test_slot menggunakan SQL:

SELECT pg_drop_replication_slot('test_slot');

Penting

Jika Anda berhenti menggunakan decoding logis, ubah azure.replication_support kembali ke replica atau off. Detail WAL yang dipertahankan oleh logical akan berlebihan dan harus dinonaktifkan ketika decoding logis tidak digunakan.

Langkah berikutnya