Konfigurasi PostgreSQL BDR di CentOS 7 (Multi-Master Replication)


Konfigurasi PostgreSQL BDR Replication di CentOS 7 - Pada tutorial postgres sebelumnya saya sudah menjelaskan bagimana cara melakukan konfigurasi postgresql master slave replication. Kali ini saya akan menjelaskan bagimana cara untuk membuat multi master replication pada PostgreSQL. Mungkin sobat sudah sangat familiar sekali dengan konfigurasi master slave, tapi disini konfigurasi postgresql akan sedikit berbeda dan source yang digunakan juga bukan postgresql biasa melainkan postgres yang sudah di patch oleh komunitas postgres 2nd Quadrant.

Baca Juga :
Install PostgreSQL Source di CentOS 7
Konfigurasi PostgreSQL Replication di CentOS7

Postgres-BDR

Postgres BDR (Bi-Directional Replication) merupakan source postgre multi-master replication system yang didesign 2nd Quadrant untuk memberikan high availability geographically distributed clusters. Sederhananya, anda bisa membuat sebuah cluster rdbms active secara terpisah meskipun berbeda tempat ataupun negara.

Infomation Host:
Host 1
IP : 192.168.56.101 (node1.dimasrio.com)

Host 2
IP : 192.168.56.102 (node2.dimasrio.com)

Konfigurasi PostgreSQL BDR

Setup postgresql dan plugin di node master (node1) dan member (node2).

Install dependencies.
yum group install "Development Tools"
yum install git readline-devel zlib-devel
Download postgresql dan plugin BDR.
cd /root

git clone -b bdr-pg/REL9_4_STABLE https://github.com/2ndQuadrant/bdr.git postgresql-bdr

git clone -b bdr-plugin/next git://git.postgresql.org/git/2ndquadrant_bdr.git bdr-plugin
Compile postgresql.
cd postgresql-bdr
mkdir /usr/lib/postgresql-bdr
./configure --prefix=/usr/lib/postgresql-bdr
make all
make install
Compile plugin bdr.
cd bdr-plugin/
./autogen.sh
PATH=/usr/lib/postgresql-bdr/bin/:$PATH ./configure
make
make install
Setup user postgres dan systemd.
adduser postgres
mkdir /var/lib/pgbdr
chown postgres. /var/lib/pgbdr/
su - postgres -c "/usr/lib/postgresql-bdr/bin/initdb -D /var/lib/pgbdr"
nano /usr/lib/systemd/system/postgresql-bdr.service
Tambahkan konfigurasi dibawah ini pada postgresql-bdr.service.
[Unit]
Description=Postgresql-9.4 BDR Service
After=syslog.target systemd-user-sessions.service

[Service]
User=postgres
Group=postgres
Type=forking
TimeoutSec=120
ExecStart=/usr/lib/postgresql-bdr/bin/pg_ctl -D /var/lib/pgbdr start
ExecStop=/usr/lib/postgresql-bdr/bin/pg_ctl -D /var/lib/pgbdr stop
ExecReload=/usr/lib/postgresql-bdr/bin/pg_ctl -D /var/lib/pgbdr reload

[Install]
WantedBy=multi-user.target
Setup environment user postgres dan tambahkan variable PATH pada baris terakhir .bashrc. Save dan kemudian exit dari text editor dan user postgres.
su - postgres
nano ~/.bashrc
PATH=$PATH:/usr/lib/postgresql-bdr/bin/
exit
Setup postgresql.conf.
nano /var/lib/pgbdr/postgresql.conf
listen_addresses = '*'
max_connections = 500
port = 5432
shared_preload_libraries = 'bdr'
wal_level = logical
track_commit_timestamp = on
max_wal_senders = 10
max_replication_slots = 10
max_worker_processes = 10
log_destination ='stderr'
logging_collector = on
log_directory ='pg_log'
log_filename='postgresql-%Y-%m-%d.log'
log_line_prefix='%m|%r|%d|%u|%e|'
log_statement=all
Set hostname pada /etc/hosts.
nano /etc/hosts
192.168.56.101 node1.truemoney.co.id node1
192.168.56.102 node2.truemoney.co.id node2
Saya anggap sobat sudah melakukan semua setup diatas pada masing-masing node master dan member. Selanjutnya konfigurasi akan berbeda pada node master dan member.

Konfigurasi Node1 - Master

Definisikan host pada pg_hba.conf.
nano /var/lib/pgbdr/pg_hba.conf
Tambahkan pada baris terakhir pg_hba.conf.
# DBR Master
host all all 192.168.56.101/32 trust
host all all 192.168.56.102/32 trust

host replication postgres 192.168.56.102/32 trust

Konfigurasi Node2 - Member

Definisikan host pada pg_hba.conf.
nano /var/lib/pgbdr/pg_hba.conf
Tambahkan pada baris terakhir pg_hba.conf.
# DBR Master
host all all 192.168.56.101/32 trust
host all all 192.168.56.102/32 trust

host replication postgres 192.168.56.101/32 trust
Sampai disini semua konfigurasi sudah selesai. Sebelum sobat menjalankan service postgresql bdr pastikan juga menginstall plugin postgres btree-gist. Biasanya tanpa plugin ini bdr tidak akan berjalan dengan baik.

Install postgres btree-gist di masing-masing node.
cd /root/postgresql-bdr/contrib/btree_gist/
make
make install
Selanjutnya start service postgres-bdr di masing-masing node.
systemctl start postgresql-bdr

Setup Database BDR 

Node 1 - Master
postgres=# create database dimzrio;
postgres=# \c dimzrio;
dimzrio=# create extension btree_gist;
dimzrio=# create extension bdr;
dimzrio=# select bdr.bdr_group_create (local_node_name:='node1',
node_external_dsn:='host=192.168.56.101 port=5432 dbname=dimzrio');

Node 2 - Member
postgres=# create database dimzrio;
postgres=# \c dimzrio;
dimzrio=# create extension btree_gist;
dimzrio=# create extension bdr;
dimzrio=# select bdr.bdr_group_join(local_node_name :='node2', node_external_dsn:='host=192.168.56.102 port=5432 dbname=dimzrio', join_using_dsn:='host=192.168.56.101 port=5432 dbname=dimzrio');
Selanjutnya cek apakah bdr sudah berjalan dengan baik.

Output :

Create table dan insert.


Demikian tutorial postgres mengenai cara Konfigurasi PostgreSQL BDR (Bi-Directional Replication) di CentOS 7. Semoga bermanfaat bagi kita semua dan selamat mencoba..!!!!


EmoticonEmoticon