Fitur replikasi PostgreSQL memungkinkan data dicerminkan dari satu basis data (primer) ke basis data lain (replika), memastikan ketersediaan tinggi dan pemulihan bencana. Salah satu fitur utama yang ditawarkan PostgreSQL untuk mengelola replikasi streaming adalah slot replikasi. Slot ini memastikan bahwa data WAL (Write-Ahead Logging) dipertahankan hingga telah dikonsumsi dengan aman oleh semua replika, membuat replikasi lebih andal dan kuat.
Dalam posting ini, kita akan memandu Anda melalui proses pengaturan slot replikasi fisik di PostgreSQL, mulai dari pembuatan di server primer hingga konfigurasi replika untuk menggunakan slot tersebut.
Apa itu Slot Replikasi?
Slot replikasi di PostgreSQL adalah mekanisme yang digunakan untuk melacak status replikasi, memastikan bahwa basis data primer menyimpan semua file WAL yang diperlukan untuk replikasi sampai file tersebut dikonsumsi oleh replika. Slot replikasi penting untuk menjaga sinkronisasi antara basis data primer dan replika dalam pengaturan replikasi streaming. Dengan menggunakan slot replikasi, Anda dapat mencegah basis data primer mendaur ulang segmen WAL sebelum replika memprosesnya.
Ada dua jenis slot replikasi di PostgreSQL:
- Slot Replikasi Fisik: Digunakan dalam pengaturan replikasi streaming, di mana replika menerima salinan data basis data primer.
- Slot Replikasi Logis: Digunakan untuk replikasi logis, di mana hanya perubahan basis data tertentu (misalnya, INSERT, UPDATE, DELETE) yang direplikasi.
Dalam posting ini, kita akan fokus pada slot replikasi fisik, yang biasanya digunakan dalam pengaturan replikasi standar.
Langkah-langkah Konfigurasi Slot Replikasi
1. Membuat Slot Replikasi di Server Primer
Pertama, kita perlu membuat slot replikasi di server primer. Ini akan memungkinkan replika untuk mengonsumsi data WAL dan tetap sinkron dengan primer.
Untuk membuat slot replikasi fisik, masuk ke basis data primer dan jalankan perintah SQL berikut:
SELECT pg_create_physical_replication_slot('replicationServer1');Dalam kasus ini, kita menamai slot replikasi kita replicationServer1. Anda dapat memilih nama yang sesuai dengan lingkungan Anda. Perintah ini membuat slot yang akan melacak data WAL untuk tujuan replikasi.
2. Mengonfigurasi Server Replika
Setelah slot replikasi dibuat di server primer, kita perlu mengonfigurasi server replika untuk terhubung ke primer menggunakan slot replikasi ini. Ini dilakukan dengan mengedit file recovery di replika.
Di PostgreSQL 10 dan sebelumnya, konfigurasi replikasi dilakukan di file recovery. Untuk PostgreSQL 12 dan yang lebih baru, konfigurasi dipindahkan ke auto dan adanya file standby.
Di Replika:
- Buka file
recovery(atauautodi versi yang lebih baru) di server replika. - Tambahkan baris berikut untuk menentukan server primer dan slot replikasi:
# Mengatur sumber replikasi (server primer)primary_conninfo = 'host=ip_primer port=5432 user=replikator password=password_anda'# Menentukan nama slot replikasi yang akan digunakanprimary_slot_name = 'replicationServer1'# Opsional: Menentukan file untuk mempromosikan replika jika terjadi kegagalantrigger_file = '/tmp/postgresqlr.5432'primary_conninfo: Berisi informasi koneksi untuk server primer, seperti host, port, dan kredensial.
primary_slot_name: Menentukan nama slot replikasi yang akan digunakan replika. Dalam kasus ini, yaitu replicationServer1.
trigger_file: Menentukan file yang, saat dibuat, memicu promosi replika menjadi peran utama jika terjadi failover.
3. Memulai Ulang Server Replika
Setelah melakukan perubahan pada file recovery, server replika perlu dimulai ulang untuk menerapkan konfigurasi.
Anda dapat memulai ulang server replika menggunakan perintah berikut:
sudo systemctl restart postgresqlIni akan menyebabkan replika terhubung ke server primer dan mulai melakukan streaming data WAL menggunakan slot replicationServer1 yang telah kita konfigurasi sebelumnya.
4. Memverifikasi Status Replikasi
Setelah memulai ulang server replika, penting untuk memverifikasi bahwa semuanya berfungsi sebagaimana mestinya.
Di Server Primer:
Anda dapat memeriksa status replikasi dan melihat apakah replika menggunakan slot tersebut dengan menjalankan kueri berikut di server primer:
SELECT * FROM pg_stat_replication;Ini akan menampilkan detail tentang koneksi replikasi, termasuk slot replikasi yang digunakan.
Di Server Replika:
Anda juga dapat memeriksa tampilan pg_stat_wal_receiver di server replika untuk memverifikasi bahwa replika secara aktif menerima data WAL dari primer:
SELECT * FROM pg_stat_wal_receiver;Tampilan ini akan menampilkan informasi tentang status replikasi saat ini, termasuk data WAL yang diterima dari server primer.
Selain itu, Anda dapat memverifikasi bahwa slot aktif di primer dengan memeriksa tabel pg_replication_slots:
SELECT * FROM pg_replication_slots WHERE slot_name = 'replicationServer1';5. Pemecahan Masalah
Jika replika tidak menggunakan slot atau replikasi tidak berfungsi seperti yang diharapkan, periksa log di server primer dan replika untuk mencari pesan kesalahan. Masalah umum mungkin termasuk masalah konektivitas jaringan, kredensial yang salah, atau nama slot yang tidak cocok.
Anda juga dapat menghapus dan membuat ulang slot replikasi jika diperlukan:
SELECT pg_drop_replication_slot('replicationServer1');SELECT pg_create_physical_replication_slot('replicationServer1');Kesimpulan
Dengan mengikuti langkah-langkah ini, kita telah mengonfigurasi slot replikasi fisik untuk replikasi streaming di PostgreSQL. Slot replikasi adalah alat yang kuat yang membantu memastikan data WAL dipertahankan hingga replika mengonsumsinya, membuat pengaturan replikasi Anda lebih andal dan kuat.
Setelah diatur, Anda dapat yakin bahwa replika Anda akan tetap sinkron dengan server primer, dan slot replikasi akan membantu mengelola aliran data WAL dengan cara yang terkendali.