如何在Ubuntu 18.04 LTS上设置RabbitMQ群集

时间:2020-02-23 14:33:09  来源:igfitidea点击:

在这篇文章中,我们将讨论Ubuntu 18.04上的Setup RabbitMQ群集的过程。
RabbitMQ是一个开源消息代理软件,它通过插件实现高级消息排队协议(AMQP)和传输文本面向邮件传递协议,消息排队遥测传输和其他协议。

消息传递代理的工作是从发布者(发布它们的应用程序)接收消息并将其路由到消费者(处理它们的应用程序)。
AMQP是一种消息传递协议,使客户端应用程序能够与符合符合消息传递中间件代理进行通信。

通过在Ubuntu 18.04上设置RabbitMQ群集,我们可以避免单点故障并在与单实例RabbitMQ设置相比时实现更高的吞吐量。
没有进一步的ADO,让我们在Ubuntu 18.04 LTS上潜入rabbitmq群集设置

设置要求

此设置具有以下要求Ubuntu 18.04 LTS Serversat最少两个RabbitMQ服务器,其中包含Sudo PrivileGe服务器的用户应具有Internet访问权限

Ubuntu 18.04上的此设置的RabbitMQ群集基于两个服务器,其中包含以下IP地址和主机名。

||||
| --- - | --- | - - |
|服务器|主机名| IP地址|
| MQ服务器1 | mq1.example.com | 192.168.121.11 |
| MQ服务器2 | mq2.example.com | 192.168.121.8 |

第1步:设置主机名和DNS

在Ubuntu 18.04上安装RabbitMQ群集的第一步是配置正确的主机名和DNS。

MQ Server 1:

sudo hostnamectl set-hostname mq1.example.com --static

MQ Server 2:

sudo hostnamectl set-hostname mq2.example.com --static

如果我们没有DNS服务器,则可以将记录添加到 /etc/hosts文件

echo "192.168.121.11 mq1.example.com mq1" >> /etc/hosts
echo "192.168.121.8 mq2.example.com mq2" >> /etc/hosts

然后更新系统:

sudo apt update
sudo apt -y upgrade

第2步:在两个节点上安装RabbitMQ服务器

登录服务器并在所有节点上安装RabbitMQ服务器使用下面的教程:

如何在Ubuntu 18.04 LTS上安装最新的RabbitMQ服务器

在Ubuntu 18.04上安装RabbitMQ有两部分:安装Erlang/OtpInstalling RabbitMQ服务器

RabbitMQ服务器的状态应运行:

$sudo systemctl status rabbitmq-server.service 
 rabbitmq-server.service - RabbitMQ broker
 Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
 Active: active (running) since Mon 2016-12-10 10:33:30 PST; 1min 28s ago
 Main PID: 9634 (beam.smp)
 Status: "Initialized"
 Tasks: 87 (limit: 505)
 CGroup: /system.slice/rabbitmq-server.service
        |-9634 /usr/lib/erlang/erts-10.1/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 500
        |-9733 /usr/lib/erlang/erts-10.1/bin/epmd -daemon
        |-9883 erl_child_setup 32768
        |-9906 inet_gethost 4
        `-9907 inet_gethost 4 
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##  ##
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##  ##      RabbitMQ 3.7.9. Copyright (C) 2007-2016 Pivotal Software, Inc.
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ######  ##
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##########  Logs: /var/log/rabbitmq/Hyman@theitroad
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:                     /var/log/rabbitmq/Hyman@theitroad_upgrade.log
 Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:               Starting broker…
 Dec 10 10:33:30 mq1.example.com rabbitmq-server[9634]: systemd unit for activation check: "rabbitmq-server.service"
 Dec 10 10:33:30 mq1.example.com systemd[1]: Started RabbitMQ broker.
 Dec 10 10:33:30 mq1.example.com rabbitmq-server[9634]:  completed with 0 plugins.

第3步:复制RabbitMQ Server 1 Cookie RabbitMQ Server2

对于RabbitMQ群集工作,参与群集的所有节点都应具有相同的cookie。
将Cookie复制到群集中的所有其他节点。

mq1运行:

sudo scp /var/lib/rabbitmq/.erlang.cookie mq2:/var/lib/rabbitmq/.erlang.cookie

步骤4:在Node2上重置RabbitMQ

在节点2上重新配置RabbitMQ并将其加入群集。 1.重新启动rabbitmq服务

sudo systemctl restart rabbitmq-server

2.停止应用程序

$sudo rabbitmqctl stop_app
Stopping rabbit application on node Hyman@theitroad ...

3.重置rabbitmq.

$sudo rabbitmqctl reset
Resetting node Hyman@theitroad ...

3.将节点加入群集

$sudo rabbitmqctl join_cluster Hyman@theitroad
Clustering node Hyman@theitroad with Hyman@theitroad

4.启动应用程序流程

$sudo rabbitmqctl start_app
Starting node Hyman@theitroad ...  completed with 0 plugins.

检查群集状态:

Hyman@theitroad:~# rabbitmqctl cluster_status
warning: the VM is running with native name encoding of latin1 which Jan cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
Cluster status of node Hyman@theitroad ...
[{nodes,[{disc,[Hyman@theitroad,Hyman@theitroad]}]},
 {running_nodes,[Hyman@theitroad,Hyman@theitroad]},
 {cluster_name,<<"Hyman@theitroad">>},
 {partitions,[]},
 {alarms,[{Hyman@theitroad,[]},{Hyman@theitroad,[]}]}]

第5步:配置RabbitMQ HA策略

创建一个允许队列镜像到群集中所有节点的策略。

$sudo rabbitmqctl set_policy ha-all "." '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "." to "{"ha-mode":"all"}" with priority "0" for vhost "/" …

我们可以使用以下列出已配置的策略:

Hyman@theitroad:~# sudo rabbitmqctl list_policies
Listing policies for vhost "/" …
vhost    name    pattern apply-to    definition  priority
/   ha-all  .*  all {"ha-mode":"all"}   0

要删除策略,请使用:

sudo rabbitmqctl clear_policy <policyname>

第5步:测试

最后,在Ubuntu 18.04上测试RabbitMQ群集设置。
启用RabbitMQ管理Web仪表板以便于管理。

sudo rabbitmq-plugins enable rabbitmq_management

如果我们有一个Active UFW防火墙,请允许TCP端口5672和15672

sudo ufw allow proto tcp from any to any port 5672,15672

通过打开URL访问它 http://[server IP|Hostname]:15672

默认情况下,访客用户存在,只能从中连接 localhost
我们可以使用密码"guest"本地登录此用户

为了能够在网络上登录,创建如下所示的管理员用户:

sudo rabbitmqctl add_user admin StrongPassword
sudo rabbitmqctl set_user_tags admin administrator

使用创建的用户登录RabbitMQ管理界面。
我们应该获取所有群集节点的状态。

还可以从Web控制台查看有关节点的更多详细信息。

如果我们登录rabbitmq node2并检查创建的rabbitmq用户,则应看到类似于下面的输出。

# rabbitmqctl list_users
 Listing users …
 user    tags
 admin    [administrator]
 guest    [administrator]