Apakah Anda ingin mengurangi beban kerja dan waktu pengiriman aplikasi Anda? Selamatkan diri Anda dari sakit kepala dan siapkan cluster RabbitMQ untuk aplikasi Anda!
Dalam tutorial ini, Anda akan mempelajari cara menyiapkan Cluster RabbitMQ dan memiliki cluster RabbitMQ yang berfungsi penuh dengan dukungan ketersediaan tinggi.
Siap? Baca terus dan mulai kurangi beban kerja!
Prasyarat
Untuk mengikuti tutorial ini, pastikan Anda memiliki persyaratan berikut:
- Dua atau lebih server Linux dalam jaringan yang sama – Tutorial ini menggunakan tiga server Debian 11 bernama node01, node02, dan node03.
- Hak istimewa root sudo atau akses ke akun root/administrator.
Menyiapkan File Host
Cluster RabbitMQ bekerja dengan nama host atau domain lokal. Anda harus memastikan setiap nama host ditetapkan ke alamat IP server dengan mengedit /etc/hosts berkas.
Buka /etc/hosts
file di semua server menggunakan editor teks pilihan Anda, dan tambahkan baris berikut ke file.
Ingat bahwa mengedit file /etc/hosts memerlukan hak istimewa sudo.
Format /etc/hosts konfigurasinya adalah IP-address hostname
.
Ganti nilai di bawah ini dengan alamat IP dan nama host server Anda, simpan perubahan, dan keluar dari editor.
# /etc/hosts file RabbitMQ Servers
172.16.1.20 node01
172.16.1.21 node02
172.16.1.22 node03
Sekarang, jalankan ping
perintah di bawah ini untuk memverifikasi setiap nama host diselesaikan ke alamat IP server yang benar. Setiap -c 3
opsi membuat ping
permintaan tiga kali, lalu menghentikan permintaan.
# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03
Jika konfigurasi Anda benar, Anda akan melihat setiap nama host diselesaikan ke alamat IP server yang benar, seperti yang ditunjukkan di bawah ini.
Memasang RabbitMQ di Semua Server
Sekarang setelah Anda mengonfigurasi /etc/hosts
file di semua server, saatnya menginstal paket RabbitMQ di semua server (node01, node02, dan node03). Anda dapat menginstal RabbitMQ dari repositori distribusi resmi untuk sebagian besar distribusi Linux.
Pada saat penulisan, repositori Debian dan Ubuntu menyediakan RabbitMQ stabil terbaru versi 3.8.9.
1. Jalankan apt
perintah di bawah ini untuk menyegarkan semua indeks paket sistem Anda.
sudo apt update
2. Selanjutnya, jalankan apt install
berikut ini perintah untuk menginstal RabbitMQ (rabbitmq-server
) di sistem Anda.
Setelah instalasi selesai, rabbitmq-server
layanan secara otomatis dimulai dan diaktifkan pada sistem Anda.
sudo apt install rabbitmq-server -y
3. Terakhir, jalankan perintah berikut untuk memverifikasi rabbitmq-server
status layanan.
sudo systemctl status rabbitmq-server
Di bawah ini, Anda dapat melihat layanan server RabbitMQ aktif (berjalan) dan diaktifkan . Akibatnya, layanan mulai secara otomatis saat boot/startup sistem.
Selain itu, Anda juga dapat memverifikasi versi RabbitMQ di sistem Anda menggunakan perintah berikut.
sudo rabbitmq-diagnostics server_version
Versi RabbitMQ yang diinstal adalah 3.8.9 , seperti yang ditunjukkan di bawah ini, tetapi milik Anda mungkin berbeda.
Menyiapkan Kluster RabbitMQ
Setelah Anda menginstal RabbitMQ, saatnya untuk mengatur cluster RabbitMQ. Menggunakan cluster RabbitMQ mencegah kehilangan dan kehilangan data di antara aplikasi Anda. Cluster RabbitMQ menyediakan replikasi dan ketersediaan tinggi di semua server.
RabbitMQ adalah aplikasi yang ditulis dalam Erlang dan secara default, menyediakan .erlang.cookie file di direktori data RabbitMQ (/var/lib/rabbitmq) .
Untuk membuat cluster RabbitMQ, Anda harus menyiapkan .erlang.cookie file di setiap server dengan konten yang sama dan harus dimiliki oleh rabbitmq
pengguna dan grup.
1. Pada server node01, jalankan perintah berikut untuk memeriksa file yang tersedia di direktori data RabbitMQ (/var/lib/rabbitmq
). Perintah kemudian mencetak konten .erlang.cookie
mengajukan.
# List files and directories on /var/lib/rabbitmq
ls -lah /var/lib/rabbitmq
# Print content of the file .erlang.cookie
cat /var/lib/rabbitmq/.erlang.cookie
Salin output (UXPBSDKHLRMGJSOJVEAN ) ke catatan Anda karena Anda akan menambahkan output ini ke server node02 dan node03 dalam langkah-langkah berikut. Perlu diingat bahwa Anda mungkin mendapatkan output yang berbeda dari .erlang.cookie.
file dari apa yang ditunjukkan di bawah ini.
2. Selanjutnya pindah ke server node02, dan jalankan perintah berikut ke stop
rabbitmq
melayani.
sudo systemctl stop rabbitmq-server
3. Edit /var/lib/rabbitmq/.erlang.cookie
file di editor teks pilihan Anda. Ganti konten asli dengan yang Anda catat di langkah pertama, simpan perubahan dan keluar dari editor.
# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN
4. Sekarang, jalankan perintah di bawah ini untuk memulai rabbitmq-server
melayani.
sudo systemctl start rabbitmq-server
5. Beralih ke server node03 dan ulangi langkah (dua hingga empat) untuk mengedit /var/lib/rabbitmq/.erlang.cookie
berkas.
6. Jalankan rabbitmqctl
berikut ini perintah pada server node02 dan node03 untuk menambahkannya ke cluster RabbitMQ (node01).
# Stop RabbitMQ application
sudo rabbitmqctl stop_app
# Join the RabbitMQ node01
sudo rabbitmqctl join_cluster [email protected]
# Start the RabbitMQ application again
sudo rabbitmqctl start_app
Di bawah ini, Anda dapat melihat server node02 mengelompok dengan cluster RabbitMQ (node01), dan hal yang sama berlaku untuk server node03.
7. Terakhir, jalankan rabbitmqctl
perintah di bawah ini untuk memverifikasi status cluster RabbitMQ. Anda dapat menjalankan ini dari server mana pun (node01, node02, atau node03).
sudo rabbitmqctl cluster_status
Anda dapat melihat pada output di bawah nama cluster ([email protected] ) dan node yang sedang berjalan.
Menyiapkan Pengguna Admin untuk RabbitMQ
Setelah menyiapkan cluster RabbitMQ, Anda akan membuat pengguna admin baru untuk RabbitMQ dan menghapus pengguna tamu default. Pengguna admin RabbitMQ memiliki izin untuk mengonfigurasi, membaca, dan menulis entitas apa pun yang tersedia di cluster RabbitMQ.
1. Beralih ke server node01, dan jalankan rabbitmqctl
perintah di bawah ini untuk membuat pengguna baru bernama admin
dengan kata sandi yang ditetapkan sebagai AdminPassRabbitMQ
. Anda dapat mengatur nama pengguna dan kata sandi pilihan Anda, tetapi pastikan untuk mengatur kata sandi yang kuat.
sudo rabbitmqctl add_user admin AdminPassRabbitMQ
2. Selanjutnya, jalankan perintah berikut untuk mengatur (set_user_tags
) pengguna baru (admin
) sebagai administrator
untuk cluster RabbitMQ.
sudo rabbitmqctl set_user_tags admin administrator
3. Jalankan perintah di bawah ini ke set_permissions
ke admin
pengguna dengan yang berikut:
- Mengizinkan (
-p /
)admin
pengguna untuk mengakses semua vhost di cluster RabbitMQ. ".*"
pertama – Memungkinkan pengguna untuk mengonfigurasi izin untuk setiap entitas dan vhost.- Kedua
".*"
– Mengaktifkan izin tulis bagi pengguna untuk setiap entitas dan vhost. - Ketiga
".*"
– Mengaktifkan izin baca bagi pengguna untuk setiap entitas dan vhost.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
4. Sekarang, jalankan perintah berikut untuk menghapus (delete_user
) pengguna default (guest
) dari cluster RabbitMQ.
sudo rabbitmqctl delete_user guest
5. Terakhir, jalankan perintah di bawah ini untuk membuat daftar semua pengguna yang tersedia (list_users
) di cluster RabbitMQ.
sudo rabbitmqctl list_users
Di bawah, Anda hanya dapat melihat satu pengguna (admin) . Anda juga dapat memverifikasi pengguna dari server lain (node02 dan node03), dan Anda akan mendapatkan output yang sama.
Membuat Host Virtual dan Pengguna Admin baru di RabbitMQ
Anda telah menyiapkan cluster RabbitMQ dan membuat pengguna admin di RabbitMQ. Namun sekarang, Anda akan membuat virtual host (vhost) dan pengguna di RabbitMQ, sehingga aplikasi Anda dapat terhubung ke RabbitMQ.
Konsep dasar virtual host (vhost) di RabbitMQ mirip dengan apa yang ada di Apache atau blok server di NGINX. Setiap vhost memiliki entitas seperti pertukaran, antrian, pengikatan, izin pengguna, otentikasi, dll.
1. Jalankan rabbitmqctl
perintah di bawah ini untuk membuat vhost baru (add_vhost
) bernama app-qa1
.
sudo rabbitmqctl add_vhost app-qa1
2. Selanjutnya, jalankan perintah berikut untuk membuat pengguna baru (add_user
) bernama alice
dengan kata sandi AlicePassRabbitMQ
dan beri tag pengguna sebagai administrator
. Anda dapat mengatur nama pengguna dan kata sandi sesuai keinginan Anda.
# create new user alice
sudo rabbitmqctl add_user alice AlicePassRabbitMQ
# set a tag administrator for user alice
sudo rabbitmqctl set_user_tags alice administrator
3. Jalankan perintah di bawah ini untuk mengatur izin ke pengguna alice
untuk mengelola vhost app-qa1
. Izin ini memungkinkan pengguna alice
untuk mengonfigurasi, membaca, dan menulis semua entitas di bawah vhost app-qa1
.
# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"
4. Terakhir, jalankan setiap perintah di bawah ini untuk membuat daftar vhost yang tersedia (list_vhosts
) pada cluster RabbitMQ dan izin (list_user_permissions
) dari pengguna admin baru (alice
).
# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts
# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice
Membuat Pertukaran, Antrian, dan Binding di RabbitMQ
Host virtual dan pengguna admin Anda telah disiapkan, tetapi apakah hanya itu yang Anda perlukan agar aplikasi Anda berfungsi? Anda masih perlu membuat entitas, seperti pertukaran, antrian, dan binding di RabbitMQ. Entitas tersebut diperlukan untuk membuat aplikasi Anda bekerja dengan RabbitMQ.
1. Jalankan rabbitmqadmin
berikut ini perintah untuk membuat pertukaran baru di RabbitMQ yang disebut test_exchange
di bawah app-qa1
vhost dan pengguna alice
. Anda dapat menentukan jenis pertukaran dengan type
opsi, yaitu direct
untuk demo ini.
# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct
2. Selanjutnya, jalankan setiap perintah di bawah ini untuk membuat antrian baru di RabbitMQ. Dalam demo ini, Anda akan membuat classic
default (test_classic
) dan quorum
antrian bernama test_quorum
.
# create quorum queue with option queue_type=quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_quorum durable=true queue_type=quorum
# create default classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_classic durable=true
3. Jalankan perintah di bawah ini untuk membuat pengikatan untuk keduanya test_classic
dan test_quorum
antrian. Setiap pengikatan memiliki routing_key
yang berbeda tetapi masih berjalan di bursa yang sama (test_exchange
).
# create binding for test_quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_quorum" routing_key="test_routing_key_quorum"
# create binding for test_classic
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_classic" routing_key="test_routing_key_classic"
4. Sekarang, jalankan perintah berikut ke publish
hello, world
pesan ke test_exchange
. Pastikan untuk menyetel routing_key.
yang benar
# publish message for the test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_quorum payload="hello world, Quorum Queue"
# publish message for the test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_classic payload="hello world, Classic Queue"
5. Terakhir, jalankan perintah berikut ke get
hello, world
pesan dari test_quorum
dan test_classic
antrian.
# retrieve the message from test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum
# retrieve the message from test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic
Seperti yang ditunjukkan di bawah ini, Anda akan mengetahui bahwa antrean berfungsi jika Anda menerima hello, world
pesan dari test_quorum
dan test_classic
antrian.
Mengaktifkan Plugin Manajemen RabbitMQ
Anda telah berhasil mengerjakan RabbitMQ melalui lingkungan baris perintah sejauh ini. Tapi mungkin, Anda lebih suka GUI untuk berinteraksi dengan server dan cluster RabbitMQ. Jika demikian, Anda harus mengaktifkan plugin manajemen RabbitMQ.
Plugin Manajemen RabbitMQ menyediakan UI manajemen berbasis web yang berjalan pada port default 15672
dan alat manajemen baris perintah [rabbitmqadmin]
Jalankan rabbitmq-plugins
perintah di bawah ini pada semua server (node01, node02, dan node03) untuk mengaktifkan rabbitmq_management
pengaya. Perintah ini secara otomatis mengaktifkan plugin lain yang diperlukan, seperti rabbitmq_management_agent
dan rabbitmq_web_dispatch
.
sudo rabbitmq-plugins enable rabbitmq_management
Di bawah ini adalah output serupa yang akan Anda lihat di layar terminal Anda.
Sekarang, buka browser web Anda, dan arahkan ke alamat IP server Anda diikuti dengan port 15672
(http://172.16.1.20:15672/) untuk mengakses antarmuka manajemen berbasis web RabbitMQ. Port 15672
terbuka secara otomatis saat Anda mengaktifkan plugin manajemen RabbitMQ.
Masuk ke halaman masuk UI manajemen RabbitMQ dengan pengguna alice dan sandi AlicePassRabbitMQ .
Di dasbor RabbitMQ, Anda akan melihat semua node yang tersedia di cluster RabbitMQ.
Di bawah ini, Anda dapat melihat semua node di cluster RabbitMQ berjalan tanpa masalah.
Memverifikasi Antrian Kuorum dengan Ketersediaan Tinggi
Anda sebelumnya telah memverifikasi bahwa node di cluster RabbitMQ sedang berjalan dan antrian berfungsi, dan itu bagus. Tetapi bagaimana jika salah satu node mati atau gagal? Pastikan antrean test_quorum menyediakan ketersediaan tinggi dan replikasi di seluruh server.
1. Pada dasbor RabbitMQ, klik Antrian tab untuk mengakses antrian yang tersedia di cluster RabbitMQ.
Di bawah ini, Anda dapat melihat test_classic
antrian dan test_quorum
antre.
2. Selanjutnya, klik test_classic antrian untuk mendapatkan informasi rinci.
Seperti yang Anda lihat di bawah, test_classic antrian berjalan di [email protected] tanpa cermin/replikasi. Ketika node [email protected] sedang down, test_classic antrian menjadi tidak tersedia.
3. Beralih kembali ke Antrian menu, tapi klik test_quorum antrian kali ini.
Di bawah, Anda dapat melihat test_quorum antrian tersedia di [email protected] dan juga menyediakan mirror ke node lain di cluster. Penyiapan ini akan menjaga test_quorum antrian berjalan bahkan ketika node01 sedang down.
4. Sekarang, jalankan perintah berikut untuk mematikan/mematikan node01
server. Dengan server node01 down.
# turnoff node01
sudo poweroff
5. Pindah ke server node02 dan jalankan perintah di bawah ini untuk memeriksa cluster_status
RabbitMQ
# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status
Anda akan melihat Running Nodes current saat ini pada cluster RabbitMQ adalah node02 dan simpul03 .
6. Selanjutnya jalankan perintah berikut untuk mendapatkan pesan “hello world” dari test_classic
antre. Perintah ini akan membuat lima permintaan ke test_classic
antrian menggunakan loop Bash.
# setup temporary environment variable CLASSIC
export CLASSIC="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic"
# retrieve message from `test_classic` queue 5 times using bash loop
for i in {1..5}; do $CLASSIC; done
Anda akan menerima pesan Tidak ditemukan output, seperti yang ditunjukkan di bawah ini, karena server node01 sedang down.
7. Terakhir, jalankan perintah berikut untuk mengambil pesan “hello world” dari test_quorum
antre.
Mirip dengan menguji antrian test_classic, perintah ini membuat lima permintaan ke test_quorum
antrian, tapi kali ini, Anda akan mendapatkan pesan "hello world" bahkan node01
sedang turun. Mengapa? test_quorum
antrian secara otomatis direplikasi/dicerminkan ke server node02 atau node03.
# setup temporary environment variable QUORUM
export QUORUM="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum"
# retrieve message from `test_quorum` queue 5 times using bash loop
for i in {1..5}; do $QUORUM; done
Kesimpulan
Tutorial ini bertujuan untuk membantu Anda melalui proses pengaturan cluster RabbitMQ pada sistem Debian/Ubuntu Linux. Anda juga telah mempelajari administrasi dasar server RabbitMQ dan cara membuat antrean yang mendukung ketersediaan tinggi di RabbitMQ.
Anda telah menyiapkan cluster RabbitMQ sepenuhnya pada saat ini. Jadi apa selanjutnya? Mungkin belajar mengimplementasikan RabbitMQ ke aplikasi Anda?