Cara Mengonfigurasi Replikasi Streaming PostgreSQL 12 di CentOS 8


Basis data PostgreSQL mendukung beberapa solusi replikasi untuk membangun aplikasi dengan ketersediaan tinggi, skalabel, dan toleran terhadap kesalahan, salah satunya adalah Write-Ahead Log (WAL ) Pengiriman. Solusi ini memungkinkan server siaga diimplementasikan menggunakan pengiriman log berbasis file atau replikasi streaming, atau jika memungkinkan, kombinasi kedua pendekatan tersebut.

Dengan replikasi streaming, server database standby (replication slave) dikonfigurasikan untuk terhubung ke server master/utama, yang mengalirkan data WAL ke standby saat dibuat, tanpa menunggu WAL file yang harus diisi.

Secara default, replikasi streaming bersifat asinkron di mana data ditulis ke server siaga setelah transaksi dilakukan di server utama. Ini berarti ada sedikit penundaan antara melakukan transaksi di server master dan perubahan terlihat di server siaga. Salah satu kelemahan dari pendekatan ini adalah jika server master mogok, transaksi apa pun yang tidak dikomit mungkin tidak dapat direplikasi dan hal ini dapat menyebabkan hilangnya data.

Panduan ini menunjukkan cara menyiapkan replikasi streaming master-standby Postgresql 12 di CentOS 8. Kami akan menggunakan “slot replikasi ” untuk standby sebagai solusi untuk menghindari server master mendaur ulang segmen WAL lama sebelum standby menerimanya.

Perhatikan bahwa dibandingkan metode lain, slot replikasi hanya mempertahankan jumlah segmen yang diketahui diperlukan.

Lingkungan Pengujian:

Panduan ini mengasumsikan Anda terhubung ke server database master dan standby sebagai root melalui SSH (gunakan perintah Sudo jika diperlukan jika Anda terhubung sebagai pengguna biasa dengan hak administratif):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Kedua server database harus menginstal Postgresql 12, jika tidak, lihat: Cara Menginstal PostgreSQL dan pgAdmin di CentOS 8.

Catatan: PostgreSQL 12 hadir dengan perubahan besar pada implementasi dan konfigurasi replikasi seperti penggantian recovery.conf dan konversi parameter recovery.conf ke parameter konfigurasi PostgreSQL normal, sehingga lebih mudah untuk mengonfigurasi replikasi cluster.

Langkah 1: Mengonfigurasi Server Database Utama/Master PostgreSQL

1. Di server master, beralihlah ke akun sistem postgres dan konfigurasikan alamat IP yang akan digunakan oleh server master untuk mendengarkan koneksi dari klien.

Dalam hal ini, kita akan menggunakan * yang berarti semua.

su - postgres
psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

Perintah SQL ALTER SYSTEM SET adalah fitur canggih untuk mengubah parameter konfigurasi server, langsung dengan kueri SQL. Konfigurasi disimpan dalam file postgresql.conf.auto yang terletak di akar folder data (misalnya /var/lib/pgsql/12/data/) dan baca tambahan dengan yang disimpan di postgresql.conf. Namun konfigurasi pada versi sebelumnya lebih diutamakan daripada konfigurasi pada file berikutnya dan file terkait lainnya.

2. Kemudian buat peran replikasi yang akan digunakan untuk koneksi dari server standby ke server master, menggunakan program createuser. Pada perintah berikut, flag -P meminta kata sandi untuk peran baru dan -e menggemakan perintah yang dibuat dan dikirim oleh createuser ke server database.

su – postgres
createuser --replication -P -e replicator
exit

3. Kemudian masukkan entri berikut di akhir file konfigurasi autentikasi klien /var/lib/pgsql/12/data/pg_hba.conf dengan bidang database disetel ke replikasi seperti yang ditunjukkan pada tangkapan layar.

host    replication     replicator      10.20.20.8/24     md5

4. Sekarang restart layanan Postgres12 menggunakan perintah systemctl berikut untuk menerapkan perubahan.

systemctl restart postgresql-12.service

5. Selanjutnya, jika Anda menjalankan layanan firewalld, Anda perlu menambahkan layanan Postgresql dalam konfigurasi firewalld untuk mengizinkan permintaan dari server siaga ke master.

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

Langkah 2: Membuat Cadangan Basis untuk Bootstrap Server Siaga

6. Selanjutnya, Anda perlu membuat cadangan dasar server master dari server siaga; ini membantu mem-bootstrap server siaga. Anda perlu menghentikan layanan postgresql 12 di server siaga, beralih ke akun pengguna postgres, membuat cadangan direktori data (/var/lib/pgsql/12/data/), lalu menghapus semua yang ada di bawahnya seperti yang ditunjukkan, sebelum mengambil cadangan dasar.

systemctl stop postgresql-12.service
su - postgres
cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
rm -rf /var/lib/pgsql/12/data/*

7. Kemudian gunakan alat pg_basebackup untuk mengambil cadangan dasar dengan kepemilikan yang tepat (pengguna sistem basis data yaitu Postgres, dalam akun pengguna Postgres) dan dengan izin yang tepat.

Pada perintah berikut, opsinya:

  • -h – menentukan host yang merupakan server master.
  • -D – menentukan direktori data.
  • -U – menentukan pengguna koneksi.
  • -P – memungkinkan pelaporan kemajuan.
  • -v – mengaktifkan mode verbose.
  • -R – memungkinkan pembuatan konfigurasi pemulihan: Membuat file standby.signal dan menambahkan pengaturan koneksi ke postgresql.auto.conf di bawah data direktori.
  • -X – digunakan untuk menyertakan file log write-ahead (file WAL) yang diperlukan dalam cadangan. Nilai stream berarti melakukan streaming WAL saat cadangan dibuat.
  • -C – memungkinkan pembuatan slot replikasi yang diberi nama dengan opsi -S sebelum memulai pencadangan.
  • -S – menentukan nama slot replikasi.
pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
exit

8. Ketika proses pencadangan selesai, direktori data baru di server siaga akan terlihat seperti pada tangkapan layar. standby.signal dibuat dan pengaturan koneksi ditambahkan ke postgresql.auto.conf. Anda dapat membuat daftar isinya menggunakan perintah ls.

ls -l /var/lib/pgsql/12/data/

Budak replikasi akan berjalan dalam mode “Hot Standby ” jika parameter hot_standby disetel ke aktif (nilai default) di postgresql.conf dan ada file standby.signal di direktori data.

9. Sekarang kembali ke server master, Anda seharusnya dapat melihat slot replikasi yang disebut pgstandby1 ketika Anda membuka tampilan pg_replication_slots sebagai berikut.

su - postgres
psql -c "SELECT * FROM pg_replication_slots;"
exit

10. Untuk melihat pengaturan koneksi yang ditambahkan dalam file postgresql.auto.conf, gunakan perintah cat.

cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Sekarang mulai operasi database normal di server siaga dengan memulai layanan PostgreSQL sebagai berikut.

systemctl start postgresql-12

Langkah 3: Menguji Replikasi Streaming PostgreSQL

12. Setelah koneksi berhasil dibuat antara master dan standby, Anda akan melihat proses penerima WAL di server standby dengan status streaming, Anda dapat memeriksa ini menggunakan tampilan pg_stat_wal_receiver.

psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

dan proses pengirim WAL yang sesuai di master/server utama dengan status streaming dan sync_state async, Anda dapat memeriksa tampilan pg_stat_replication pg_stat_replication ini.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Dari tangkapan layar di atas, replikasi streaming tidak sinkron. Di bagian selanjutnya, kami akan mendemonstrasikan cara mengaktifkan replikasi sinkron secara opsional.

13. Sekarang uji apakah replikasi berfungsi dengan baik dengan membuat database pengujian di server master dan periksa apakah database tersebut ada di server siaga.
[master]postgres=# MEMBUAT teknik DATABASE;
[siaga]postgres=# \l

Opsional: Mengaktifkan Replikasi Sinkron

14. Replikasi sinkron menawarkan kemampuan untuk melakukan transaksi (atau menulis data) ke database utama dan standby/replika secara bersamaan. Ini hanya mengonfirmasi bahwa suatu transaksi berhasil ketika semua perubahan yang dilakukan oleh transaksi tersebut telah ditransfer ke satu atau lebih server siaga sinkron.

Untuk mengaktifkan replikasi sinkron, synchronous_commit juga harus disetel ke aktif (yang merupakan nilai default, sehingga tidak perlu ada perubahan apa pun) dan Anda juga perlu menyetel parameter synchronous_standby_names ke nilai yang tidak kosong. Untuk panduan ini, kami akan mengaturnya ke semua.

psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Kemudian muat ulang layanan PostgreSQL 12 untuk menerapkan perubahan baru.

systemctl reload postgresql-12.service

16. Sekarang ketika Anda menanyakan proses pengirim WAL di server utama sekali lagi, proses tersebut akan menampilkan status streaming dan sync_state < kuat>sinkronisasi.

psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Kita telah sampai pada akhir panduan ini. Kami telah menunjukkan cara menyiapkan replikasi streaming database master-standby PostgreSQL 12 di CentOS 8. Kami juga membahas cara mengaktifkan replikasi sinkron di cluster database PostgreSQL.

Ada banyak kegunaan replikasi dan Anda selalu dapat memilih solusi yang memenuhi lingkungan TI Anda dan/atau persyaratan spesifik aplikasi. Untuk detail selengkapnya, buka Server Siaga Pengiriman Log dalam dokumentasi PostgreSQL 12.