RabbitMQ是一款基于Erlang OTP的开源消息队列软件,采用AMQP(高级消息队列)协议,支持客户端应用程序和消息中间件代理之间进行通信。除此之外,RabbitMQ使用插件和流行的消息队列协议进行交互,如MQTT(Message Queuing Telemetry Transport)、STOMP(Streaming Text Oriented Messaging Protocol)等。
我们知道,单台服务器部署可能会引起单点故障,因此我们需要部署RabbitMQ集群方案。集群方案相比单机方案拥有更高的可靠性和吞吐量。这篇帮助介绍如何在一台Ubuntu 20.04云服务器上安装设置RabbitMQ集群。我们需要准备两台更新到最新状态的Ubuntu 20.04云服务器,并且在这两台云服务器上都按照好RabbitMQ服务端。
设置节点主机名
对于集群中的全部云服务器而言,都是平级的节点,承担的角色都是一样的,并没有功能上的差异。假设两台云服务器的IP地址和主机名如下:
- 192.0.2.10 rabbitmq-1
- 192.0.2.11 rabbitmq-2
执行以下命令,设置两台云服务器的主机名。
$ sudo hostnamectl set-hostname rabbitmq-1 --static
$ sudo hostnamectl set-hostname rabbitmq-2 --static
然后远程登录这两台云服务器,编辑/etc/hosts文件。
$ sudo nano /etc/hosts
分别增加以下代码,将主机名和IP地址对应起来。
192.0.2.10 rabbitmq-1
192.0.2.11 rabbitmq-2
重启云服务器,让主机名生效。
复制RabbitMQ cookie
RabbitMQ节点之间使用cookie技术来进行通信。要让节点之间能够相互通信,必须拥有同样的共享密文,也被称为cookie。因此,我们需要将cookie信息从rabbitmq-1节点复制到rabbitmq-2节点。
远程登录rabbitmq-1节点,打开下面的文件并复制全部内容。
$ sudo nano /var/lib/rabbitmq/.erlang.cookie
然后远程登录rabbitmq-2节点,打开下面的文件并粘贴从rabbitmq-1节点复制的内容。如果有其他节点,请重复以上操作。
$ sudo nano /var/lib/rabbitmq/.erlang.cookie
设置节点加入集群
接下来,我们需要把全部节点加入到集群中。除了第一个rabbitmq-1节点之外,登录其他节点执行以下命令。
$ sudo systemctl restart rabbitmq-server
$ sudo rabbitmqctl stop_app
$ sudo rabbitmqctl reset
$ sudo rabbitmqctl join_cluster rabbit@rabbitmq-1
$ sudo rabbitmqctl start_app
执行完毕后,检查节点的状态。
$ sudo rabbitmqctl cluster_status
创建队列镜像
为确保高可用,集群中的所有节点需要创建队列镜像。远程登录各节点后,执行以下命令。
$ sudo rabbitmqctl set_policy ha-all "." '{"ha-mode":"all"}'
$ sudo rabbitmqctl list_policies
启用管理平台
在某台云服务器上启用RabbitMQ管理平台,方便在统一界面上管理全部节点,注意修改SecurePassword为初始密码。
$ sudo rabbitmq-plugins enable rabbitmq_management
$ sudo rabbitmqctl add_user admin SecurePassword
$ sudo rabbitmqctl set_user_tags admin administrator
至此,我们已经完成了RabbitMQ集群的安装设置,可以通过管理员账号登录管理平台,对RabbitMQ集群进行各项设置。