服务器情况
| 节点(理解用) | 节点名称(计算生成) | 主机名 | 主机IP |
|---|---|---|---|
| node1 | rabbit@VM-24-15-centos | VM-24-15-centos | 49.xxx.99 |
| node2 | rabbit@hello-TQ2 | hello-TQ2 | 15xxxx212 |
| node3 | rabbit@hello_TQ1 | hello_TQ1 | 43.xxx.116 |
部署设计,如下:


rabbit@node1.messaging.svc.local 是一个节点名称,前缀为 rabbit,主机名为 node1.messaging.svc.local。再例如:rabbit@VM-24-15-centos、rabbit@hello_TQ1。
4369端口、25672端口,关于相关端口,如下:
/var/lib/rabbitmq/.erlang.cookie(由服务器使用)和$HOME/.erlang.cookie(由CLI工具使用)中。
firewall-cmd --state # 查看防火墙的状态
sudo firewall-cmd --add-port=4369/tcp --permanent
sudo firewall-cmd --add-port=25672/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
rabbitmqctl stop_app 时报错,不能链接此端口。vim /etc/hosts,让集群节点间需能互相访问,故每个集群节点的hosts文件应包含集群内所有节点的信息以保证互相解析。
服务器IP1 VM-24-15-centos
服务器IP2 hello-TQ2
服务器IP3 hello_TQ1

systemctl restart network
.erlang.cookie文件分别拷贝到 node2 和 node3 对应的机器上。systemctl stop rabbitmq-server
或
service rabbitmq-server stop
scp /var/lib/rabbitmq/.erlang.cookie root@node2服务IP:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node3服务IP:/var/lib/rabbitmq/
rabbitmq-server -detached
rabbit@hello-TQ2和rabbit@hello_TQ1,加入node1节点的集群,比如rabbit@VM-24-15-centos。在此之前,必须重置两个新加入的成员。
rabbitmqctl stop_app # 1.关闭RabbitMQ服务
rabbitmqctl reset # 2.重置节点
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
rabbitmqctl join_cluster rabbit@VM-24-15-centos
rabbitmqctl start_app # 4.启动服务
rabbit@hello-TQ2与rabbit@hello_TQ1 加入一个集群。为此,我们要在 rabbit@hello-TQ2与rabbit@hello_TQ1 上停止 RabbitMQ 应用程序并加入 rabbit@VM-24-15-centos(node1节点) 群集,然后重新启动 node2、node3的RabbitMQ 应用程序。

unable to connect to epmd (port 4369) on VM-24-15-centos: nxdomain (non-existing domain)

rabbitmqctl reset 命令时报错,错误如下:Error:
{:cannot_start_mnesia, {{:shutdown, {:failed_to_start_child, :mnesia_kernel_sup, :killed}}, {:mnesia_app, :start, [:normal, []]}}}

cd /var/lib/rabbitmq/mnesia/rabbit@hello_TQ1
rm -rf ./*
cd /var/lib/rabbitmq
rm -rf erl_crash.dump
rm -rf MnesiaCore*

Error:
{:corrupt_or_missing_cluster_files, {:error, :enoent}, {:error, :enoent}}
rabbitmq-server -detached
rabbitmqctl start_app # 先启
rabbitmqctl cluster_status
rabbitmqctl stop_app # 再停
rabbitmqctl reset # 重置
rabbitmqctl join_cluster rabbit@VM-24-15-centos
rabbitmqctl start_app

rabbitmqctl cluster_status 命令,我们可以看到这两个节点已加入集群中:rabbitmqctl cluster_status


rabbitmqctl add_user mqAdmin2 123456
rabbitmqctl set_user_tags mqAdmin2 administrator
rabbitmqctl set_permissions -p "/" mqAdmin2 ".*" ".*" ".*"


RabbitMQ 3.9.13 Erlang 23.3.4.18,没有找到默认的 rabbitmq.conf 文件 或 rabbitmq.conf.d文件。
/etc/rabbitmq目录下,如果有这个配置文件的,可以查看配置文件里的 cluster_formation.peer_discovery_backend 行的配置,如果该行的值为rabbit_peer_discovery_classic_config,则表示启用了自动集群发现机制。如果该行的值为其他任何值,则表示未启用自动集群发现机制。rabbitmqctl environment 命令查看配置,如下:rabbitmqctl environment | grep peer_discovery_backend


rabbitmqctl stop_app # 关闭rabbitMQ服务
rabbitmqctl forget_cluster_node rabbit@hello_TQ1

rabbitmqctl -n rabbit@hello-TQ2 stop_app
rabbitmqctl forget_cluster_node rabbit@hello-TQ2



exactly,并指定复制系数 ha-params。rabbitmqctl set_policy ha-two "^two\." \
'{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'


report-two当策略名称:rabbitmqctl set_policy report-two "^report\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

以“susu.”开头的队列匹配,并配置镜像到群集中的所有节点。
rabbitmqctl set_policy ha-all "^susu\." '{"ha-mode":"all"}'




以“beijing.”开头的队列将镜像到群集中的特定节点(即:指定的节点),配置命令如下:rabbitmqctl set_policy ha-nodes "^beijing\." '{"ha-mode":"nodes","ha-params":["rabbit@VM-24-15-centos","rabbit@hello-TQ2"]}'



rabbitmqctl set_policy ha-nodes "^haidian\." '{"ha-mode":"nodes","ha-params":["rabbit@VM-24-15-centos"]}'



ha 指的是:high available(高可用)