+
This commit is contained in:
@ -1,341 +1,341 @@
|
||||
Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
|
||||
|
||||
---
|
||||
|
||||
## **Step 1: Prepare the Servers**
|
||||
|
||||
Ensure you have at least **three** nodes (recommended for HA) with:
|
||||
|
||||
- Ubuntu 22.04 (or a supported OS)
|
||||
- Sufficient CPU/RAM based on workload
|
||||
- Open necessary firewall ports (**5672, 15672, 25672**)
|
||||
|
||||
Set hostnames for clarity:
|
||||
|
||||
```bash
|
||||
sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 2: Install Erlang and RabbitMQ**
|
||||
|
||||
Run the following on **all nodes**:
|
||||
|
||||
### **1. Add the RabbitMQ Repository**
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y curl gnupg
|
||||
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc
|
||||
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
|
||||
```
|
||||
|
||||
### **2. Install Erlang and RabbitMQ**
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y rabbitmq-server
|
||||
```
|
||||
|
||||
### **3. Enable RabbitMQ**
|
||||
|
||||
```bash
|
||||
sudo systemctl enable --now rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 3: Configure Clustering**
|
||||
|
||||
### **1. Stop RabbitMQ on All Nodes**
|
||||
|
||||
```bash
|
||||
sudo systemctl stop rabbitmq-server
|
||||
```
|
||||
|
||||
### **2. Configure Cookie for Clustering**
|
||||
|
||||
Run on **all nodes** (same cookie ensures clustering works):
|
||||
|
||||
```bash
|
||||
echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie
|
||||
sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
|
||||
```
|
||||
|
||||
Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes.
|
||||
|
||||
---
|
||||
|
||||
## **Step 4: Join Nodes to the Cluster**
|
||||
|
||||
Perform this on **nodes 2 and 3**, joining them to **node1**:
|
||||
|
||||
```bash
|
||||
sudo rabbitmqctl stop_app
|
||||
sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1
|
||||
sudo rabbitmqctl start_app
|
||||
```
|
||||
|
||||
Check cluster status:
|
||||
|
||||
```bash
|
||||
sudo rabbitmqctl cluster_status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 5: Enable High Availability (HA) Mirroring**
|
||||
|
||||
To replicate all queues, run on **any one node**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
|
||||
```
|
||||
|
||||
This ensures all queues are **replicated across all nodes**.
|
||||
|
||||
---
|
||||
|
||||
## **Step 6: Enable Management UI**
|
||||
|
||||
Run on **each node** to enable the web interface:
|
||||
|
||||
```bash
|
||||
sudo rabbitmq-plugins enable rabbitmq_management
|
||||
```
|
||||
|
||||
Access at:
|
||||
**http://[NODE_IP]:15672**
|
||||
(Default login: `guest/guest`, change this for security.)
|
||||
|
||||
---
|
||||
|
||||
## **Step 7: Test the Cluster**
|
||||
|
||||
Run on **each node**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl list_queues
|
||||
```
|
||||
|
||||
Queues should be visible and synchronized.
|
||||
|
||||
---
|
||||
|
||||
## **Step 8: Enable Auto-Recovery** (Optional)
|
||||
|
||||
Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add:
|
||||
|
||||
```ini
|
||||
cluster_formation.peer_discovery_backend = classic_config
|
||||
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
|
||||
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
|
||||
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
|
||||
```
|
||||
|
||||
Then restart RabbitMQ:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 9: Secure the Cluster** (Recommended)
|
||||
|
||||
### **1. Create an Admin User**
|
||||
|
||||
```bash
|
||||
rabbitmqctl add_user admin StrongPassword123!
|
||||
rabbitmqctl set_user_tags admin administrator
|
||||
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
|
||||
```
|
||||
|
||||
Then **disable the guest account**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl delete_user guest
|
||||
```
|
||||
|
||||
### **2. Enable TLS (Optional)**
|
||||
|
||||
For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
|
||||
|
||||
---
|
||||
|
||||
## **Step 10: Setup Monitoring (Optional)**
|
||||
|
||||
Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**:
|
||||
|
||||
```bash
|
||||
sudo rabbitmq-plugins enable rabbitmq_prometheus
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀
|
||||
|
||||
---
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
# Instructions to fix **unexpected** configuration errors
|
||||
|
||||
If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how:
|
||||
|
||||
## **1️⃣ Create the Configuration File**
|
||||
|
||||
RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`.
|
||||
|
||||
Create the file if it doesn't exist:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/rabbitmq/rabbitmq.conf
|
||||
```
|
||||
|
||||
Then add the following cluster configuration:
|
||||
|
||||
```
|
||||
cluster_formation.peer_discovery_backend = classic_config
|
||||
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main
|
||||
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica
|
||||
```
|
||||
|
||||
Save and exit (`CTRL+X`, then `Y`, then `Enter`).
|
||||
|
||||
---
|
||||
|
||||
## **2️⃣ Set Correct Permissions**
|
||||
|
||||
Ensure the RabbitMQ user can read it:
|
||||
|
||||
```bash
|
||||
sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
|
||||
sudo chmod 644 /etc/rabbitmq/rabbitmq.conf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **3️⃣ Restart RabbitMQ**
|
||||
|
||||
After modifying the configuration, restart the RabbitMQ service:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
Check the status:
|
||||
|
||||
```bash
|
||||
sudo systemctl status rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **4️⃣ Verify the Cluster Configuration**
|
||||
|
||||
After restarting, verify that clustering is working:
|
||||
|
||||
```bash
|
||||
rabbitmqctl cluster_status
|
||||
```
|
||||
|
||||
If the nodes are listed correctly, your setup is working.
|
||||
|
||||
---
|
||||
|
||||
## **5️⃣ If Using the Legacy `.config` Format**
|
||||
|
||||
Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/rabbitmq/rabbitmq.config
|
||||
```
|
||||
|
||||
Add this:
|
||||
|
||||
```erlang
|
||||
[
|
||||
{rabbit, [
|
||||
{cluster_formation, [
|
||||
{peer_discovery_backend, classic_config},
|
||||
{classic_config, [
|
||||
{nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
].
|
||||
```
|
||||
|
||||
Then restart RabbitMQ:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **🔍 Troubleshooting**
|
||||
|
||||
❌ **RabbitMQ doesn't restart?**
|
||||
Check logs for errors:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u rabbitmq-server --no-pager | tail -50
|
||||
```
|
||||
|
||||
❌ **Cluster not forming?**
|
||||
Try forcing a node to join manually:
|
||||
|
||||
```bash
|
||||
rabbitmqctl stop_app
|
||||
rabbitmqctl join_cluster rabbit@rabbitmq-main
|
||||
rabbitmqctl start_app
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
# Instructions to fix **unexpected** management UI authentication errors
|
||||
|
||||
stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837)
|
||||
|
||||
## Answer
|
||||
|
||||
### ❌ **Cannot login with guest/guest credentials**
|
||||
|
||||
I had the same Problem..
|
||||
|
||||
I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this.
|
||||
|
||||
Do not create any config file and mess with it..
|
||||
|
||||
This is what i did then,
|
||||
|
||||
1. Add a new/fresh user, say user test and password test:
|
||||
|
||||
```bash
|
||||
rabbitmqctl add_user test test
|
||||
```
|
||||
|
||||
2. Give administrative access to the new user:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_user_tags test administrator
|
||||
```
|
||||
|
||||
3. Set permission to newly created user:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
|
||||
```
|
||||
|
||||
That's it, enjoy :)
|
||||
Here’s a step-by-step guide to setting up a **RabbitMQ cluster with replication** correctly:
|
||||
|
||||
---
|
||||
|
||||
## **Step 1: Prepare the Servers**
|
||||
|
||||
Ensure you have at least **three** nodes (recommended for HA) with:
|
||||
|
||||
- Ubuntu 22.04 (or a supported OS)
|
||||
- Sufficient CPU/RAM based on workload
|
||||
- Open necessary firewall ports (**5672, 15672, 25672**)
|
||||
|
||||
Set hostnames for clarity:
|
||||
|
||||
```bash
|
||||
sudo hostnamectl set-hostname rabbitmq-node1 # Change for each node
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 2: Install Erlang and RabbitMQ**
|
||||
|
||||
Run the following on **all nodes**:
|
||||
|
||||
### **1. Add the RabbitMQ Repository**
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y curl gnupg
|
||||
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/rabbitmq-key.asc
|
||||
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-key.asc] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
|
||||
```
|
||||
|
||||
### **2. Install Erlang and RabbitMQ**
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y rabbitmq-server
|
||||
```
|
||||
|
||||
### **3. Enable RabbitMQ**
|
||||
|
||||
```bash
|
||||
sudo systemctl enable --now rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 3: Configure Clustering**
|
||||
|
||||
### **1. Stop RabbitMQ on All Nodes**
|
||||
|
||||
```bash
|
||||
sudo systemctl stop rabbitmq-server
|
||||
```
|
||||
|
||||
### **2. Configure Cookie for Clustering**
|
||||
|
||||
Run on **all nodes** (same cookie ensures clustering works):
|
||||
|
||||
```bash
|
||||
echo "MY_CLUSTER_COOKIE" | sudo tee /var/lib/rabbitmq/.erlang.cookie
|
||||
sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
|
||||
```
|
||||
|
||||
Replace `"MY_CLUSTER_COOKIE"` with a strong, identical value on all nodes.
|
||||
|
||||
---
|
||||
|
||||
## **Step 4: Join Nodes to the Cluster**
|
||||
|
||||
Perform this on **nodes 2 and 3**, joining them to **node1**:
|
||||
|
||||
```bash
|
||||
sudo rabbitmqctl stop_app
|
||||
sudo rabbitmqctl join_cluster rabbit@rabbitmq-node1
|
||||
sudo rabbitmqctl start_app
|
||||
```
|
||||
|
||||
Check cluster status:
|
||||
|
||||
```bash
|
||||
sudo rabbitmqctl cluster_status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 5: Enable High Availability (HA) Mirroring**
|
||||
|
||||
To replicate all queues, run on **any one node**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
|
||||
```
|
||||
|
||||
This ensures all queues are **replicated across all nodes**.
|
||||
|
||||
---
|
||||
|
||||
## **Step 6: Enable Management UI**
|
||||
|
||||
Run on **each node** to enable the web interface:
|
||||
|
||||
```bash
|
||||
sudo rabbitmq-plugins enable rabbitmq_management
|
||||
```
|
||||
|
||||
Access at:
|
||||
**http://[NODE_IP]:15672**
|
||||
(Default login: `guest/guest`, change this for security.)
|
||||
|
||||
---
|
||||
|
||||
## **Step 7: Test the Cluster**
|
||||
|
||||
Run on **each node**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl list_queues
|
||||
```
|
||||
|
||||
Queues should be visible and synchronized.
|
||||
|
||||
---
|
||||
|
||||
## **Step 8: Enable Auto-Recovery** (Optional)
|
||||
|
||||
Edit `/etc/rabbitmq/rabbitmq.conf` on **each node** and add:
|
||||
|
||||
```ini
|
||||
cluster_formation.peer_discovery_backend = classic_config
|
||||
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1
|
||||
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2
|
||||
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3
|
||||
```
|
||||
|
||||
Then restart RabbitMQ:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **Step 9: Secure the Cluster** (Recommended)
|
||||
|
||||
### **1. Create an Admin User**
|
||||
|
||||
```bash
|
||||
rabbitmqctl add_user admin StrongPassword123!
|
||||
rabbitmqctl set_user_tags admin administrator
|
||||
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
|
||||
```
|
||||
|
||||
Then **disable the guest account**:
|
||||
|
||||
```bash
|
||||
rabbitmqctl delete_user guest
|
||||
```
|
||||
|
||||
### **2. Enable TLS (Optional)**
|
||||
|
||||
For security, configure TLS in `/etc/rabbitmq/rabbitmq.conf`. Refer to RabbitMQ’s [TLS guide](https://www.rabbitmq.com/ssl.html).
|
||||
|
||||
---
|
||||
|
||||
## **Step 10: Setup Monitoring (Optional)**
|
||||
|
||||
Install **Prometheus & Grafana** or use **RabbitMQ Prometheus plugin**:
|
||||
|
||||
```bash
|
||||
sudo rabbitmq-plugins enable rabbitmq_prometheus
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Now your RabbitMQ cluster is fully set up with **replication and high availability**! 🚀
|
||||
|
||||
---
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
# Instructions to fix **unexpected** configuration errors
|
||||
|
||||
If you can't find the RabbitMQ config file under `/etc/rabbitmq`, it may not exist by default. You need to **create it manually**. Here's how:
|
||||
|
||||
## **1️⃣ Create the Configuration File**
|
||||
|
||||
RabbitMQ uses either a **`.conf` file** (modern format) or a **`.config` file** (legacy format). The recommended format is `.conf`.
|
||||
|
||||
Create the file if it doesn't exist:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/rabbitmq/rabbitmq.conf
|
||||
```
|
||||
|
||||
Then add the following cluster configuration:
|
||||
|
||||
```
|
||||
cluster_formation.peer_discovery_backend = classic_config
|
||||
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-main
|
||||
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-replica
|
||||
```
|
||||
|
||||
Save and exit (`CTRL+X`, then `Y`, then `Enter`).
|
||||
|
||||
---
|
||||
|
||||
## **2️⃣ Set Correct Permissions**
|
||||
|
||||
Ensure the RabbitMQ user can read it:
|
||||
|
||||
```bash
|
||||
sudo chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf
|
||||
sudo chmod 644 /etc/rabbitmq/rabbitmq.conf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **3️⃣ Restart RabbitMQ**
|
||||
|
||||
After modifying the configuration, restart the RabbitMQ service:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
Check the status:
|
||||
|
||||
```bash
|
||||
sudo systemctl status rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **4️⃣ Verify the Cluster Configuration**
|
||||
|
||||
After restarting, verify that clustering is working:
|
||||
|
||||
```bash
|
||||
rabbitmqctl cluster_status
|
||||
```
|
||||
|
||||
If the nodes are listed correctly, your setup is working.
|
||||
|
||||
---
|
||||
|
||||
## **5️⃣ If Using the Legacy `.config` Format**
|
||||
|
||||
Some older installations use an **Erlang-based configuration file** (`rabbitmq.config`). If you prefer that, create:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/rabbitmq/rabbitmq.config
|
||||
```
|
||||
|
||||
Add this:
|
||||
|
||||
```erlang
|
||||
[
|
||||
{rabbit, [
|
||||
{cluster_formation, [
|
||||
{peer_discovery_backend, classic_config},
|
||||
{classic_config, [
|
||||
{nodes, ['rabbit@rabbitmq-main', 'rabbit@rabbitmq-replica']}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
].
|
||||
```
|
||||
|
||||
Then restart RabbitMQ:
|
||||
|
||||
```bash
|
||||
sudo systemctl restart rabbitmq-server
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **🔍 Troubleshooting**
|
||||
|
||||
❌ **RabbitMQ doesn't restart?**
|
||||
Check logs for errors:
|
||||
|
||||
```bash
|
||||
sudo journalctl -u rabbitmq-server --no-pager | tail -50
|
||||
```
|
||||
|
||||
❌ **Cluster not forming?**
|
||||
Try forcing a node to join manually:
|
||||
|
||||
```bash
|
||||
rabbitmqctl stop_app
|
||||
rabbitmqctl join_cluster rabbit@rabbitmq-main
|
||||
rabbitmqctl start_app
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
|
||||
# Instructions to fix **unexpected** management UI authentication errors
|
||||
|
||||
stackoverflow answer [link](https://stackoverflow.com/a/40845332/27251837)
|
||||
|
||||
## Answer
|
||||
|
||||
### ❌ **Cannot login with guest/guest credentials**
|
||||
|
||||
I had the same Problem..
|
||||
|
||||
I installed RabbitMQ and Enabled Web Interface also but still couldn't sign in with any user i newly created, this is because you need to be administrator to access this.
|
||||
|
||||
Do not create any config file and mess with it..
|
||||
|
||||
This is what i did then,
|
||||
|
||||
1. Add a new/fresh user, say user test and password test:
|
||||
|
||||
```bash
|
||||
rabbitmqctl add_user test test
|
||||
```
|
||||
|
||||
2. Give administrative access to the new user:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_user_tags test administrator
|
||||
```
|
||||
|
||||
3. Set permission to newly created user:
|
||||
|
||||
```bash
|
||||
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
|
||||
```
|
||||
|
||||
That's it, enjoy :)
|
||||
|
||||
Reference in New Issue
Block a user