High Availability PostgreSQL Cluster dengan Pgpool-II (Bagian ke-2)

Komunitas openSUSE Indonesia

TL;DR: Karena cukup panjang tulisan akan dibagi dalam 3 bagian

  • Bagian 1 : membahas instalasi dan konfigurasi master postgresql
  • Bagian 2 : membahas instalasi dan konfigurasi slave postgresql
  • Bagian 3 : membahas instalasi dan konfigurasi pgpool-II

Tulisan ini adalah Bagian ke-2.

3. Instalasi PostgreSQL slave node

Instal PostgreSQL di mesin anda (instal di dua mesin slave, jika saat ini anda hanya punya satu mesin slave tidak mengapa)

1
2
sudo zypper ar -e -f https://download.opensuse.org/repositories/server:/database:/postgresql/openSUSE_Leap_15.1/ postgresql
sudo zypper in --no-recommends postgresql postgresql-server postgresql-contrib postgresql12-pgpool-II postgresql12 postgresql12-server postgresql12-contrib

Pastikan bahwa instalasi anda bekerja, service postgresql dapat berjalan.

1
2
3
sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service
sudo systemctl status postgresql.servie

Pastikan bahwa tidak ada error. Selanjutnya matikan service postgresql.

1
sudo systemctl stop postgresql.service

Kemudian masuk ke mesin slave, hapuslah directory /var/lib/pgsql/data

1
rm -rf /var/lib/pgsql/data

selanjutnya jalankan

1
pg_basebackup -h ip_address_master -p 5432 -U nama_user_replication -v -D /var/lib/pgsql/data -Fp -Xs -P -R

Kalau sukses maka akan muncul seperti:

Setelah proses di atas selesai maka direktori /var/lib/pgsql/data akan terbentuk dan berisi:

Ada sebuah berkas penting yang terbentuk di direktori data pada slave  setelah menjalankan pg_basebackup yaitu file standby.signal. File ini musti ada dalam direktori tersebut sehingga postgres dapat menentukan bahwa status server adalah slave/standby. File ini terbentuk otomatis saat menjalankan pg_basebackup dengan opsi “-R”. Jika tidak terbentuk maka buatlah file tersebut secara manual

1
touch standby.signal

Hal ini berhubungan dengan replication slot yang telah dibicarakan di atas. Pada PostgreSQL 12 akan terbentuk 2 file secara otomatis postgresql.auto.conf dan standby.signal. File postgresql.auto.conf secara otomatis berisi

1
2
3
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=nama_user_replikasi password=password_user_replikasi host=ip_address_master port=port_master sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

Sedangkan penanda bahwa server adalah standby/slave adalah file standby.signal

Untuk PostgreSQL 11 ke bawah maka ada versi di mana postgresql.auto.conf terbentuk tetapi tidak ada isinya. Sehingga secara manual harus dibuat file recovery.conf yang berisi seperti:

1
2
standby_mode = 'on'
primary_conninfo = 'user=nama_user-replikasi password=password_user_replikasi host=ip_address_master port=port_master sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

Sedangkan file standby.signal tidak terbentuk, dan sebagai gantinya diganti dengan baris standby_mode = ‘on’ pada file recovery.conf.

Jika kita yakin bahwa database sudah tereplikasi dan direktori data sudah terbentuk dengan baik maka tambahkan konfigurasi postgresql.conf di slave dengan 2 baris ini:

1
2
hot_standby = on
hot_standby_feedback = on

hot_standby berfungsi untuk memberi tahu server bahwa server hanya digunakan untuk query read-only (load balancing).

hot_standby_feedback berfungsi untuk mencegah baris-baris data dihapus terlalu cepat dari sisi slave. Hal ini dilakukan dengan memberi tahu server master ID transaksi yang terlama sehingga proses vacuum menunda penghapusan baris tertentu. Penjelasan mengenai vacuum dapat dibaca di sini.
Selanjutnya aktifkan postgresql di mesin slave:

1
2
sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service

Memeriksa status replikasi

Untuik memastikan bahwa replikasi antara master dan slave sudah berjalan sempurna maka login ke server master dan jalankan

1
2
sudo -i -u postgres
psql -x -c "select * from pg_stat_replication"

Jika sukses maka akan memperlihatkan status replikasi, misalnya
 

atau jika menggunakan pgadmin misalnya:

Coba juga misalnya dengan membuat database baru di master. Harusnya langsung terbentuk pula di slave

Master

Slave

Bersambung ke Bagian ke-3.

Have fun,

medwinz

 

No Comments

Add your comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.