“Live” Backup Untuk Zimbra Open Source Edition

Salah satu problem pada Zimbra Open Source Edition adalah tidak adanya fitur backup. Fitur backup hanya dimiliki pada Zimbra Network Edition.

Beberapa hari yang lalu, saya sempat diskusi dengan salah satu kawan tentang live backup untuk Zimbra Open Source Edition. Dan dia memberikan beberapa URL sebagai referensi untuk saya baca. Yang pertama referensinya adalah tentang ZCS to ZCS Migrations. Dan referensi yang kedua adalah sebuah script perl untuk melakukan backup semua account di zimbra.

Berbekal dua referensi itu saya membuat bash script untuk melakukan backup account user di zimbra. Script ini akan melakukan backup account untuk semua user. Selain itu proses backup juga hanya dilakukan di mesin yang terinstalasi zimbra. Oh, hampir lupa, untuk restore data bisa dilakukan dengan membuat sebuah account kosong dan kemudian berkas tgz ini di import melalui menu Preferences > Export/Import di zimbra.


Keuntungan menggunakan backup dengan metode seperti ini adalah tidak memerlukan proses stop/start pada zimbra. Dengan kata lain zimbra masih berjalan dengan normal dan semua layanan masih bisa diakses dengan normal dan sementara itu proses backup tetap berjalan. Inilah yang saya maksud dengan “Live” backup :).

Script ini rencananya nanti akan saya tambahkan fitur rsync melalui ssh, penambahan fitur rsync dan ssh di inspirasi dari wiki zimbra mengenai backup.

Ide besarnya adalah sebagai berikut:

  1. Backup masing-masing account di zimbra dalam format tgz. Misal di backup di /tmp/zimbra (anggap saja ini dilakukan di server A)
  2. Ekstrak masing-masing tgz di dalam folder /tmp/zimbra tersebut ke sebuah direktori tertentu misal ke /tmp/ekstrak
  3. Lakukan sinkronisasi /tmp/ekstrak ke server lainnya (misalnya di server B di direktori /tmp/newbackup) dengan menggunakan rsync.
  4. Selanjutnya bash script ini akan melakukan proses kompresi masing-masing account dalam format tgz di server B, atau bisa saja ada script tersendiri di server B yang akan melakukan tahapan ini.
  5. Kompress semua account format tgz yang ada di /tmp/newbackup (Server B) ke dalam satu kompresi besar misalkan dalam format tar.bz2 dengan label tanggal, bulan dan tahun.
  6. Move/copy berkas tar.bz2 tersebut ke tape drive atau ke hard disk eksternal.
  7. Hapus semua berkas-berkas yang sudah tidak dibutuhkan, namun jangan hapus direktori /tmp/newbackup yang ada di server B, karena nanti direktori ini akan disinkronisasi lagi dengan direktori /tmp/ekstrak yang ada di server A.
  8. Aktifkan crontab untuk script ini agar melakukan proses secara berkala.

Sebenarnya proses nomor 2, 3, 4 dan 5 bisa di-bypass, jadi dari nomor 1 bisa langsung loncat ke proses nomor 5. Jika langsung di-bypass maka proses kompresi di nomor 5 akan langsung dilakukan di server A. Setelah itu tinggal ditransfer ke server lain (bisa melalui scp, rsync ataupun metode lainnya). Salah satu kelemahan jika di-bypass maka pada saat proses transfer data akan berjalan lama jika file yang di backup berukuran besar.

Buat yang mau memodifikasi script ini silakan saja, tapi jangan lupa dishare lagi ya.

30 thoughts on ““Live” Backup Untuk Zimbra Open Source Edition

  1. #1: vavai. yup. bantuin di modifikasi dong scriptnya, biar bisa lebih lengkap :). saya lagi ngurusin sesuatu nih, jadi belum sempet ngoprek scriptnya lagi. btw, saya barusan request join ke milis id-zimbra. di approve ya.

  2. Barusan saya coba, kalau pakai multi domain, ganti baris ini :

    NAME=`echo $ACCOUNT | awk -F@ ‘{print $1}’`;

    jadi seperti ini :

    NAME=`echo $ACCOUNT`;

    Karena kalau tidak, nama account yang sama dibeda domain akan tertimpa.

  3. #10: can masagi, si vavai udah memodifikasi script ini untuk proses migrasi hingga restore. coba kunjungi blognya dia.

  4. Boss.. Oom Vavai mah pake OpenSuse he he 😛
    Sayah pakai CentOS jadi rada susah penyesuaiannya… latas pas implementasi ada error sbb:
    “ERROR: service.FAILURE (system failure: GET failed, status=501 not implemented yet)”

    Kenapa ya?

  5. #12: can masagi, kalau liat pesan errornya fitur itu belum di implementasikan. emangnya pake zimbra versi berapa?

  6. Mas Kl Error nya begini knp ya?

    ERROR: service.INVALID_REQUEST (invalid request: can only be used with “zmprov -l/–ldap”)
    mv: cannot stat `*.tgz’: No such file or directory

    aku pake zimbra versi 6
    thanks ya

  7. Saya nemui error spt ini :
    “ERROR: zclient.IO_ERROR (Unable to get ?fmt=tgz)(cause: java.net.SocketTimeoutException Read timed out)”

    saya coba untuk modif code ini:
    su – zimbra -c “zmmailbox -z -m $ACCOUNT getRestURL ‘//?fmt=tgz’ > $DIR/$NAME.tgz”

    menjadi

    su – zimbra -c “zmmailbox -z -m $ACCOUNT getRestURL ‘//?fmt=zip’ > $DIR/$NAME.zip”

    Hasilnya : tetap error spt diatas.
    Zimbra yang saya pake, versi 6.1

    penyebab apa yach ? … sepertinya karena ada account yang memiliki ukuran mailbox sangat besar.

    lalu gimana cara mengatasinya ?

    thanks

  8. Halo,

    ketika saya menjalankan scriptnya, muncul error seperti berikut di semua account yg dibackup,

    mungkin karena port admin 7071 sudah saya ganti

    ERROR: zclient.IO_ERROR (invoke Connection refused, server: localhost) (cause: java.net.ConnectException Connection refused)

    terima kasih

  9. #30: ruben gimana kabar? masih ingat saya? saya dudi yang dulu di Asia Source 3.

    Untuk soal backup zimbra, mending ikutan mailing zimbra aja lah :))

Leave a Reply

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

This is not spam