RabbitMQ Cluster Deployment Methods: Multi-Node and Single-Host Configurations

Multi-Host Cluster Deployment (Standard Mode)

Environment Preparation

Prepare three machines with RabbitMQ installed (refer to installation documentation):

  • 10.10.1.41
  • 10.10.1.42
  • 10.10.1.43

Tip: When using virtual machines, create a base VM with RabbitMQ installed, then use linked clones for efficiency.

Configuration Steps

  1. Modify /etc/hosts on 10.10.1.41:
sudo nano /etc/hosts

Add node mappings:

10.10.1.41 node1
10.10.1.42 node2
10.10.1.43 node3
  1. Set hostnames on each machine:
hostnamectl set-hostname node1  # On node1
hostnamectl set-hostname node2  # On node2
hostnamectl set-hostname node3  # On node3
  1. Distribute hosts file to other nodes:
sudo scp /etc/hosts root@node2:/etc/
sudo scp /etc/hosts root@node3:/etc/
  1. Synchronize Erlang cookie:
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/

Note: Skip this step if using cloned VMs.

Firewall Configuration

Enable required ports on all nodes:

sudo firewall-cmd --permanent --add-port={4369,5672,25672,15672}/tcp
sudo firewall-cmd --reload

Cluster Formation

  1. Start RabbitMQ on all nodes:
sudo systemctl start rabbitmq-server
  1. Join node2 to cluster:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1 --ram
rabbitmqctl start_app
  1. Verify cluster status:
rabbitmqctl cluster_status
  1. Join node3 similarly:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1 --ram
rabbitmqctl start_app
  1. Confirm all nodes appear in cluster_status output.

Single-Host Multi-Node Deployment

Environment Setup

  • Use a single machine (e.g., 10.10.1.41)

Firewall Configuraton

Open ports for multiple instances:

sudo firewall-cmd --permanent --add-port={4369,5672,5673,5674,25672,25673,25674,15672,15673,15674}/tcp
sudo firewall-cmd --reload

Node Configuration

  1. Configure environment variables in /etc/rabbitmq/rabbitmq-env.conf:
NODE_PORT=5672
NODE_NAME=rabbit1
  1. Stop default service:
sudo systemctl stop rabbitmq-server
  1. Start nodes manually:
# Node1
rabbitmq-server -detached

# Node2
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached

# Node3
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
  1. Form cluster:
# Join rabbit2
rabbitmqctl -n rabbit2 stop_app
rabbitmqctl -n rabbit2 reset
rabbitmqctl -n rabbit2 join_cluster rabbit1 --ram
rabbitmqctl -n rabbit2 start_app

# Join rabbit3
rabbitmqctl -n rabbit3 stop_app
rabbitmqctl -n rabbit3 reset
rabbitmqctl -n rabbit3 join_cluster rabbit1 --ram
rabbitmqctl -n rabbit3 start_app
  1. Verify cluster status with rabbitmqctl cluster_status.

  2. Node removal:

rabbitmqctl -n rabbit3 stop_app
rabbitmqctl -n rabbit1 forget_cluster_node rabbit3

Mirror Queue Configuration

  • Provides high availability (see RabbitMQ HA docs)
  • Standard clusters share metadata only; mirror queues replicate content

Policy Setup

  1. In Admin UI: Policies → Add policy
  2. Configure:
Name: ha-all
Pattern: ^
Apply to: Queues
Priority: 0
Definition: ha-mode = all

Policy Parameters

ha-mode ha-params Description
all (empty) Mirror to all nodes
exactly count Mirror to specified number of nodes
nodes nodename Mirror to specific nodes

Note: Mirroring reduces throughput due to synchronization overhead but provides fault tolerance.

Queue Persistence Tests

Queue Durable Message Persistent Mirrored Result
No No No Data loss on node failure
Yes No No Queue survives restart but messages lost
Yes Yes No Same as above
Any Any Yes Data preserved across node failures

Tags: RabbitMQ Cluster Deployment High Availability Distributed Systems Message Queue

Posted on Tue, 04 Aug 2026 16:49:12 +0000 by sl1m