目的
本实验检验在设置好队列镜像的情况下,非正常关闭保存有主队列的节点和镜像队列的节点后,队列是否可以继续正常工作。
环境
3 台服务器(IP: 64,65,66)配置集群。
- 在 64 上配置队列。
- 在 65 上配置镜像队列。
- 生产端连接 65,消费端连接 66.
过程
1. 查看集群环境,确保集群正常启动
rabbitmqctl cluster_status
Cluster status of node 'rabbit@TK-RABBITMQ1' ...
[{nodes,[{disc,['rabbit@TK-RABBITMQ1','rabbit@TK-RABBITMQ2',
'rabbit@TK-RABBITMQ3']}]},
{running_nodes,['rabbit@TK-RABBITMQ2','rabbit@TK-RABBITMQ3',
'rabbit@TK-RABBITMQ1']},
{cluster_name,<<"rabbit@TK-RABBITMQ1">>},
{partitions,[]},
{alarms,[{'rabbit@TK-RABBITMQ2',[]},
{'rabbit@TK-RABBITMQ3',[]},
{'rabbit@TK-RABBITMQ1',[]}]}]
2. 在 TK-RABBITMQ2 节点上建立镜像
rabbitmqctl set_policy test_policy "^test\." '{"ha-mode":"nodes","ha-params":["rabbit@TK-RABBITMQ2"]}'
Setting policy "test_policy" for pattern "^test\\." to "{\"ha-mode\":\"test\",\"ha-params\":[\"rabbit@TK-RABBITMQ2\"]}" with priority "0" ...
- 启动生产端及消费端程序,生产端程序每秒产生一个消息。
- 在主队列节点的机器上 kill 掉 64服务器进程。
-
观察队列和程序情况。
通过查看队列没有问题,而程序依然还在进行,发送端和接收端都在正常运行。
- kill 掉65服务器进程
- 观察队列和程序情况
此时发现接收端立刻有异常产生,发送端也出现异常,消息不能正常接收和发送了,而此时66服务器还在正常运行。
结论
- 当主队列所在的服务器宕机,镜像节点依然运行时,消息依然可以正常发送和接收
- 当主队列和镜像队列所在的服务器都宕机时,消息不能正常发送和接收
更多实验可点击:Rabbitmq 实验