×
Community Blog How to Set up a RabbitMQ Cluster on ECS Instances Running CentOS 7

How to Set up a RabbitMQ Cluster on ECS Instances Running CentOS 7

In this tutorial, you will learn how to install and configure a RabbitMQ cluster on Alibaba Cloud ECS instances running CentOS 7 server.

By Sajid Qureshi, Alibaba Cloud Community Blog author.

RabbitMQ is a free and open-source message-broker software that originally implements the AMQP (Advanced Message Queuing Protocol). RabbitMQ is written in the Erlang programming language. It has been extended in order to support other protocols like STOMP (Streaming Text Oriented Messaging Protocol) and MQTT (Message Queuing Telemetry Transport) and other protocols.

In a nutshell, RabbitMQ can be understood as the message queuing software that offers support for sending and receiving messages between distributed systems, applications, and services. It also supports client interfaces and libraries for major programming languages such as Python, NodeJS, Java, PHP etc.

In this tutorial, we will show you how to setup a RabbitMQ cluster on Alibaba Cloud ECS instances installed with CentOS 7. Here we are using three CentOS servers.

Prerequisites

  1. You must have three Alibaba Cloud Elastic Compute Service (ECS) instances activated and have verified your valid payment method. If you are a new user, you can get a free account in your Alibaba Cloud account. If you don't know about how to set up your ECS instance, you can refer to this tutorialor quick-start guide. Your ECS instance must have at least 1GB RAM and 1 Core processor.
  2. Root Privileges

Procedure

Follow the steps outlined below to setup a RabbitMQ cluster on ECS instances running CenterOS 7.

Update the System

We recommend you to install any new packages on a newly updated server. Upgrade all the available packages on each server using the sudo yum -y update command.

For an easy installation we suppose the three servers are :

  • YourServerIP_1 node01
  • YourServerIP_2 node02
  • YourServerIP_3 node03

Next, you will need to set up a host file for each server and map each server IP address as a hostname. Edit the /etc/hosts file using the nano text editor with the sudo nano /etc/hosts command.

Add the following configuration there:

YourServerIP_1 node01
YourServerIP_2 node02
YourServerIP_3 node03

Replace YourServerIP in the above code with your actual IP address then save and exit.

Install RabbitMQ Server

We will install the RabbitMQ server from the EPEL repository. So, you will need to first add the EPEL repository to the CentOS 7 system. Run the sudo yum -y install epel-release command to do so.

Now install the RabbitMQ server to all the nodes using the sudo yum -y install rabbitmq-server command.

After the installation is completed, you will need to start the RabbitMQ services and enable it to launch at the boot time. Run the following commands one-by-one and they'll do the job for you.

sudo systemctl start rabbitmq-server 
sudo systemctl enable rabbitmq-server

Now the RabbitMQ server has been successfully installed on all the nodes. Next, you will need to enable management plugins. By doing so you will be able to monitor and handle RabbitMQ server from a web browser. RabbitMQ management plugins run on default TCP port 15672. Let's enable the RabbitMQ management plugins using the sudo rabbitmq-plugins enable rabbitmq_management command.

Next, you will need to restart the RabbitMQ service using the sudo systemctl restart rabbitmq-server command.

Configure Firewall

Now you have installed the RabbitMQ server and also enabled the management plugins successfully. Next, you will need to modify the firewalld rules to open the port required by RabbitMQ. Execute the following commands one by one and they will do the job for you.

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

Now reload the firewalld services to apply all the changes using the sudo firewall-cmd --reload command.

Set up RabbitMQ Cluster

All the dependencies are installed and everything is configured. Now we are ready to set up a RabbitMQ cluster. The .erlang.cookie file should be the same on all the nodes to set up a RabbitMQ cluster. We will copy the .erlang.cookie file from node01 to the other two nodes to avoid any errors.

Execute the following commands to copy .erlang.cookie file from node01.

scp /var/lib/rabbitmq/.erlang.cookie root@node02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node03:/var/lib/rabbitmq/

You should not get any error on both servers. Next, you will need to set up both servers node02 and node03 to join the cluster node01. In order to do so, execute all the below-given commands on node02 and node03 servers. First of all, restart the RabbitMQ service and then stop the app using the following commands.

sudo systemctl restart rabbitmq-server
sudo rabbitmqctl stop_app

Execute the following command to join the cluster on node1.

sudo rabbitmqctl join_cluster rabbit@node01. You can start the app using the sudo rabbitmqctl start_app command. Now, you have created the RabbitMQ cluster using node01, node02, and, node03 as the members of this cluster. You can also check the status of the RabbitMQ cluster using the sudo rabbitmqctl cluster_status command. If nothing goes wrong then you won't get any errors.

Create a New User

Create a new admin user for your RabbitMQ cluster. You don't have to create a user on all the nodes, you will only need to create a new user on any one node and it will automatically reflect on all the other nodes. Here we will create a new admin user from node01 using the following command.

sudo rabbitmqctl add_user YourUsername YourPassword

Please replace the YourUsername and YourPassword according to your choice.

Next, set up the new user as an administrator with the following command:

sudo rabbitmqctl set_user_tags YourUsername administrator

Now you will need to allow your user permission to modify all the vhosts. Run the following command and it'll do the job for you.

sudo rabbitmqctl set_permissions -p / YourUsername ".*" ".*" ".*"

Now our new admin user is created, so you can delete the default guest user if you want with the sudo rabbitmqctl delete_user guest command.

Setup Queue Mirroring

You will need to set up queue mirroring because if the node that hosts queue master fails then the oldest mirror will be allocated as the new master. Queue mirroring is configured using HA (Highly Available) polices. You need to create a policy which matches them and sets policy keys ha-mode and (optionally) ha-params.

You can setup ha policy named ha-all which all queues on the RabbitMQ cluster will be mirroring to all nodes on the cluster. Execute the following command to do so.

sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

Below is a policy where queues whose names begin with "two" are mirrored to any two nodes in the cluster.

sudo rabbitmqctl set_policy ha-two "^two\." \   '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

Below policy where queues whose names begin with "nodes" are mirrored to specific nodes (here node02 and node03) in the cluster.

sudo rabbitmqctl set_policy ha-nodes "^nodes\." \   '{"ha-mode":"nodes","ha-params":["rabbit@node02", "rabbit@node03"]}'

You can list all the available policies using the sudo rabbitmqctl list_policies; command. You can also remove any policy using the sudo rabbitmqctl clear_policy ha-two command.

Set up the Web Interface

We have installed and configured the RabbitMQ cluster, and now we are ready to test it through the web. Open up your favorite web browser and visit YourServerIP address with port 15672 http://YourServerIP1:15672/. You should see the RabbitMQ login web page like this:

2

Enter your admin username and password that we set up earlier and then click on the Login button. On the next interface, you will see the RabbitMQ admin dashboard. All the cluster nodes will appear on the admin dashboard. Next, you can deploy more cluster nodes and manage them from the admin dashboard. You can also manage your users and HA policies from the RabbitMQ admin dashboard.

If you want to check your current ha policies then go to the RabbitMQ admin dashboard and click on the Admin tab and then click on the Policies menu on the right side. You will get all the RabbitMQ ha policies that we have created earlier.

Conclusion

In this tutorial, you have learned how to install and configure a RabbitMQ cluster on Alibaba Cloud ECS instances installed with CentOS 7. You also learned to set up queue mirroring with high-availability policies and manage them. We hope now you have enough knowledge to work with RabbitMQ cluster.

0 0 0
Share on

Alibaba Clouder

1,501 posts | 243 followers

You may also like

Comments

Alibaba Clouder

1,501 posts | 243 followers

Related Products