Overview
Pada deployment cluster, mesh password tidak bisa diganti hanya dengan menjalankan ulang setup wizard di semua node. Karena Consul server saling berbagi cluster state dan data autentikasi, prosedur reset password mengharuskan kita menyusutkan cluster sementara menjadi satu leader node, mereset mesh credentials, lalu menyatukan kembali seluruh server dan client node ke cluster.
Prosedur ini berlaku untuk environment dengan beberapa Consul (service-discover) server node dan harus dijalankan hati-hati pada semua node yang terlibat. Selama proses berlangsung, fungsi service discovery akan sementara tidak tersedia sampai cluster selesai dikonfigurasi ulang dan semua node berhasil rejoin ke mesh.
Secara garis besar, prosedur terdiri dari fase berikut:
- Identifikasi Consul leader saat ini.
- Hapus follower server node dari cluster.
- Bangun ulang Consul quorum pada leader node.
- Reset ACL bootstrap state.
- Inisialisasi ulang mesh dengan password baru.
- Rejoin sisa Consul server node.
- Rejoin semua client node yang menjalankan agent service-discover.
Sebelum Memulai
Prosedur ini mengubah konfigurasi Consul cluster, mereset mesh credentials, dan menghapus beberapa file konfigurasi serta state dari node yang terdampak. Sebelum lanjut, pastikan environment bisa dipulihkan jika terjadi kegagalan tak terduga.
- Buat backup atau snapshot semua VM yang menjalankan role service-discover server. Kalau ada snapshot virtualisasi, sangat disarankan bikin snapshot tepat sebelum memulai.
- Pastikan semua Consul server node sehat dan leader cluster terpilih dengan benar.
- Buat backup direktori dan file berikut pada setiap node terdampak:
/etc/zextras/service-discover/,/var/lib/service-discover/, salinancluster-credentials.tar.gpgyang ada, serta file konfigurasi service-discover custom. - Export dan simpan salinan konfigurasi Consul dan mesh saat ini sebelum melakukan perubahan.
- Pastikan kalian punya akses administratif ke semua node di mesh dan perintah manajemen LDAP bisa dijalankan.
- Rencanakan maintenance window. Selama prosedur, service discovery tidak tersedia dan operasi cluster bisa terganggu sampai semua node rejoin.
Lanjut hanya setelah memastikan backup tersedia dan semua node reachable serta beroperasi normal.
Prosedur Reset Credentials
1. Identifikasi Mesh Leader
curl http://127.0.0.1:8500/v1/status/leader
2. Hapus service-discover pada Follower Server Node
Pada node lain yang menjalankan service-discover server, hapus service-discover dari installed services di LDAP:
/opt/zextras/bin/zmprov -l ms $(hostname -f) -zimbraServiceEnabled service-discover
/opt/zextras/bin/zmprov -l ms $(hostname -f) -zimbraServiceInstalled service-discover
systemctl stop service-discover
rm /etc/zextras/service-discover/config.json
rm /etc/zextras/service-discover/main.json
rm /var/lib/service-discover/*.pem
rm /var/lib/service-discover/data/raft/peers.info
rm /etc/zextras/service-discover/cluster-credentials.tar.gpg
rm /var/lib/service-discover/password
3. Bangun Ulang Quorum pada Leader Node
Ambil Consul server id dari /var/lib/service-discover/data/node-id, lalu buat file baru /var/lib/service-discover/data/raft/peers.json dengan isi berikut (ganti dengan node_id dan IP kalian):
cat > /var/lib/service-discover/data/raft/peers.json << 'EOF'
[
{
"id": "server-id",
"address": "server-IP:8300",
"non_voter": false
}
]
EOF
Penting, perhatikan atribut non_voter harus di-set false.
Restart service-discover:
systemctl restart service-discover
Verifikasi node masih jadi cluster leader:
curl http://127.0.0.1:8500/v1/status/leader
4. Reset ACL Bootstrap State
Jalankan:
consul acl bootstrap
Perintah ini mengembalikan nilai reset index yang dibutuhkan selama prosedur reset. Outputnya selalu mirip seperti ini:
Failed ACL bootstrapping: Unexpected response code: 403 (Permission denied: ACL bootstrap no longer allowed (reset index: 908))
Nilai reset index ada di akhir output (reset index: 908), pada contoh ini 908.
sudo -u service-discover bash -c "echo 908 > /var/lib/service-discover/data/acl-bootstrap-reset"
Kemudian stop service-discover:
systemctl stop service-discover
Hapus file berikut:
rm /etc/zextras/service-discover/config.json
rm /etc/zextras/service-discover/main.json
rm /var/lib/service-discover/*.pem
rm /var/lib/service-discover/data/raft/peers.info
rm /etc/zextras/service-discover/cluster-credentials.tar.gpg
rm /var/lib/service-discover/password
Hapus credential yang tersimpan di LDAP:
/opt/zextras/bin/zmprov -l mcf carbonioMeshCredentials ""
5. Inisialisasi Ulang Mesh dengan Password Baru
Jalankan setup wizard dengan opsi --first-instance:
read -s -p "Insert Mesh Password:" MESH_SECRET
service-discover setup $(hostname -i) --first-instance --password=$MESH_SECRET
Verifikasi password sudah tersimpan dengan benar:
cat /var/lib/service-discover/password
6. Rejoin Sisa Consul Server Node
Pada semua service-discover server node lainnya, jalankan:
systemctl stop service-discover
rm /etc/zextras/service-discover/config.json
rm /etc/zextras/service-discover/main.json
rm /var/lib/service-discover/*.pem
rm /var/lib/service-discover/data/raft/peers.info
rm /etc/zextras/service-discover/cluster-credentials.tar.gpg
rm /var/lib/service-discover/password
Rejoin ke mesh:
service-discover setup-wizard
Aktifkan kembali service service-discover:
/opt/zextras/bin/zmprov -l ms $(hostname -f) +zimbraServiceEnabled service-discover
/opt/zextras/bin/zmprov -l ms $(hostname -f) +zimbraServiceInstalled service-discover
7. Rejoin Semua Client Node (Consul Agent)
Pada semua node yang menjalankan agent service-discover:
systemctl stop service-discover
rm /etc/zextras/service-discover/config.json
rm /etc/zextras/service-discover/main.json
rm /var/lib/service-discover/*.pem
rm /var/lib/service-discover/data/raft/peers.info
rm /etc/zextras/service-discover/cluster-credentials.tar.gpg
rm /var/lib/service-discover/password
Join lagi ke mesh:
service-discover setup-wizard
Penutup
Setelah semua server dan client node berhasil rejoin, mesh akan kembali berjalan dengan credential baru. Kunci dari prosedur cluster ini ada di penyusutan sementara ke satu leader node, reset ACL bootstrap dengan reset index yang benar, lalu inisialisasi ulang sebagai first instance. Karena service discovery sempat down selama proses, pastikan selalu dijalankan dalam maintenance window dan dengan backup yang sudah siap.