一、現網問題描述
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集群故障恢復詳解