一、现网问题描述
1.理想情况
现网mq倒换演练,即关闭rabbitmq主,此时keepalived的检测脚本检查到rabbitmq服务异常,触发脚本关闭主服务的keepalived,那么keepalived的虚拟ip就会绑定到从服务器上,继续使用rabbitmq从节点。
2.实际情况
消息队列无法被消费,必须重启应用才能正常消费
二、现网应用包参考
rabbitmq3.6.6
rabbitmq3.6.6创建队列脚本
三、现网问题复现
1.客户操作
2.问题时间线
a、凌晨客户倒换演练的操作
1、在1机上systemctl stop rabbitmq-server
reboot
重启后 systemctl status rabbitmq-server
发现mq没有启动
然后通过 systemctl list-unit-files | grep mq 确认mq已经设置了开始自启
保险起见 执行 systemctl enable rabbitmq-server
再重启一次 reboot
systemctl status rabbitmq-server 确认了mq已经启动
2、在2机 systemctl stop rabbitmq-server
reboot
重启后 systemctl status rabbitmq-server
发现mq没有启动
然后通过 systemctl list-unit-files | grep mq 发现mq没有设置开始自启
执行 systemctl enable rabbitmq-server
再重启一次 reboot
systemctl status rabbitmq-server 确认了mq已经启动
b、上午的处理操作
1、在2机上ps -ef | grep mq
kill 掉进程
再执行 systemctl stop rabbitmq-server
systemctl disabled rabbitmq-server
最后执行 rabbitmq-server -detached
2、1机上执行 systemctl restart rabbitmq-server
3.尝试复现问题
1)正常情况
主mq正常消费消息队列
2)异常情况-主mq服务异常
此时keepalived每15s检查主mq服务,发现主mq异常,停止keepalived服务器,keepalived自动绑定到从服务器上,此时从mq继续正常消费消息队列
3)异常情况-主keepalived异常
同情况2,直接自动绑定到从服务器上
4)异常情况-从mq或keepalived异常
不影响正常主mq消费
5)异常情况-mq倒换演练-重启主服务器
重启操作后(即手动模拟重启,先关机shutdown -h now,再开机)
--关机后的主服务器
keepalived的vip是否已飘到从服务器上--成功飘到从服务器
rabbitmq的主集群是否挂掉--挂掉,从mq接管服务
是否能够正常消费消息队列--从mq正常消费
--开机后的主服务器
keepalived 关闭状态
rabbitmq 关闭状态,使用命令rabbitmq-server -detached即可启动主集群
==>仍然能正常生产和消费消息队列
四、现网问题处理
1.分析现网问题
在虚拟机模拟现网环境,重启服务器操作(mq倒换演练)不会复现Rabbitmq无法消费情况;是否是因为使用错误命令/直接杀掉进程导致消息队列阻塞,无从考证
2.解决步骤
- 与客户确认,由我方提供mq倒换演练具体操作方案
- 编写mq倒换演练具体操作方案
- 提供QA部门审核
- 测试环境执行倒换方案,检查是否有效
- 确认时间,重新在现网执行倒换演练
参考:
RabbitMQ集群故障恢复详解