背景:搭建三个Rabbitmq节点的集群
一、在3台服务器上安装分别Rabbitmq
Rabbitmq的安装教程:https://blog.csdn.net/b15735105314/article/details/114557416
二、集群配置
1、确保3台服务器都有自己的机器名称
主机名相关配置在:/etc/hostname,/etc/hosts。我这里三台机器的IP和机器名如下:
IP地址 | 机器名 |
192.168.40.110 | rabbit01 |
192.168.40.111 | rabbit02 |
192.168.40.112 | rabbit03 |
2、在三台服务器上配置/etc/hosts的映射,如下:(三台机器内容一样)
192.168.40.110 rabbit01
192.168.40.111 rabbit02
192.168.40.112 rabbit03
3、关闭三台服务器上的Rabbitmq,使用下面两个命令查看Rabbitmq服务是否启动,如果启动就关闭
lsof -i:5672
lsof -i:15672
systemctl start rabbitmq-server 启动
systemctl stop rabbitmq-server 停止
systemctl restart rabbitmq-server 重启
4、正常命令启动三个Rabbitmq(还未组成集群,所以使用单节点的启动命令就行)
三台服务器上的Rabbitmq必须启动。
5、复制.erlang.cookie文件
选择rabbit01、rabbit02、rabbit03任意一个节点作为Master(这里选择rabbit01为Master),也就是说我们需要把rabbit01的Cookie文件同步到72、73节点上去,进入/var/lib/rabbitmq目录下,然后把.erlang.cookie文件copy到各个节点下,下面是复制命令:
scp /var/lib/rabbitmq/.erlang.cookie 192.168.40.111:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.40.112:/var/lib/rabbitmq/
6、停止三台Rabbitmq服务器
我们首先停止3个节点的服务:(这里不能使用原来的命令:/etc/init.d/rabbitmq-server stop 或者 systemctl stop rabbitmq-server)
使用如下命令:
rabbitmqctl stop
7、使用集群启动命令启动三台rabbitmq服务器
接下来我们就可以使用集群命令,配置rabbit01、rabbit02、rabbit03为集群模式,3个节点(rabbit01、rabbit02、rabbit03)执行启动命令,后续启动集群使用此命令即可。
rabbitmq-server -detached
8、rabbit02、rabbit03作为slave加入集群操作(确保3台服务器的防火墙已经关掉,或者将相应的端口开放),两台服务器分别执行如下命令:
//注意做这个步骤的时候:需要配置/etc/hosts 必须相互能够寻址到
rabbit02:rabbitmqctl stop_app
rabbit02:rabbitmqctl join_cluster --ram rabbit@rabbit01
rabbit02:rabbitmqctl start_app
rabbit03:rabbitmqctl stop_app
rabbit03:rabbitmqctl join_cluster rabbit@rabbit01
rabbit03:rabbitmqctl start_app
在本文章的结尾会补充上面:rabbitmqctl join_cluster --ram rabbit@rabbit01这条命令的一些说明。
9、修改集群名称(选择执行)
修改集群名称(默认为第一个node名称):
rabbitmqctl set_cluster_name rabbitmq_clusterName
10、查看集群状态
最后在集群的任意一个节点执行命令:查看集群状态
rabbitmqctl cluster_status
三、设置镜像队列(可以不用设置)
设置镜像队列策略(在任意一个节点上执行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看其队列是否在从节点同步。
补充:rabbitmqctl join_cluster --ram rabbit@rabbit01这条命令的一些说明。
rabbitmqctl join_cluster {clusternode} [--ram] 命令介绍(该内容来自https://www.jianshu.com/p/61a90fba1d2a?utm_campaign):
# 表示结合到指定的集群,如果有参数 --ram 表示作为RAM节点结合到该集群中。
# 该命令指令本节结合到指定的集群中,在结合之前,该节点需要reset,所以在使用时,需要格外注意。为了成功运行本命令,必须要停止RabbitMQ应用,例如 stop_app
# 集群节点有两种类型: disc 和 RAM。disc类型,复制数据在RAM和disc上,在节点失效的情况下,提供了冗余保证,也能从一些全局事件中恢复,例如所有节点失效。RAM类型,只复制数据在RAM上,主要表现在伸缩性上,特别是在管理资源(例如:增加删除队列,交换器,或者绑定)上表现突出。
# 一个集群必须至少含有一个disc节点,但通常都多余一个。通过该命令时,默认是设置为disc节点,如果需创建RAM节点,需要指定参数 --ram
# 执行此命令之后,在该节点上启动的RabbitMQ应用,在该节点挂掉之后,会尝试连接节点所在集群中的其他节点。
# 为了离开集群,可以 reset 该节点,也可以使用命令 forget_cluster_node 远程删除节点