一 实验环境
二 安装步骤
2.1 安装单实例RabbitMQ
可参考:安装rabbitmq 3.7.6_雅冰石的专栏-CSDN博客
2.2 修改两台服务器的/etc/hosts文件
添加:
192.168.144.204 pc1
192.168.144.208 pc2
2.3 拷贝节点一的.erlang.cookie文件到node-2节点
[root@pc1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.144.208:/var/lib/rabbitmq/
[root@pc2 ~]# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
#重启节点2的rabbitmq
systemctl restart rabbitmq-server
2.4 将pc2与pc1组成集群
在第二个节点上执行:
[root@pc2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@pc2 ...
[root@pc2 ~]# rabbitmqctl reset
Resetting node rabbit@pc2 ...
[root@pc2 ~]# rabbitmqctl join_cluster rabbit@pc1
Clustering node rabbit@pc2 with rabbit@pc1
[root@pc2 ~]# rabbitmqctl start_app
Starting node rabbit@pc2 ...
completed with 3 plugins.
[root@pc2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@pc2 ...
[{nodes,[{disc,[rabbit@pc1,rabbit@pc2]}]},
{running_nodes,[rabbit@pc1,rabbit@pc2]},
{cluster_name,<<"rabbit@pc2">>},
{partitions,[]},
{alarms,[{rabbit@pc1,[]},{rabbit@pc2,[]}]}]
进管理界面查看节点:
三 验证rabbitmq集群
3.1 验证数据是否同步
3.1.1 验证虚拟主机
#在其中一个节点上创建虚拟主机,验证下在另一个节点上能否查看到虚拟主机
[root@pc2 ~]# rabbitmqctl add_vhost bb
Adding vhost "bb" ...
[root@pc1 opt]# rabbitmqctl list_vhosts
Listing vhosts ...
bb
/
说明数据能同步过来。
3.1.2 验证用户
#在其中一个节点上创建用户,并设置权限
rabbitmqctl add_user bb 123456
rabbitmqctl set_user_tags bb administrator
rabbitmqctl set_permissions -p bb bb '.*' '.*' '.*'
#在另一个节点上看到用户同步过来了
[root@pc2 ~]# rabbitmqctl list_users
Listing users ...
bb [administrator]
admin [administrator]
guest [administrator]
3.1.2 验证队列
3.1.2.1 创建队列
#这里通过图形用户界面创建队列
登录其中一个节点的管理界面,创建一个队列:
#在另一个节点管理界面上能查到这个新建的队列:
3.1.2.2 设置镜像队列
如果不设置镜像队列,某个节点宕机后,该节点上的队列状态会变成down,会导致该队列不可用,影响业务,数据也可能会丢失,因此需要设置镜像队列。
down状态的队列示例:
#将/的所有队列设置为镜像队列,策略名称为ha-all。
[root@pc1 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
如果不指定虚拟主机名称,默认是只给/设置了镜像队列,想要给某个虚拟主机设置镜像队列,这样做:
rabbitmqctl set_policy -p 虚拟主机名称 策略名称 "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
示例:
[root@pc2 ~]# rabbitmqctl set_policy -p bb bb-ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
Setting policy "bb-ha-all" for pattern "^" to "{"ha-mode":"all","ha-sync-mode":"automatic"}" with priority "0" for vhost "bb" ...
该命令会自动将该虚拟主机上之前创建的队列及之后创建的队列都设置为镜像队列。
可以看到Node处有+1的标识:
3.2 验证rabbitmq集群高可用
宕掉其中一个节点,验证下之前在该节点上创建的虚拟主机是否仍然可用,队列状态是否是正常的(state为down表示不正常),等等。
--本篇文章参考了【消息队列】如何保证MQ的高可用?_hoaven的博客-CSDN博客