Posgtresql Promote Replikasi Server pada Ubuntu 20.04

Pada materi sebelumnya kita sudah dapat melakukan replikasi antara Server Master dan Server Standby dengan baik. Tapi pernahkan kalian berpikir “Apakah mungkin Server Standby dapat menjadi Master apabila jika Server Master nantinya dalam keadaan downtime?”. Yap, sangat memungkinkan. Pada kesempatan ini saya akan menjelaskan bagaimana caranya Server yang awalnya berperan sebagai Standby menjadi Master dan Server yang awalnya berperan sebagai Master menjadi Standby. Proses ini kemungkinan dilakukan apabila Server yang awalnya berperan menjadi Server Master mengalami downtime atau permasalahan lainnya.

Promote Replikasi Server

Pada Postgresql, terdapat proses dimana kita dapat mengubah sebuah server yang awalnya bekerja sebagai Standby menjadi Master, proses ini disebut Promote. Promote merupakan metode dimana ketika sebuah server yang awalnya berperan sebagai Standby mengambil alih peran server Master dan Server yang berperan Master menjadi Server Standby atau Replika.

Proses ini sangat berguna apabila pada Server Master mengalami masalah dan perlu digantikan dengan Server Standby yang siap mengambil alih peran Server Master. Dengan Promote ini juga dapat memudahkan kita dalam melakukan transisi Server Master dan Standby dengan cepat dan mengurangi downtime dan kehilangan data penting yang sangat diperlukan.

Sebelum melakukan konfigurasi ini pastikan Server Postgresql yang akan digunakan sudah dikonfigurasi Master Standby Replikasi. Pastikan juga Replikasi dapat berjalan dengan baik dan benar.

Topologi

Disini saya menggunakan 2 Server dengan spesifikasi dibawah:

  • Server Master –> Server Slave
    • IP address: 10.23.2.71
  • Server Slave –> Server Master
    • IP address: 10.23.2.79

Step 1 – Konfigurasi Server Standby menjadi Master

  1. Masuk sebagai sudo pada Server Standby.$sudo su
  2. Masuk ke akun postgres pada postgresql.#su - postgres
  3. Lakukan promote pada Server Standby menggunakan perintah dibawah. Kemudian keluar dari akun postgres.$psql -c "select pg_promote();" $exit
  4. Lakukan perubahan file konfigurasi postgresql di file postgresql.conf yang terletak di direktori /etc/postgresql/<versi postgresql>/main.#vim /etc/postgresql/12/main/postgresql.confUncomment beberapa perintah yang mendeklarasikan Server Satndby menjadi Server Master. Perintah synchronous_standby_names berfungsi agar server Master dapat melisten atau mendengarkan semua server Standby. listen_address berfungsi agar server dapat mendengarkan semua alamat IP yang dapat mengakases.#uncomment perintah dibawah listen_addresses = '*' synchronous_standby_names = '*'Kemudian, comment perintah hot_standby agar Server tidak berjalan lagi menjadi Server Standby. Selain dicomment kalian juga dapat dideklarasikan dengan perintah off, perintah ini juga dapat mematikan fungsi server agar tidak menjadi Standby.#comment perintah dibawah #hot_standby = on
  5. Lakukan perubahan pada file pg_hba.conf, untuk menambahkan host – host tertentu yang dapat mengakses server Master utama.#vim /etc/postgresql/12/main/pg_hba.confTambahkan perintah dibawah agar dapat mengizinkan alamat IP tertentu yang dapat mengakses postgresql. Disini saya hanya mengizinkan IP Server Standby dan Server Master.#tambahkan perintah dibawah host replication all 10.23.2.71/32 md5 host replication all 10.23.2.79/32 md5
  6. Setelah melakukan semua konfigurasi, restart layanan postgresql agar konfigurasi yang telah dilakukan dapat berjalan.#systemctl restart postgresql

Step 2 – Konfigurasi Server Master menjadi Standby

  1. Masuk ke Server Master dan Masuk juga sebagai user sudo.$sudo su
  2. Selanjutnya, kita berhentikan dulu layanan postgresql.#systemctl stop postgresql
  3. Lakukan perubahan pada file konfigurasi postgresql.#vim /etc/postgresql/12/main/postgresql.confUncomment beberapa perintah dibawah agar Server Master dapat menjadi Server Standby. Perintah hot_standby disini berfungsi untuk mendeklarasikan sebuah server berperan sebagai Standby server. listen_address berfungsi agar server dapat mendengarkan semua alamat IP yang dapat mengakases#uncomment perintah dibawah listen_addresses = '*' hot_standby = onComment perintah dibawah, agar Server Master tidak lagi berjalan sebagai Server Master.#comment perintah dibawah #synchronous_standby_names = '*'
  4. Hapus semua file postgresql yang ada pada direktori /var/lib/postgresql/12/main/.#rm -rf /var/lib/postgresql/12/main/*
  5. Lakukan backup pada Server Standby untuk mengambil file yang ada pada Server Master.$pg_basebackup -R -h <ip atau domain server master> -U rep_user -D /var/lib/postgresql/12/main -P example $pg_basebackup -R -h 10.23.2.79 -U rep_user -D /var/lib/postgresql/12/main -P Password: // password user replikasi 32540/32540 kB (100%), 1/1 tablespace $exit
  6. Selanjutnya, kita akan melakukan perubahan pada file postgresql.auto.conf. Disini kita menambahkan perintah tambahan yaitu application_name sebagai identitas Server, Disini saya tetap memberikan nama server-master, karena awalnya server ini bernama server-master.#vim /var/lib/postgresql/12/main/postgresql.auto.conf #tambahkan perintah application_name=(nama server slave) primary_conninfo = 'user=rep_user password=password host=10.23.2.79 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any application_name=server-master'
  7. Terakhir, jalankan kembali layanan postgresql yang tadinya diberhentikan. Kemudian, restart layanan untuk memastikan bahwa konfigurasi yang telah dilakukan dapat berjalan.#systemctl start postgresql #systemctl restart postgresql

Step 3 – Pengujian atau Pengetesan

  1. Masuk sebagai user sudo ke Server Master (sebelumnya server slave).$sudo su
  2. Masuk ke akun admin pada Server Master yang awalnya berperan sebagai server Standby.#su - postgresLalu jalankan perintah dibawah untuk menampilkan informasi dari Server Master (Sebelumnya berperan sebagai server Slave) yang terhubung.$psql -c "select usename, application_name, client_addr, state, sync_priority, sync_state from pg_stat_replication;"Jika berhasil maka akan menampilkan hasil seperti dibawah.Dapat kita lihat ada beberapa informasi seperti username dan alamat IP dari server Slave (sebelumnya server Master), disini kita juga melihat state dari server Slave sudah sinkron atau belum.
  3. Selanjutnya kita akan melakukan uji coba untuk melihat apakah database server Master (Sebelumnya berperan sebagai server Standby) dan server Standby (sebelumnya berperan sebagai server Master) sudah saling sinkron atau belum. Masuk ke akun admin postgresql pada server Master dan buatlah suatu database.#su - postgres $createdb test-slave
  4. Kemudian masuk ke akun admin postgresql pada server yang menjadi Slave untuk melihat apakah database test-slave yang dibuat pada server Master sudah muncul atau belum pada server Slave.#su - postgres $psql -lJika berhasil harusnya muncul nama database test-slave yang tadinya sudah dibuat.

Kesimpulan

Promote merupakan proses yang digunakan pada postgresql untuk mengalihkan sebuah server yang awalnya berperan sebagai Standby menjadi server yang berperan sebagai Master dan mengubah peran server Master menjadi server yang berperan sebagai Standby. Dengan menggunakan promote kita dapat dengan mudah memindahkan data informasi penting yang terdapat pada database ketika server Master utama mengalami downtime dan mencegah kehilangan data yang penting. Proses promote ini juga memberikan banyak manfaat lainnya dalam menghadapi kegagalan server, meningkatkan ketersediaan sistem, dan memberikan fleksibilitas dalam pengelolaan infrastruktur database. Sebagai catatan ketika kalian ingin melakukan replikasi ulang pada kedua server, kalian cukup melakukan kembali konfigurasi diatas. Sekian dari artikel yang saya buat, Semoga dapat membantu~

Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya.

Penulis : M. Syawal Saputra