rabbitmq 镜像集群模式测试
测试环境
磁盘节点 192.168.1.82 192.168.1.85
内存节点 192.168.1.86
暴露端口 5672 15672
启动顺序 主节点 -> 从节点 (对应的为 先启动82 后启动85 86)
测试步骤
-
集群正常工作(集群中所有节点正常)
- 为方便测试,首先清空
push_send
表中的数据。 - 发送一条消息,通过观察数据库表
push_send
中的send_status
状态验证。(此时的状态流转为0 -> 1 -> 3
, 因消费速度很快 所以可能看不到中间状态0和1) - 验证数据库中的数据状态为3,符合预期。
- 为方便测试,首先清空
-
集群中随机宕掉一台磁盘节点(集群中包含一台磁盘节点,一台内存节点)
-
为方便测试,首先清空
push_send
表中的数据。 -
选择一台磁盘节点,使用
systemctl stop rabbitmq-server
命令宕掉rabbitmq。 -
-
此时,观察控制台会发现对应队列中有一条消息并很快被消费掉,且数据库中
push_send
表对应的数据send_status
字段状态由0 -> 1 -> 3
。 -
验证数据库中的数据状态为3,符合预期。
-
-
集群中随机宕掉内存节点(集群中包含两台磁盘节点)
-
为方便测试,首先清空
push_send
表中的数据。 -
选择一台磁盘节点,使用
systemctl stop rabbitmq-server
命令宕掉rabbitmq。 -
-
此时,观察控制台会发现对应队列中有一条消息并很快被消费掉,且数据库中
push_send
表对应的数据send_status
字段状态由0 -> 1 -> 3
。 -
验证数据库中的数据状态为3,符合预期。
-
-
集群中宕掉所有磁盘节点 (集群中只保留内存节点)
- 此时集群仍处于可用状态。消息仍然能被正常消费,但是消息不可以再被rabbitmq持久化。
- 此时集群仍处于可用状态。消息仍然能被正常消费,但是消息不可以再被rabbitmq持久化。
-
集群节点全部宕掉后重启 (所有节点都关闭等待发送消息后再重启)
-
关闭所有节点
-
发送任意条消息
- 此时数据库中的
push_send
表中send_status
状态为0
- 此时数据库中的
-
重启rabbitmq集群
-
观察定时任务执行结果 (定时任务会在每0/5分钟启动一次,目的是把在rabbitmq宕掉期间的所有消息再次入列,保证消息被正常消费)
-
观察
push_send
表中的send_status
字段 由0 -> 1 -> 3
,符合预期。
-