如何在Ubuntu 18.04 LTS上设置RabbitMQ群集
在这篇文章中,我们将讨论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]