Pada saat instalasi Carbonio, terdapat kemungkinan terjadi kegagalan, terutama jika proses instalasi dilakukan menggunakan Ansible. Pada tulisan ini, saya akan membahas cara melakukan troubleshooting ketika instalasi Carbonio mengalami error.
Salah satu error yang cukup sering muncul saat instalasi Carbonio menggunakan Ansible adalah sebagai berikut:
service-discover: error: unable to create ACL bootstrap token: Failed ACL bootstrapping: Unexpected response code: 500 (No cluster leader)
Error ini umumnya terjadi karena proses bootstrap service-discover pada Carbonio membutuhkan waktu yang cukup lama untuk menentukan cluster leader. Di sisi lain, Ansible akan melanjutkan eksekusi task berikutnya tanpa menunggu proses bootstrap tersebut benar-benar selesai.
Akibatnya, ketika Ansible melanjutkan proses instalasi, service-discover masih berada dalam tahap pemilihan cluster leader. Kondisi ini dianggap sebagai kegagalan oleh Ansible, sehingga proses instalasi akan dihentikan (exit).
Untuk mengatasi masalah ini, kalian dapat melakukan reset password Consul dan menjalankan proses setup kembali. Panduan lengkapnya dapat diikuti melalui langkah-langkah berikut.
Sebelum memulai prosedur reset, ada satu informasi penting yang perlu diketahui terlebih dahulu. Login ke leader node (lihat bagian Find the Leader Node untuk mengetahui node mana yang menjadi leader), lalu jalankan perintah berikut:
consul acl bootstrap
Perintah ini digunakan untuk mendapatkan reset index value, yang akan diperlukan pada proses reset ACL. Output yang dihasilkan biasanya akan terlihat seperti berikut:
Failed ACL bootstrapping: Unexpected response code: 403 (Permission denied: ACL bootstrap no longer allowed (reset index: 908))
Nilai reset index adalah angka terakhir pada output tersebut, yaitu (reset index: 908). Pada contoh ini nilainya adalah 908. Simpan atau catat nilai ini, karena akan digunakan pada langkah selanjutnya.
Menuliskan Reset Index dan Membersihkan Konfigurasi
Langkah pertama dilakukan menggunakan user service-discover, yaitu menuliskan nilai reset index ke dalam file agar ACL token baru dapat dibuat. Berdasarkan contoh di atas, nilai reset index adalah 908 (sesuaikan dengan output yang kalian dapatkan):
sudo -u service-discover bash -c "echo 908 > /var/lib/service-discover/data/acl-bootstrap-reset"
Setelah itu, hentikan service service-discover:
systemctl stop service-discover
Kemudian hapus dua file konfigurasi berikut:
rm /etc/zextras/service-discover/config.jsonrm /etc/zextras/service-discover/main.json
Selanjutnya, hapus seluruh sertifikat yang berkaitan dengan service-discover:
rm /var/lib/service-discover/*.pem
Generate Kredensial Baru
Langkah berikutnya adalah membuat password baru yang kuat untuk Carbonio Mesh. Password ini akan disimpan sementara dalam sebuah variabel untuk alasan keamanan.
Jalankan perintah berikut:
read -s -p "Insert Mesh Password:" MESH_SECRET
Catatan:
Password hanya dapat diakses oleh user saat ini (root) pada terminal yang sedang digunakan. Password ini tidak dapat diakses oleh user lain dan akan otomatis hilang setelah logout.
Setelah memasukkan password, jalankan kembali setup service-discover sebagai first instance dengan menggunakan IP leader node secara langsung:
service-discover setup LEADER_IP --first-instance --password=$MESH_SECRET
Perintah ini pada dasarnya sama seperti saat konfigurasi awal Carbonio Mesh. Perbedaannya adalah pada proses ini kita menggunakan IP address secara eksplisit dan menandainya sebagai first instance.
Jika proses setup berhasil, hapus variabel password dari environment:
unset MESH_SECRET
(Opsional) Verifikasi ACL Token
Sebagai langkah opsional, kalian dapat memverifikasi ACL token dengan menjalankan perintah berikut:
export CONSUL_HTTP_TOKEN=$(gpg -qdo - /etc/zextras/service-discover/cluster-credentials.tar.gpg | tar xOf - consul-acl-secret.json | jq .SecretID -r)
Lalu cek status member Consul:
consul members
Contoh output yang berhasil:
Node Address Status Type Build Protocol DC Segment
mail.example.com 192.168.56.101:8301 alive server 1.9.3 2
Jika node berstatus alive, maka proses reset dan setup service-discover telah berhasil. Setelah berhasil kalian bisa melanjutkan proses instalasi menggunakan ansible kembali