高可用集群环境(镜像模式):
双节点:
rabbit@rabbit1(master)、rabbit@rabbit2(slave)
集群设置:
rabbit1控制台:
1 | rabbitmqctl stop_app |
将节点2加入到集群,rabbit2控制台:
1 | rabbitmqctl stop_app |
参数“—ram”表示设置为内存节点,忽略此参数则默认为磁盘节点。可以用命令
rabbitmqctl change_cluster_node_type disc
改变节点类型,需要注意的是集群环境中至少有一个为磁盘节点
最后查看集群状态:
1 | root@rabbit2:/# rabbitmqctl cluster_status |
首先解决网络分区导致队列不可用的问题,需要先设置队列的高可用策略,
在任意mq节点控制台执行命令:
1 | rabbitmqctl set_policy -p / ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' |
-p 指定vhost
“^” 指定策略匹配到所有队列
然后进入rabbit1控制台,编辑mq配置分区恢复处理策略:
1 | root@rabbit1:/# vim /etc/rabbitmq/rabbitmq.conf |
添加以下内容:
1 | ## 指定网络分区处理策略 |
RabbitMQ提供了4种处理网络分区的方式:
- ignore 默认,RabbitMQ不会自动做任何处理,即需要手动处理。
- pause_minority 这种处理方式适合集群节点数大于2个且最好为奇数的情况,因为当网络恢复时,有可能两个节点会自动启动恢复网络分区,也有可能还是保持关闭状态。
- pause_if_all_down, [nodes], ignore|autoheal RabbitMQ会自动关闭不能和[nodes]中节点通信的节点。
- autoheal RabbitMQ会自动决定一个获胜的(winning)分区,然后重启不在这个分区中的节点以恢复网络分区。
最后重启节点1,使策略生效。

