Replikasi Database PostgreSQL dengan Bucardo

Diawali dengan kebutuhan kantor tempat saya mengais rejeki, untuk mengupgrade database yang dipakai yaitu versi 9.3 ke versi 9.4 – yang pada saat tulisan ini dibuat adalah versi mayor stabil terbaru dari PostgreSQL. Untuk mempermudah proses switching dan meminimalisir (red: meniadakan) downtime, maka alangkah indahnya jika database baru bukanlah sekedar read replica atau sifatnya slave.

Pilihan terbaik adalah menggunakan master to master replication yang mana hal ini sulit diejawantahkan (*ehm) karena tiada gading yang tak menikah dengan gisele. Maksudnya PostgreSQL belum mempunyai tools bawaan yang mampu melakukan ini. Menurut kabar di milis dan forum, versi PostgreSQL berikutnya akan segera memiliki fitur ini.

Singkat cerita pilihan jatuh kepada Bucardo, mungkin dia cukup baik dan kami sebagai calon mertua merestui hubungan Bucardo dengan database kami. 🙂

Apa itu Bucardo

Bucardo adalah sebuah FOSS yang mampu mereplikasi database PostgreSQL secara asinkron dengan menggunakan trigger sebagai alat utama untuk bekerja. Bucardo mempunyai kemampuan multi master dan multi slave replication. Bahkan mampu melakukan multi sync.

Instalasi Bucardo

Dalam sub artikel ini saya menggunakan mesin dengan sistem operasi Ubuntu 14.04. Maka langkah pertama adalah menambahkan repository PostgreSQL ke list repo ubuntu. Hal ini dilakukan karena secara default, versi Trusty akan memasang postgreSQL, psql, pgdump dan lain – lain dengan versi 9.3.

tambahkan line ini:

Tambahkan PPA Key nya:

Pasang dependency nya:

Install Bucardo dari source code nya:

Setting Bucardo

Agar Bucardo dapat bekerja dengan baik, maka dibutuhkan file pada direktori /var/run dan /var/log.

Langkah selanjutnya adalah membuat file .bucardorc yang berisi konfigurasi database PostgreSQL lokal yang nantinya akan menjadi database controller Bucardo.

Agar hidup … proses lebih mudah, alangkah baiknya kita menyimpan data mengenai database yang akan kita replikasi baik database source dan destination ke dalam environment variable. Tapi ini opsional, jika dirasa kurang baik dari segi keamanan, maka kamu bisa melakukannya dengan metode lain.

isi dengan informasi database lokal (controller bucardo)

lanjutkan dengan informasi database source dan destination yang akan kita replicate

Kemudian masukkan informasi tersebut kedalam file .pgpass

Oh iya, jangan lupa untuk membuat database “bucardo” di lokal / di mesin controller replication :

Instalasi / Inisialisasi Bucardo

kemudian akan muncul opsi setting seperti ini:

Sesuaikan dengan konfigurasi postgres pada mesin controller atau dalam contoh di sini adalah mesin lokal (localhost).

Tekan nomor yang akan diubah, misalnya mau mengubah opsi user, maka tekanlah nomor 3. Setelah semua konfigurasi seperti yang diinginkan maka tekan P.

Samakan Struktur

Selepas mengkonfigurasi bucardo, maka sesuai tulisan tebal tak bermakna di atas adalah menyamakan struktur database pada destinasi dengan source database yang akan di replikasi.

jalankan perintah ini :

Buat database nya di rumah mertua, eh di database destination server :

Kemudian import struktur yang sudah di – dump tadi ke database :

Mulai Replikasi

Nah, sekarang destination dan source sudah punya struktur yang sama. Maka marilah kita menambahkan konfigurasi pada bucardo -nya sendiri.

Kemudian tambahkan table yang akan di replikasi :

Contoh di atas adalah konfigurasi jika kita ingin mereplikasi seluruh table pada database source beserta sequences nya. Oh iya, HERD adalah term pada bucardo yang berarti sebuah set yang berisikan table dan sequence. 1 herd artinya 1 set table dan sequencesnya. Kita juga dapat mereplikasi satu atau dua table tertentu. ./bucardo add table db=source_db

Konfigurasi herd ini sangatlah menentukan replikasi nanti. Jika salah mengkonfigurasi herd, maka hasil replikasi dapat kurang baik atau bahkan tak sesuai dengan rencana. Namun, herd masih dapat ditambah atau dikurangi.

Bucardo mempunyai kemampuan untuk melakukan sync dengan multiple server bahkan. Dalam contoh di sini saya hanya memberikan contoh sesuai dengan herd yang saya buat di atas. Nanti bisa disambung di episode berikutnya, tergantung Pak Raam Punjabi. Lah..

Saatnya menambahkan sync nya :

Kemudian jalankan sync nya :

Untuk melihat status sync jalankan

Troubleshooting

Pada saat berlangsungnya proses replikasi atau sync, yang perlu diperhatikan adalah status bucardo, log postgres di 3 tempat : controller, destination dan source, dan log bucardo sendiri. Log bucardo dapat di monitor pada /var/log/bucardo/

Terutama pada log bucardo, perhatikan dengan seksama apa yang bucardo ‘lakukan’. Jangan sampai dia mengkhianati anda drama . Setiap kali bucardo melakukan sync delta akan dituliskan lognya. Namun sayangnya bucardo tidak memberitahukan aktifitasnya pada saat pertama kali melakukan full copy. Di sini bucardo sering kedapatan tidak mensync dengan baik.

Tips berikutnya adalah sebelum kita melakukan replikasi, ada baiknya kita memastikan semua table mempunyai primary key. Jika tidak, proses sync tidak akan dapat diteruskan. Nah, sayangnya hal ini baru diberitahukan pada saat kita sudah start sync. Nah, sedangkan herd sudah terlanjur dibuat. Mau lapor mertua? Atau ngadu ke KPK? Bukan lah. cara termudahnya adalah dengan menghapus herd

untuk melihat semua object bucardo lakukan :

untuk lebih amannya, list ulang semua kebutuhan sync (tables dan sequences) kemudian tambahkan pada herd. Dalam kasus yang saya kerjakan di kantor, saya sengaja memisahkan table yang berkapasitas kecil dan besar ke beberapa herd yang berbeda. Rumusnya 1 herd = 1 sync. Maka dengan memisahkan herd, saya juga memisahkan sync nya. Ini dilakukan agar resource (CPU, Network, IOPs, Memory) digunakan dengan efektif. Bucardo dapat melakukan beberapa sync dalam waktu bersamaan atau simultan.

Final Check

Seperti yang saya paparkan di atas. Bucardo tak menuliskan log pada saat melakukan full copy. Log nya tidak deskriptif. Jadi kita tidak dapat mengetahui secara pasti berapa row yang sudah tercopy. Langkah tepat adalah dengan melakukan integrity check atau secara simple dengan melakukan count pada setiap table. Count pada table dengan jutaan rows tentu saja akan memakan waktu dan dapat memperlambat replikasi, namun ada baiknya dilakukan saja untuk keperluan monitoring. Melakukan integrity check tak perlu terlalu sering.

Setelah memastikan database ter-replikasi sesuai rencana, maka stop bucardo :

Pada saat melakukan stop, pastikan log bucardo tetap dipantau.

Feel free untuk memberikan feedback 🙂 Thanks

Referensi:

  1. Bucardo
  2. Compose.io

via Tumblr http://ift.tt/1hKU7nn

Leave a Reply