Instalasi Bucardo, master to master replikasi untuk database PostgreSQL

  Bucardo adalah software replikasi master to master untuk database Postgresql. Bucardo yang saya pergunakan adalah bucardo versi 5 beta, tepatnya versi 4.99.5 dan dapat di download dihalaman ini.  Sampai saat ini kecepatan replikasi yang dapat saya peroleh adalah > 200 record per detik untuk replikasi antar kota. Hasil ini dapat berbeda untuk jenis applikasi yang anda gunakan.

Konfigurasi yang saya miliki :

Berikut langkah langkah yang dilakukan untuk instalasi bucardo :

  • Backup database di server 1 dan extract di server 2, dengan ini maka kedua database tersebut memiliki struktur dan data yang identik.
  • Update package ubuntu dengan menambahkan beberapa package yang dibutuhkan

$> apt-get install make libdbi1 libdbi-perl libdbix-safe-perl libdbix-simple-perl libdbd-pg-perl libboolean-perl postgresql-contrib postgresql-plperl-9.1

  • Check nilai ulimit di kernel linux. Nilai ulimit ini akan di pergunakan untuk menentukan nilai parameter max_stack_depth di postgresql.

$> ulimit -s

8192

  • Berdasarkan infomasi diatas menghasilkan nilai 8192 Kb. Artinya saya dapat menaikan parameter max_stack_depth hingga 8M. Tetapi kita akan pakai setengahnya saja. Parameter max_stack_depth ini dipergunakan untuk memperbesar kemampuan query yang menggunakan klausa IN. Kemudian update file konfigurasi postgresqlnya.

$> vim /etc/postgresql/9.1/main/postgresql.conf

max_stack_depth = 4M

  • Install language plperlu di postgresql

$> psql -h 127.0.0.1 -U postgres
SQL> CREATE LANGUAGE PLPERLU;
SQL> CREATE LANGUAGE PLPGSQL;

  • Download Bucardo versi 5 Beta disini.
  • ekstrak file hasil download tersebut.
  • Kemudian lakukan kompilasi .

$> cd bucardo-4.99.5
$> perl Makefile.PL
$> make
$> sudo make install

  • Install Bucardo, dan ubah setting koneksinya seperti berikut

$> bucardo install

Current connection settings:
1. Host: 127.0.0.1
2. Port: 5432
3. User: postgres
4. Database: postgres
5. PID directory: /var/run/postgresql
Enter a number to change it, P to proceed, or Q to quit: P

$>

  • Check instalasi bucardo

$> bucardo –version

  • Tambahkan database ke bucardo

$> bucardo add db db1 dbname=mydatabase dbhost=192.16.0.1 dbuser=postgres dbpass=password
$> bucardo add db db2 dbname=mydatabase dbhost=192.16.0.2 dbuser=postgres dbpass=password

  • Daftarkan semua table dan sequence ke bucardo. Herd dapat dianalogikan sebagai kumpulan object database

$> bucardo add table all tables herd=db_herd
$> bucardo add sequence all sequences herd=db_herd

  • Daftarkan database yang ada didalam bucardo ke dalam database group

$> bucardo add dbgroup db_group db1:source db2:source

  • Sinkronisasi ke dua database tersebut untuk install triggernya dan start replikasi

$> bucardo add sync db_sync herd=db_herd dbs=db_group
$> bucardo start

  • Setelah start anda dapat melakukan testing insert, delete, update dari masing masing sisi server.
  • Perlu diingat yang di replikasikan adalah perintah DML yakni insert, update, delete.
  • Done.
Silahkan mencoba.

Author: Nareswara

Ordinary People with eye glasses

37 thoughts on “Instalasi Bucardo, master to master replikasi untuk database PostgreSQL”

  1. nanya dikit…

    setelah install semua ok, pas lagi running ‘bucardo show all’

    Errornya gini:
    DBI connect(‘dbname=bucardo’,’bucardo’,…) failed: FATAL: Peer authentication failed for user “bucardo” at /usr/local/bin/bucardo line 239

    sama pas execute add db:
    bucardo add db db1 dbname=mydatabase dbhost=192.16.0.1 dbuser=postgres dbpass=password

    Kenapa ya bisa gitu?
    Trims

  2. Error itu artinya bucardo gagal koneksi ke server postgresql dimana bucardo di install, coba cek pg_hba.conf di server postgresqlnya dan konek melalui pgsql dahulu.

    1. Betul sekali. Jika salah satu servernya crash, maka replikasinya terhenti. Ada plus minus nya dari feature ini. Dalam pengalaman saya, ini adalah hal yang positif, karena saya jadi tahu kalau ada server yang crash, saya lepaskan dari bucardo, bucardo di start lagi, replikasi jalan terus. Kita mungkin hanya akan kehilangan update data dari server yang crash itu, tetapi bisa kita inputkan lagi melalui server yang lain. Itu pengalaman saya, bagaimana dengan mas dono ?

  3. 1. apakah penginstallan bucardo dilakukan di semua server ?
    2. apakah bisa bucardo di pake failover database ?
    mohon petunjuk
    terima kasih sebelumnya

    1. Mas Guntur, berikut jawaban saya.
      1. Tidak, di salah satu server saja, milik saya seperti ini, A=Master_1, B=Master_2 dan C=Web_server+Bucardo
      2. FailOver ? tentu saja bisa, tetapi pasti akan ada “jeda data” yang belum ter-replikasi, jeda data itu yang harus kita entry ulang. Seberapa banyak ? “sebanyak transaksi yang terjadi”, anda harus melakukan simulasi dan memperkirakan sendiri berapa jumlah data yang dapat “hilang” dalam scenario anda.

  4. pada saat sinkronisasi muncul seperti ini :

    root@lpse2:~# bucardo add sync epns_sync herd=db_herd dbs=epns_group
    Failed to add sync: DBD::Pg::st execute failed: ERROR: error from Perl function “validate_sync”: error from Perl function “validate_sync”: Table “public.blacklist_nasional” must specify a primary key! at line 117. at line 30. at /usr/local/bin/bucardo line 3865.

    1. Mas Guntur, Replikasi di bucardo itu memerlukan primary key, jadi pastikan semua tabel yang di daftarkan untuk replikasi harus memiliki primary key.

    1. Kang Joyo, maksudnya salah satu server crash ? itu permanent atau temporer ? maksudnya crash karena rusak hardware atau karena jaringan yang putus sementara ? Jikalah karena jaringan yang putus sementara lebih baik kita menunggu sampai jaringan itu kembali normal. Tetapi jika karena kerusakan hardware server, maka lebih baik kita keluarkan server itu dari replikasi kita dengan step seperti ini :

      1. $> bucardo stop
      2. $> bucardo remove sync db_sync
      3. $> bucardo remove dbgroup db_group
      4. $> bucardo remove db db3
      5. $> bucardo add dbgroup db_group . . .
      6. $> bucardo add sync db_sync . . .

      7. $> bucardo start

  5. Terima kasih, saran yang bagus.

    saya membuat replikasi dari 3 server (master to master):
    1. server A => database A
    2. server B => database B
    3. server C => database A dan database B
    Ketika koneksi server B putus maka replikasi server A juga mati. namun dengan saran kang Nareswara sangat membantu untuk mengatasi persoalan crash permanent karena hardware rusak.
    Apabila yang terjadi adalah crash temporer maka kita bisa menunggu sampai koneksi sambung lagi, Namun yang belum saya temukan adalah gimana cara memantau koneksi antar server replikasi pada bucardo yang sifatnya real time?

    1. @kang joyo : memantau itu bagaimana ekspektasi nya ? memantau “putus koneksi”-nya ataukah yang lainnya ? mungkin dapat di perjelas kembali pertanyaanya.

    1. @kang joyo : Kebetulan saya pakai pentaho data integration, salah satu applikasi dari pentaho. Applikasi ini dapat di pergunakan untuk memonitor file log.bucardo.
      Saya jalankan setiap 1 jam sekali pakai cron di linux, kalau di windows pakai AT. Jika dia menemukan kata kata “ERROR” maka applikasinya akan send email ke saya.
      Durasi nya bisa kita atur sendiri, semisal kang joyo butuh 15 menit sekali, ya di atur di cron-nya.

  6. @bang nareswara
    Saya punya db1, db2, dan db3. Nah data yang ada pada ketiga db tersebut akan di copy ke db4. akan tetapi data antara db1, db2 dan db3 tidak tersinkronisasi maksudnya data pada db1 tidak akan ada pada db2 begitu seterusnya. Akan tetapi data di ketiga db tersebut berada pada db4. kira-kira apa yang harus saya lakukan bang? Mohon petunjuknya. Terima Kasih

    1. sebelum di jawab … saya mau bertanya :
      1. db4, apa hanya dipergunakan untuk mengumpulkan data dari ketiga server yang lain ? ataukah dipergunakan untuk transaksi juga ?
      2. apakah schema, dan nama tabel di ketiga db itu sama semuanya ?

      mohon info itu dulu

  7. tanya dikit nih …

    saya sudah testing konsep ini dan sudah jalan, lalu kalau ada kasus seperti ini
    bisa jalan nggak untuk konsep seperti ini web + bucardo + db(live) di server 1 dan akan dimirroring ke server 2. karena muncul error seperti ini saat execute
    bucardo_ctl add all table herd=db_herd db=db1

    Can’t call method “prepare” on an undefined value at /usr/bin/bucardo_ctl line 3620.

  8. Pada Replikasi di bucardo itu memerlukan primary key,lalu bagai mana kalau saya mempunyai view apakah bisa di replikasi?

    1. @Bang Ali, View itu kan logic object, seperti juga store-procedure, atau functions, dan tentu saja karena logic dia tidak akan ter-replikasi. Object yang akan ter-replikasi adalah object object DML, yang dapat di kenai perintah insert, update, delete, truncate dan sequence.

  9. bang, klo misalnya paketan
    libdbi1 libdbi-perl libdbix-safe-perl libdbix-simple-perl libdbd-pg-perl libboolean-perl postgresql-contrib postgresql-plperl-9.1
    untuk centos apa aja ya?
    tapi saya mau coba pake source, bukan ambil dr repo. hhe mksh sblumnya

  10. abaikan pertanyaan saya kemaren mas,hhe
    masalah baru muncul ketika saya mau mencoba.
    hal yang ingin di coba adalah
    saya memakai 1 mesin, dan ada 2 postgres yang berbeda port. sm” memakai localhost.
    dan yang ingin dicoba itu,
    1. master A, postgre 1
    2. master B, postgre 2
    – misalnya master A dapat 100 data. maka server B otomatis dapat 100 juga.
    -misalnya master A dapat 100 data, server b dapat 100 data. otomatis setiap server mempunyai 200 data.
    -continue replicate, ketika salah 1 server mati, maka sewaktu server yang mati tsb mnyala maka tetap ter-replicate data yang di B.

    nb: data yang masuk A dan B sama.
    apa ada sedikit penjelasan mas? hhe

    1. mas Ory, pertanyannya apa ya ?, contoh replikasi di dalam blog ini adalam master to master, jadi kalau entry di master A, maka akan ter-replikasi ke master B, dan sebaliknya, jadi kalau di entry data 100 transaksi di master A, kemudian entry lagi di master B sejumlah 100 data juga, ya total data akan 200.

  11. @Nareswara

    haha, udah bisa mas 😀
    cuma yang continue replication blum bisa. sewaktu salah satu server postgres mati,dan di nyalakan kembali,data nya tidak sama antara yang ada di master A sm master B. gmna ya mas solusinya?

    1. @Bang Ory, tidak sama itu bagaimana maksudnya ? apakah pada saat replikasi di sync data sudah sama ? kemudian salah satu server mati, server lain tetap melakukan transaksi, dan setelah server yang mati menyala kembali, dan syncronisasi dijalankan lagi, data tetap tidak sama ?

      Jikalau benar seperti itu, mungkin harus di cek lagi configurasi bucardonya.

      Karena di tempat saya, setelah salah satu server yang mati di nyalakan kembali, data langsung otomatis sinkronisasi, sehingga data akan selalu terupdate.

  12. oh iya 1 lgi mas, salah 1 server saya prnah di install bucardo v 4.5. penginstallan dilakukan memakai prefix yang sesuai dgn saya mau dir nya. nah sehrusnya utk uniinstall bucardo secara mudahnya hapus dir aja kan?
    nah masalahnya saya udh hapus dir, tetapi pada sistemnya tidak terhapus sprtinya. dicoba cek version,masih munclu bucardo version 4.5.0. dan ketika dicoba install 4.99.0 tidak bisa dilakukan krna sistemnya sudah mendeteksi bucardo terinstall. maybe upgrade bs. cuma sewaktu di coba di upgrade data” lama sudah terhapus pada dir yang saya hapus sngaja. gmna ya pencerahannya? 😀

    1. @Bang Ory, wah kalau seperti itu harus uninstall dulu bucardo v.4.5 nya. Harus dipastikan bersih. Itu saya baca dari manualnya sih, karena saya disini pakai komputer yang fresh-install. Jadi belum pernah mengalami seperti itu.

  13. @Nareswara
    iya mas,seharusnya ter-replikasi.
    masalahnya skrng pada mesin B nyala,mesin yang A, mati. pas nyala kembali tidak ter-replikasi.
    tapi klo mesin B mati, mesin A nyala. pas nyala kembali mesin B nya ter-replikasi. jadi bingung hahahaha. saya sedang mencoba memakai 1 mesin lgi skrng. krna mesin A postgresnya di barengin sama bucardo(shrusnya g ada masalah ya) hahaha tq bantuannya bang 😀

  14. @Nareswara
    bisakah saya buat bucardo untuk mengumpulkan database yang berbeda dari berbagai server?
    db1 server a => server replikasi
    db2 server b => server replikasi
    db 1 dan db2 berbeda database dan schema namun akan direplikasi ke 1 server replikasi.

    mohon bantuannya

    1. Bisa pak,

      db1, schema1, server1
      db2, schema2, server2

      jika di replikasi ke db3, schema3, server3 dalam 1 schema… misal public …ada syaratnya yakni, semua nama object di db1 dan db2 tidak boleh ada yang bentrok …… misal …. tabel db1.public.my_user dan db2.public.my_user ….. ini akan bentrok di db3, karena di replikasikan ke dalam 1 schema

      jika di replikasikan ke db3 dalam schema yang berbeda… misal schema1 dan schema2 … maka buatlah dalam 2 HERD …

  15. @Nareswara
    mau tanya.
    1. untuk bucardo gak bisa di jalanin di server menggunakan OS windows ya?

    2. bucardo bisa gak menjalan sistem replikasi yang seperti ini :
    server 1 di pusat (online) , server 2 di cabang a (online) , server 3 di cabang b(gak online)
    apakah untuk server 3 bucardo bisa mengimport sebagian data untuk transaksi hari itu
    kemudian mengeksport data itu ke server 1 dan 2

    Makasih

    1. @Jeff

      1. Bucardo harus terinstall di linux, sementara postgresql nya bisa di windows, linux atau mac
      2. Bisa mas Jeff, arsitekturnya seperti berikut :
      – ada 2 server bucardo, 1 di kantor pertama dan 1 di kantor ketiga.
      – schema replikasi di kantor pertama, itu antara kantor pertama dan kedua, boleh full master master atau master slave
      – schema replikadi di kantor ketiga, itu antara kantor pertama dan kantor ke tiga, harus master master, pilih saja table table tertentu untuk di replikasikan.

  16. @Nareswara
    Ada kantor teman minta penawaran untuk project intalasi & konfigurasi Bucardo,
    replikasi Master-Master, mungkin berminat

Leave a Reply

Your email address will not be published. Required fields are marked *