Troubleshooting Zmconfigd Services Failed to Start in Zimbra LDAP Replica

Membangun infrastruktur multi-server atau High Availability di Zimbra Collaboration Suite (ZCS) umumnya melibatkan penambahan server LDAP Replica. Peran replica sangat krusial untuk membagi beban query autentikasi akun dan memastikan layanan email tetap berjalan normal saat server LDAP Master mengalami gangguan atau maintenance.

Namun baru-baru ini, saat menyiapkan server LDAP replica baru, saya menemui kendala di mana server replica tidak bisa melakukan sinkronisasi dengan LDAP Master. Layanan zmconfigd di replica gagal mengambil konfigurasi global (gacf), dan log OpenLDAP dipenuhi pesan kegagalan replikasi.

Setelah ditelusuri lebih lanjut, kendala ini sangat mungkin terjadi karena server diinstal menggunakan Zimbra CE (Community Edition) installer. Pada proses instalasi Zimbra CE, installer memasang paket base (misalnya paket zimbra-ldap) yang membawa definisi skema awal. Berbeda dengan server Master yang sudah berjalan dan mendapatkan pembaruan patch berkala, server replica baru belum otomatis ter-patch skemanya secara tuntas (skrip upgrade skema OpenLDAP tidak otomatis tereksekusi begitu instalasi base selesai). Akibatnya, terjadi ketidakcocokan skema (schema mismatch) antara Master dan Replica.

Pada artikel kali ini, saya akan membedah kronologi kendala ini beserta langkah demi langkah solusinya yang sudah teruji.

Gejala Masalah (Symptoms)

Pada server LDAP Replica (dapat dipantau di /var/log/zimbra.log), muncul log error berikut saat slapd mencoba melakukan syncrepl:

slapd[48768]: UNKNOWN attributeDescription "ZIMBRAPURDOMAINDETAILSCOLLECTIONENABLED" inserted.
slapd[48768]: UNKNOWN attributeDescription "ZIMBRAEXTERNALEMAILWARNINGMESSAGE" inserted.
slapd[48768]: UNKNOWN attributeDescription "ZIMBRAFEATUREEXTERNALEMAILWARNINGENABLED" inserted.
slapd[48768]: UNKNOWN attributeDescription "ZIMBRABACKUPDEDUPLICATION" inserted.
slapd[48768]: syncrepl_null_callback : error code 0x50
slapd[48768]: syncrepl_entry: rid=100 be_add cn=config,cn=zimbra (80)
slapd[48768]: syncrepl_entry: rid=100 be_add cn=config,cn=zimbra failed (80)
slapd[48768]: do_syncrepl: rid=100 rc 80 retrying

Dampaknya, service zmconfigd di replica gagal mengambil konfigurasi:

zmconfigd[48801]: gacf (function getglobal at 0x3)(None) 1 com.zimbra.common.service.ServiceException: system failure: unable to get config

Bahkan saat dicoba melakukan ekspor data manual dari Master (ldap.bak) dan diimpor ke Replica menggunakan perintah zmslapadd, proses import terhenti di tengah jalan dengan error:

str2entry: str2ad(zimbraPURDomainDetailsCollectionEnabled): attribute type undefined
slapadd: could not parse entry (line=352)
Closing DB...

Analisis Penyebab (Root Cause)

Mengapa hal tersebut bisa terjadi? Berikut adalah poin-poin penyebab utamanya:

  1. Schema Mismatch Akibat Zimbra CE Installer:

    Atribut seperti zimbraFeatureExternalEmailWarningEnabled dan zimbraPURDomainDetailsCollectionEnabled adalah atribut yang baru diperkenalkan pada rilis/patch Zimbra terbaru. Server replica baru hasil instalasi Zimbra CE masih memuat skema lama di dalam /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif. Ketika replikasi berlangsung, OpenLDAP menolak atribut tersebut karena tidak terdaftar pada kamus skema lokalnya.

  2. Data vs Skema OpenLDAP:

    Memindahkan folder database (mv mdb mdb.bak) hanya membersihkan data store, bukan skema OpenLDAP yang tersimpan di direktori config. Oleh karena itu, slapadd tetap gagal mengenali atribut saat membaca baris dn: cn=config,cn=zimbra.

  3. Jebakan Flag -w pada zmslapadd:

    Skrip bawaan Zimbra /opt/zimbra/libexec/zmslapadd mengeksekusi slapadd -w. Opsi -w memaksa OpenLDAP memperbarui contextCSN (timestamp sinkronisasi) menggunakan waktu saat perintah dijalankan. Akibatnya, replica memiliki CSN yang lebih baru daripada Master, sehingga Master menolak replikasi dengan error (53) Server is unwilling to perform (consumer state is newer than provider).

  4. Mismatched zimbra_ldap_password:

    Saat data Master di-restore, user internal uid=zimbra,cn=admins,cn=zimbra menggunakan password milik Master. Jika localconfig.xml pada replica masih menggunakan password bawaan instalasi baru, zmconfigd tidak akan bisa melakukan bind ke LDAP lokal.

Langkah-Langkah Penyelesaian

Berikut langkah-langkah teruji untuk menuntaskan kendala ini:

1. Ekspor Database dari LDAP Master

Di server LDAP Master, jalankan perintah sebagai user zimbra:

# su - zimbra
# zmlocalconfig -s zimbra_ldap_password
zimbra_ldap_password = [PASSWORD_LDAP_MASTER]
# /opt/zimbra/libexec/zmslapcat /tmp/
# scp /tmp/ldap.bak root@IP_REPLICA:/tmp/

2. Stop Service pada LDAP Replica

Masuk ke server LDAP Replica dan hentikan semua service Zimbra:

# su - zimbra
# zmcontrol stop
# ldap stop
# exit

3. Update Skema Aktif (cn={4}zimbra.ldif)

Sebagai user root di server replica, perbarui file skema aktif menggunakan file skema patch yang sudah tersedia di direktori instalasi:

# cp -a /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif.bak
# cp -f /opt/zimbra/common/etc/openldap/zimbra/schema/zimbra.ldif /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif
# chown zimbra:zimbra /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif
# chmod 600 /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif
# sed -i -e '/^dn: cn=zimbra,/ s/dn: cn=zimbra,cn=schema,cn=config/dn: cn={4}zimbra/' -e '/^cn: zimbra/ s/cn: zimbra/cn: {4}zimbra/' /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif

Pastikan atribut baru sudah ada dengan perintah grep:

# grep -i zimbraPURDomainDetailsCollectionEnabled /opt/zimbra/data/ldap/config/cn=config/cn=schema/cn={4}zimbra.ldif

4. Bersihkan Database dan Import ldap.bak (Tanpa Flag -w)

Bersihkan database data lama, lalu lakukan import menggunakan binary slapadd secara langsung (jangan menggunakan wrapper zmslapadd agar nilai contextCSN asli milik Master tetap terjaga):

# rm -rf /opt/zimbra/data/ldap/mdb/db/*
# chown zimbra:zimbra /tmp/ldap.bak
# su - zimbra
# /opt/zimbra/common/sbin/slapadd -q -F /opt/zimbra/data/ldap/config -b "" -l /tmp/ldap.bak

Catatan: Pesan slapadd: warning, missing attrs entryUUID,entryCSN from entry dn="" merupakan peringatan normal dan aman untuk diabaikan.

5. Samakan Password LDAP di Localconfig

Masih sebagai user zimbra di replica, perbarui konfigurasi password LDAP lokal agar sesuai dengan password Master:

# zmlocalconfig -f -e zimbra_ldap_password=[PASSWORD_LDAP_MASTER]

6. Jalankan Service & Verifikasi Hasil Replikasi

Jalankan kembali service OpenLDAP dan Zimbra:

# ldap start
# zmcontrol start
# zmcontrol status

Pastikan service ldap, zmconfigd, dan stats sudah berstatus Running.

Verifikasi Log & Sinkronisasi CSN

Untuk memastikan replikasi berjalan mulus, periksa /var/log/zimbra.log:

# tail -n 50 /var/log/zimbra.log | grep -E "slapd|syncrepl|zmconfigd"

Log yang sukses akan menampilkan proses modify dengan status return code (0) dan zmconfigd berhasil memuat seluruh konfigurasi tanpa error:

slapd[22707]: syncrepl_message_to_op: rid=100 be_modify uid=zimbra,cn=admins,cn=zimbra (0)
slapd[22707]: do_syncrep2: rid=100 LDAP_RES_INTERMEDIATE - REFRESH_DELETE
zmconfigd[22779]: All configs fetched in 0.36 seconds

Terakhir, kita bisa membandingkan nilai contextCSN antara Master dan Replica:

# su - zimbra
# source /opt/zimbra/bin/zmshutil; zmsetvars
# ldapsearch -x -H ldap://$(zmhostname):389 -D uid=zimbra,cn=admins,cn=zimbra -w $zimbra_ldap_password -b "" -s base contextCSN

Jika string contextCSN pada Master dan Replica identik hingga satuan mikrodetik, artinya seluruh data sudah tersinkronisasi sempurna secara real-time!

Semoga panduan ini bermanfaat bagi rekan-rekan Sysadmin yang menemui kendala serupa saat menyiapkan LDAP Replica di Zimbra!

Leave a Reply

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