Files
Ubuntu_docs/Brokers/rabbitmq_replication_setup_instructions.md

342 lines
6.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Heres 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 RabbitMQs [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 :)