RabbitMQ is a robust message broker widely used in distributed systems. This guide provides a detailed, step-by-step tutorial on installing RabbitMQ 3.10.8 with Erlang 25.2.3 on Debian 12 and configuring a Master-Slave cluster. The setup will involve two servers: a Master at 10.11.33.83 and a Slave at 10.11.33.93.
1. Configure Hostname Resolution
Ensure both servers can resolve each other’s hostnames by editing /etc/hosts.
On both Master and Slave servers, add the following lines to /etc/hosts:
127.0.0.1 localhost
# IPv6 settings
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# RabbitMQ Cluster Nodes
10.11.33.83 rabbit.master.x1.demo.internal
10.11.33.93 rabbit.slave.x1.demo.internal
Save and exit the file.
Verify the hostname resolution by running:
ping -c 3 rabbit.master.x1.demo.internal
ping -c 3 rabbit.slave.x1.demo.internal
2. Install Required Dependencies
Update the package list and install necessary dependencies:
sudo apt update && sudo apt install -y curl gnupg apt-transport-https
3. Install Erlang 25.2.3
RabbitMQ requires Erlang. Install version 25.2.3 by adding the RabbitMQ package repository.
curl -fsSL https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo tee /usr/share/keyrings/erlang.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/erlang.gpg] https://packages.erlang-solutions.com/debian $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/erlang.list
sudo apt update
sudo apt install -y erlang=1:25.2.3-1
update 2025, 14th May. the above installation maybe broken, you can install directly from Debian 12 repo.
sudo apt update
sudo apt install erlang
Verify installation:
erl -version
4. Install RabbitMQ 3.10.8
Add the RabbitMQ repository:
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-keyring.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
sudo apt install -y rabbitmq-server=3.10.8-1
update 2025, 14th May. the above installation maybe broken, you can install directly from Debian 12 repo.
sudo rm /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
sudo apt install rabbitmq-server
Enable and start RabbitMQ:
sudo systemctl enable --now rabbitmq-server
Check RabbitMQ status:
sudo systemctl status rabbitmq-server
5. Configure RabbitMQ Environment
Set RabbitMQ to use long hostnames and define a fixed node name.
On Master (10.11.33.83):
sudo nano /etc/rabbitmq/rabbitmq-env.conf
Add:
[email protected]
RABBITMQ_USE_LONGNAME=true
Save and exit.
On Slave (10.11.33.93):
sudo nano /etc/rabbitmq/rabbitmq-env.conf
Add:
[email protected]
RABBITMQ_USE_LONGNAME=true
Save and exit.
Restart RabbitMQ on both servers:
sudo systemctl restart rabbitmq-server
Verify the node name:
sudo rabbitmqctl status
6. Set Erlang Cookie for Clustering
Ensure the Erlang cookie is the same on both servers:
echo "SUPER_SECRET_COOKIE_VALUE" | sudo tee /var/lib/rabbitmq/.erlang.cookie
sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
Restart RabbitMQ:
sudo systemctl restart rabbitmq-server
7. Enable RabbitMQ Management Plugin
Enable the RabbitMQ management plugin to monitor the cluster:
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server
Access the RabbitMQ web UI at:
http://<server-ip>:15672
Default credentials:
- Username:
guest - Password:
guest
8. Configure Cluster (Master-Slave)
Ensure RabbitMQ is running on the Slave before attempting to stop the application:
sudo systemctl start rabbitmq-server
Stop RabbitMQ application on the Slave server:
sudo rabbitmqctl stop_app
Join the Slave node to the Master:
sudo rabbitmqctl join_cluster [email protected]
sudo rabbitmqctl start_app
Check the cluster status:
sudo rabbitmqctl cluster_status
9. Configure RabbitMQ Cluster in /etc/rabbitmq/rabbitmq.conf
By default, RabbitMQ does not create /etc/rabbitmq/rabbitmq.conf, so you must create it manually:
sudo nano /etc/rabbitmq/rabbitmq.conf
Add the following lines to define the cluster settings:
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = [email protected]
cluster_formation.classic_config.nodes.2 = [email protected]
Save the file and restart RabbitMQ on both servers:
sudo systemctl restart rabbitmq-server
Verify the configuration:
sudo rabbitmqctl cluster_status
10. Set a High Availability Policy
On the Master node, apply an HA policy:
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --priority 0
Verify policies:
sudo rabbitmqctl list_policies
11. Test the Cluster Setup
On Master, create a test queue:
sudo rabbitadmin -u guest -p guest declare queue name=test-ha durable=true
Check queues on both Master and Slave:
sudo rabbitmqctl list_queues
12. Simulate Failover
To test failover, stop RabbitMQ on the Master:
sudo systemctl stop rabbitmq-server
Publish a message from the Slave:
sudo rabbitmqadmin -u guest -p guest publish routing_key=test-ha payload="Hello, RabbitMQ!"
Restart the Master and verify the message persists:
sudo systemctl start rabbitmq-server
rabbitmqctl list_queues