默认情况下:RabbitMQ代理操作所需的所有数据、状态都将跨所有节点复制。这方面的一个例外是消息队列。默认情况下,消息队列位于一个节点上,尽管它们可以从所有节点看到和访问。
三台已装好mq的主机
node1: 192.168.176.3 mq1 master 主节点
node2: 192.168.176.4 mq2 repl1 副本节点
node3: 192.168.176.5 mq3 repl2 副本节点
修改mq1的hosts配置文件
vim /etc/hosts
发送配置文件到mq2和mq3
scp /etc/hosts root@mq2:/etc/
scp /etc/hosts root@mq3:/etc/
在mq2和mq3中查看hosts文件,检查是否发生变化
systemctl status rabbitmq-server
注意:3台主机都要启动mq服务
systemctl stop rabbitmq-server
systemctl status rabbitmq-server
注意:必须保证三台主机的cookie是一致的。
scp /var/lib/rabbitmq/.erlang.cookie root@mq2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@mq3:/var/lib/rabbitmq/
rabbitmq-server -detached
后台启动完成后,可以使用命令查看集群状态
rabbitmqctl cluster_status
发现当前mq1集群只有自己
rabbitmqctl stop_app
注意:格式必须一致
rabbit@主机名
,这里只能写主机名,所有之前hosts文件映射尤为重要。
rabbitmqctl join_cluster rabbit@mq1
rabbitmqctl start_app
rabbitmqctl cluster_status
加入集群成功,也可以查看web管理页面
镜像队列机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ集群的整体高可用性。
在副本集群基础上进行加工
在任意节点上执行命令,查看当前的策略
rabbitmqctl list_policies
在任意节点上执行命令,添加策略
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
查看web界面
rabbitmqctl clear_policy ha-all
查看web界面
搭建集群后,主节点和从节点的交换机和消息队列是镜像的。如果此时主节点宕机了,从节点还能继续消费,Queues中的Node会替换成子节点,当主节点重启完成后,会加入到对应的Node子节点中,这样就形成了高可用架构。