Konfigurasi Cluster RabbitMQ

Baru-baru ini saya mendapat task untuk mengerjakan server untuk menyimpan antrian pesan. Sebutlah namanya message broker. Di antara beberapa platform yang ada, pada akhirnya RabbitMQ yang terpilih.
Logo RabbitMQ

Pada umumnya messaging ini berfungsi untuk menghubungkan antar aplikasi. Aplikasi dapat terhubung ke satu dan lainnya, sebagai suatu komponen dari aplikasi yang lebih besar, atau menuju pengguna aplikasi. Messaging akan membagi aplikasi ke dalam pengiriman dan penerimaan data, sehingga tidak tertahan atau mengantri di salah satu titik. Dengan RabbitMQ sebagai perantara pesan, ia menyediakan tempat untuk aplikasi mengirim dan menerima pesan, dan menyimpannya sampai pesan tersebut sampai ke tujuan.

RabbitMQ juga merupakan aplikasi open source, yang menggunakan protokol AMQP (Advanced Message Queueing Protocol). RabbitMQ ditulis dengan bahasa pemrograman Erlang. Untuk cara kerja RabbitMQ atau aplikasi messaging lainnya, kurang lebih seperti gambar di bawah ini:
Nah, setelah itu, mari kita simak cara konfigurasi RabbitMQ dengan dua nodes (kedua nodes atau server ini akan kita jadikan RabbitMQ cluster). Untuk sistem operasi yang akan digunakan kali ini adalah Ubuntu 14.04.

Repositori Standar Ubuntu dan Debian

Package rabbitmq-server sebenarnya sudah termasuk di dalam repo Ubuntu. Namun, versi yang ada di repo biasanya sudah lama dan jarang diperbaharui. Untuk hasil lebih baik, kita dapat instalasi paket tersebut dari file *.deb yang disediakan situs resmi RabbitMQ atau dengan menambahkan APT repository RabbitMQ.

Opsional, agar tidak terkendala warning saat instalasi, jangan lupa menambahkan public key RabbitMQ ke daftar trusted key di server.

Untuk instalasi RabbitMQ, sebelum menginstall RabbitMQ, update terlebih dahulu agar repository RabbitMQ yang sudah ditambahkan ke sources.list terbaca. Kemudian mulai instalasi RabbitMQ. Aplikasi pendukung akan otomatis terinstall (dependencies), lalu konfirmasi dengan menekan ‘Y’ (yes).

Tunggu sampai semua selesai instalasi. Setelah kedua package RabbitMQ terinstal di kedua nodes, lanjutkan dengan setting cluster RabbitMQ.

Clustering RabbitMQ

Nodes RabbitMQ dan tools CLI seperti rabbitmqctl menggunakan cookie untuk memastikan bahwa masing-masing node dapat saling berkomunikasi. Agar masing-masing node dapat saling berkomunikasi, node tersebut menggunakan satu kunci sama yang disebut Erlang cookie. Cookie ini hanyalah gabungan karakter alfanumerik. Setiap cluster node harus memiliki cookie yang sama.

Untuk setting cluster, lakukan rekonfigurasi nodes ke dalam konfigurasi cluster. Langkah pertama untuk memulai RabbitMQ pada semua node yang akan ditambahkan ke cluster dengan perintah berikut:

rabbit1:~# rabbitmq-server -detached ==> ketik perintah pada node pertama
rabbit2:~# rabbitmq-server -detached ==> ketik perintah pada node kedua

Perintah di atas pada masing-masing node RabbitMQ akan membentuk cluster independen dan dapat dicek dengan perintah cluster_status. Hasil dari perintah tersebut kurang lebih seperti di bawah ini:

rabbit1:~# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 …
[{nodes,[{disc,[rabbit@rabbit1]}]},{running_nodes,[rabbit@rabbit1]}]
…done.

Untuk nama node dari broker RabbitMQ biasanya berformat rabbit@hostnameserver (biasanya hostname tersebut lower-case). Tapi kalau menggunakan rabbitmq-server.bat untuk Windows server, hostname mesin biasanya menjadi upper case (contoh: rabbit@RABBITSERVER). Ketika mengetik nama node, penulisan huruf besar dan kecil akan berpengaruh, sehingga penulisannya harus mirip.

Setelah membentuk nodes independen, langkah selanjutnya adalah menambahkan masing-masing node ke dalam cluster. Asumsikan bahwa cluster root-nya adalah rabbit@rabbit1, dan node lainnya akan digabungkan ke dalam cluster utama tersebut. Di bawah ini, langkah untuk menggabungkan nodes rabbit@rabbit2, ke nodes rabbit1.

rabbit2:~# rabbitmqctl stop_app
Stopping node rabbit@rabbit2 …done.
rabbit2:~# rabbitmqctl join_cluster rabbit@rabbit1
Clustering node rabbit@rabbit2 with [rabbit@rabbit1] …done.
rabbit2:~# rabbitmqctl start_app
Starting node rabbit@rabbit2 …done.

Lalu, cek ke masing-masing nodes, untuk melihat bahwa kedua nodes sudah tergabung dalam cluster.

rabbit1:~# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 …
[{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]},
 {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}]
…done.
rabbit2
:~# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit2 …
[{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]},
 {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}]
…done. 

RabbitMQ Management UIjsjgadhgka

Secara default, yang terinstall untuk manajemen RabbitMQ menggunakan cli, dengan command rabbitmqctl. Namun, RabbitMQ juga bisa diatur dengan web manajemen atau UI yang lebih mudah dibaca dan dapat diakses melalui browser. Untuk mengaktifkan web manajemen, dapat dilakukan dengan perintah di bawah ini:

rabbit1:~# rabbitmq-plugins enable rabbitmq_management

Kemudian restart aplikasi RabbitMQ dan tunggu sampai menyala kembali.

rabbit1:~# service rabbitmq-server restart
Setelah aktif, web UI dapat diakses melalui browser internet dengan mengetikkan http://ip-server:15672

Tampilan Overview

Jika clustering berhasil, pada nodes juga akan muncul kedua node RabbitMQ yang sebelumnya ditambahkan.

Overview

Demikian proses instalasi RabbitMQ dengan cluster dan plugin web UI. Untuk penggunaannya sebagai message broker akan dilanjutkan pada postingan selanjutnya (kapan-kapan kalau sempat, hehe).

Terima kasih sudah mampir!

Leave a Reply

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