Tutorial Membangun Replication Set di PostgreSQL
Replication set adalah sebuah fitur high avaibility yang dimiliki oleh PostgreSQL. Kita dapat melakukan peniruan atau replikasi data pada database yang kita bangun diatas PostgreSQL. Dengan menggunakan replication set ini kita dapat menjaga data yang ada di master node dan sewaktu - waktu bila mengalami kegagalan pada master, slave node dapat diangkat menjadi master untuk sementara waktu.
Replication set ini sudah menjadi fitur bawaan di PostgreSQL. Kamu dapat mencobanya dengan mengikuti tutorial ini atau mengikuti petunjuk yang ada di dokumentasinya. Selain itu kamu dapat menemukan konfigurasi yang tepat dengan kasus yang kamu hadapi dengan membaca dokumentasi resmi yang dimiliki oleh PostgreSQL.
Karena ini hanya replication set, suatu waktu bila ukuran database kamu sudah membengkak dan tak sanggup ditangani oleh service provider yang me-hosting database kamu dengan PostgreSQL, maka kamu harus pindah ke solusi cluster set yang masih kompatibel dengan PostgreSQL.
PostgreSQL sendiri merupakan salah satu produk database yang memiliki lisensi open source. Jadi selain PostgreSQL sendiri, terdapat banyak produk turunan dari PostgreSQL dengan kemampuan yang lebih mumpuni seperti AWS Redshift, VoltDB, CockroachDB, dan masih banyak produk turunan dari PostgreSQL lainnya.
Prasyarat
Hal yang pertama diperlukan adalah pastikan kamu mempunyai dua instance yang akan digunakan untuk uji coba replication set ini. Di tutorial ini kita akan gunakan Ubuntu Server. Kamu dapat membelinya dari Digital Ocean atau Linode, mengajukan proposal ke program studi, atau mencari edisi pelajar dari cloud provider seperti AWS, GCP, dan Azure
Kita asumsikan kamu sudah mempunyai dua instance yang siap digunakan . Kedua instance tersebut akan digunakan untuk master node dan slave node. Kedua instance tersebut harus berada dalam satu network untuk menghindari request latency.
Kita asumsikan bahwa master node memiliki alamat IP 192.168.33.20 dan untuk slave node adalah 192.168.33.21.
Dan kita pilih versi PostgreSQL yang digunakan adalah versi 9.5. Dan editor teks berbasis konsol yang digunakan adalah nano bukan vim ataupun emacs.
1. Setting di Master Node
Masuk ke master node melalui SSH yang sudah disiapkan sebelumnya dan kita install PostgreSQL di dalam instance tersebut:
$ sudo apt-get update $ sudo apt-get install postgresql postgresql-contrib postgresql-client
Sekarang mari kita berikan password untuk user postgres:
$ sudo passwd postgres
Perintah diatas akan menampilkan sebuah prompt dan kamu harus mengisinya dengan password yang diinginkan, misal `SUPERrahasia_12345. Sekarang silahkan masuk ke psql console untuk membuat user yang diberikan hak akses untuk replication set.
$ psql postgres=# CREATE USER my_rep_user REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD 'password_kamu_apa';
Setelah berhasil membuat user untuk replication set. Silahkan diperiksa terlebih dahulu dengan perintah berikut ini:
postgres=# \du
Bila dengan perintah diatas kamu dapat melihat my_rep_user pada hasil query, maka user untuk replication set telah berhasil dibuat. Sekarang mari kita pindah ke direktori PostgreSQL untuk melakukan konfigurasi replication set pada master node.
$ cd /etc/postgresql/9.5/main
Direktori tempat konfigurasi PostgreSQL dapat berbeda tergantung dari sistem operasi yang digunakan. Direktori diatas tersedia hanya untuk Ubuntu Server
Pertama edit dahulu file pg_hba.conf dengan menggunakan nano:
$ nano pg_hba.conf
Tambahkan baris ini di tempat yang sudah disediakan oleh file konfigurasi:
host replication my_rep_user 192.168.33.21/32 md5
Konfigurasi diatas harus diberi jarak dengan menggunakan tab. Sekarang simpan hasil perubahan pada nano. Alamat IP yang diisikan pada file pg_hba.conf adalah alamat IP slave. Kemudian kita edit file lain yaitu postgresql.conf
$ nano postgresql.conf
Sekarang cari setiap bagian dibawah ini pada file postgresql.conf, hapus tanda komentar pada setiap variabel yang diperlukan, dan ubah isi variabel tersebut sesuai dengan konfigurasi dibawah ini:
listen_addresses = 'localhost,192.168.33.20' wal_level = 'hot_standby' archive_mode = on archive_command = 'cd .' max_wal_senders = 3 wal_keep_segments = 8 hot_standby = on
Apa maksudnya? misal cari variabel dengan nama listen_addresses kemudian hapus tanda komentar di sebelahnya dan ubah nilainya sesuai dengan konfigurasi diatas. Dan begitupun dengan variabel lainnya yang perlu diubah di dalam postgresql.conf. Ingat listen_addresses yang harus diisikan adalah alamat dari instance saat ini.
Setelah melakukan konfigurasi diatas, kita restart PostgreSQL melalui service-nya. Bukan instance-nya:
$ service postgresql restart
Hal ini dilakukan untuk memuat konfigurasi baru kedalam service PostgreSQL.
2. Setting di Slave Node
Masuk ke master node melalui SSH yang sudah disiapkan sebelumnya dan kita install PostgreSQL di dalam instance tersebut:
$ sudo apt-get update $ sudo apt-get install postgresql postgresql-contrib postgresql-client
Sekarang mari kita berikan password untuk user postgres:
$ sudo passwd postgres
Perintah diatas akan menampilkan sebuah prompt dan kamu harus mengisinya dengan password yang diinginkan, misal `SUPERrahasia_12345. Lalu matikan service PostgreSQL dengan perintah berikut:
$ service postgresql stop
Sekarang mari kita pindah ke direktori PostgreSQL untuk melakukan konfigurasi replication set pada master node.
$ cd /etc/postgresql/9.5/main
Direktori tempat konfigurasi PostgreSQL dapat berbeda tergantung dari sistem operasi yang digunakan. Direktori diatas tersedia hanya untuk Ubuntu Server
Pertama edit dahulu file pg_hba.conf dengan menggunakan nano:
$ nano pg_hba.conf
Tambahkan baris ini di tempat yang sudah disediakan oleh file konfigurasi:
host replication my_rep_user 192.168.33.20/32 md5
Konfigurasi diatas harus diberi jarak dengan menggunakan tab. Sekarang simpan hasil perubahan pada nano. Alamat IP yang ditunjuk adalah alamat IP dari master node. Kemudian kita edit file lain yaitu postgresql.conf
$ nano postgresql.conf
Sekarang cari setiap bagian dibawah ini pada file postgresql.conf, hapus tanda komentar pada setiap variabel yang diperlukan, dan ubah isi variabel tersebut sesuai dengan konfigurasi dibawah ini:
listen_addresses = 'localhost,192.168.33.21' wal_level = 'hot_standby' archive_mode = on archive_command = 'cd .' max_wal_senders = 3 wal_keep_segments = 8 hot_standby = on
Ingat listen_addresses yang harus diisikan adalah alamat dari instance saat ini. Sekarang mari melangkah ke langkah berikutnya.
3. Mengaktivasi Replikasi dari Master ke Slave
Masih di slave node, sekarang kita sinkronisasi konfigurasi dari master node ke slave node dengan perintah berikut ini:
$ su - postgres $ mv 9.5/main 9.5/main_original $ pg_basebackup -h 192.168.33.20 -D /var/lib/postgresql/9.5/main -U my_rep_user -v -P
Lalu setelah proses backup berhasil di dalam folder main PostgreSQL buatlah file recovery.conf:
$ cd /var/lib/postgresql/9.5/main $ nano recovery.conf
Kemdian isi dengan konfigurasi berikut:
standby_mode = 'on' primary_conninfo = 'host=192.168.33.20 port=5432 user=my_rep_user password=password_kamu_apa' trigger_file = '/tmp/postgresql.trigger.5432'
Setelah berhasil melakukan konfigurasi nyalakan service PostgreSQL:
$ service postgresql start
Lalu periksa apakah ada error atau tidak:
$ less /var/log/postgresql/postgresql-9.5-main.log
Atau periksa koneksi replikasi di master node melalui query ini:
$ psql -x -c "select * from pg_stat_replication;"
4. Uji Replication Set dengan DDL dan DML
Untuk mengujinya, silahkan buat database baru di master node dan buatlah tabel di dalamnya. Strukturnya silahkan sesuaikan dengan keinginan kamu.
Kemudian isi tabel tersebut dengan beberapa baris data menggunakan SQL insert.
Sekarang coba hitung jumlah baris pada tabel yang baru saja dibuat di master node:
postgres=# SELECT count(id) FROM mahasiswa;
Lalu masuklah ke slave node melalui SSH dan eksekusi SQL diatas setelah memilih database yang baru saja dibuat. Bila hasil query-nya sama berarti replication set sudah berhasil dibuat. Atau kamu pun bisa juga hanya dengan melihat daftar database yang sudah dibuat di master sebelumnya.
5. Berbagai Skenario yang Dapat Dicoba
Berikut ini beberapa skenario yang dapat kamu coba untuk menguji seberapa tangguh replication set di PostgreSQL:
- Skenario 1, matikan slave node biarkan master node tetap menyala. Lakukan perubahan data atau struktur table di master node Kemudian nyalakan kembali slave node. Maka perubahan data atau struktur database akan tereplikasi ke slave node kembali
- Skenario 2, biarkan slave node menyala, matikan master node. Maka walaupun data berhenti tereplikasi ke slave node. Slave node akan menunggu sampai master node menyala kembali dan master node akan mereplikasikan kembali perubahan ke slave node
- Skenario 3, lakukan perubahan data di slave node. Kamu tidak akan bisa melakukannya karena perubahan hanya dapat dilakukan di master node
- Skenario 4, matikan dua - duanya, lalu nyalakan kembali server-nya maka master node tetap akan mereplikasikan data ke slave node
Masalahnya adalah skenario diatas hanya berlaku untuk ujicoba ini, mungkin skenario diatas dapat terjadi di level production atau malah justru ada masalah lain yang terjadi diluar skenario diatas.
6. Referensi
-
Tidak ada komentar:
Posting Komentar