PostgreSQL

[PostgreSQL] Replication Slot

[PostgreSQL] Replication Slot

Sejak PostgreSQL 9.4, ada parameter baru di Postgres yaitu max_replication_slot. Apa sih ini?

Replication slot adalah mekanisme dalam Postgres yang secara otomatis akan memastikan bahwa WAL files dari host master dijaga keberadaannya sampai semua standby server menerimanya. Dengan kata lain, slot replikasi akan memastikan bahwa WAL files yang ada di host master TIDAK dihapus sampai semua server standby sudah mengambilnya. Slot replikasi ini sebenarnya bisa digantikan dengan parameter wal_keep_segments dan archive_command, hanya saja cara kerja keduanya berbeda karena slot memastikan kebutuhan WAL files terpenuhi sedangkan wal_keep_segments menggunakan parameter jumlah file. Adapun archive_command memberikan beban kerja kepada server untuk memprosesnya.

Kelebihan lain slot replikasi adalah host master memastikan bahwa penghapusan baris/record tidak mengakibatkan konflik recovery dengan server standby, bahkan jika server standby dalam kondisi terputus untuk beberapa saat. Parameter hot_standby_feedback sebenarnya bisa menghalau konflik recovery, hanya saja ia tidak menjamin record yang terhapus pada host master dijaga karena standby putus koneksi. Parameter lain yang mungkin digunakan sebelum adanya slot replikasi adalah vacuum_defer_cleanup_age yang harus diset ke nilai cukup tinggi untuk menjamin standby terhindar dari konflik. Slot replikasi menghapuskan kedua masalah pada parameter sebelumnya.

Adapun karakter pada slot replikasi adalah berikut:

  • parameter yang digunakan adalah max_replication_slot
  • hanya bisa diset saat server startup
  • default nilainya 0
  • wal_level harus pada status replica atau di atasnya
  • slot replikasi harus diberi nama yang bisa terdiri dari lowercase, underscore, dan/atau angka
  • slot replikasi yang telah dibuat dapat dilihat pada view pg_replication_slots
  • contoh perintah pembuatan slot physical:
    SELECT * FROM pg_create_physical_replication_slot('standby_no_1');
  • contoh perintah pembuatan slot logical:
    SELECT * FROM pg_create_logical_replication_slot('standby_no_1');
  • contoh slot pada standby (recovery.conf):
    primary_slot_name = 'standby_no_1'
  • contoh perintah penghapusan slot:
    SELECT * FROM pg_drop_replication_slot('standby_no_1');

Image from: https://iso.500px.com/baby-elephant-photos/

Leave a comment