Dalam artikel ini, kita akan membahas bagaimana mengatasi kesalahan "replication slot" yang aktif untuk PID XXX ketika menggunakan strategi RollingUpdate pada Kubernetes Deployment. Kesalahan ini terjadi karena aplikasi kami menggunakan debezium-postgres connector untuk memublikkan events on Kafka dari PostgreSQL.
Latar Belakang
Aplikasi kami menggunakan PGOUTPUT debezium plugin dan beberapa konfigurasi PostgreSQL sebagai berikut:
max_wal_senders = 4
max_replication_slots = 4
wal_level = logical
wal_receiver_timeout = 300s
wal_sender_timeout = 300s
Kesalahan ini terjadi ketika aplikasi kami menggunakan strategi RollingUpdate pada Kubernetes Deployment, yang membuat beberapa pod menjadi tidak sinkron dengan replication slot.
Mengatasi Kesalahan
Pada dasarnya, kesalahan ini terjadi karena dua atau lebih client yang berbeda mencoba menggunakan replication slot yang sama. Jika kita ingin dua client memanfaatkan logical decoding, maka harus dibuat dua replication slot yang berbeda. Sebaliknya, pastikan bahwa setiap client yang menggunakan replication slot dihentikan sebelum koneksi dilakukan.
Dalam kasus kami, aplikasi kami menggunakan debezium-postgres connector untuk memublikkan events on Kafka dari PostgreSQL. Oleh karena itu, kita harus membuat dua replication slot yang berbeda dan menggunakannya secara bergantian.
Konfigurasi
Untuk mengatasi kesalahan ini, kita dapat melakukan beberapa konfigurasi sebagai berikut:
- Buat dua replication slot yang berbeda menggunakan perintah
pg_create_physical_replication_slot
ataupg_create_logical_replication_slot
. - Gunakan dua replication slot yang berbeda dalam aplikasi kami.
- Pastikan bahwa setiap client yang menggunakan replication slot dihentikan sebelum koneksi dilakukan.
Dengan melakukan konfigurasi tersebut, kita dapat mengatasi kesalahan "replication slot" yang aktif untuk PID XXX dan memastikan bahwa aplikasi kami berjalan dengan baik dalam strategi RollingUpdate pada Kubernetes Deployment.