文章目錄
RabbtiMQ Cluster failover 後無法啟動 RabbitMQ instance
之前測試 RabbtiMQ Cluster 設定及 EasyNetQ 連線時,反覆進行幾次 node shutdown, RabbitMQ 都可以正常提供服務,EasyNetQ 只有在 failover 後的第一次收發訊息會比平常多花個幾秒鐘處理外,其他也沒有異狀,直到有次測試將其中一個 node shutdown 後就下班,隔天發現時卻無法重新啟動 XD
經過反覆測試後,發現如果是長時間失去連線,會造成該 node 無法重新加入 cluster,至於原因還不明,可能得待我的 linux 環境架好再來確認是否因為 windows 環境所造成的,目前就先紀錄一下解決方式
錯誤訊息
訊息內容
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin>rabbitmqctl.bat start_app Starting node rabbit@TWDT153 BOOT FAILED =========== Timeout contacting cluster nodes: ['rabbit@DESKTOP-1JHUOUJ']. BACKGROUND ========== This cluster node was shut down while other nodes were still running. To avoid losing data, you should start the other nodes first, then start this one. To force this node to start, first invoke "rabbitmqctl force_boot". If you do so, any changes made on other cluster nodes after this one was shut down may be lost. DIAGNOSTICS =========== attempted to contact: ['rabbit@DESKTOP-1JHUOUJ'] rabbit@DESKTOP-1JHUOUJ: * unable to connect to epmd (port 4369) on DESKTOP-1JHUOUJ: nxdomain (non-existing domain) current node details: - node name: rabbit@TWDT153 - home dir: C:\Windows - cookie hash: OCvj/hYhPIGszubMh72YxA== Error: timeout_waiting_for_tables
錯訊畫面
解決方式
先停止仍在運作中的 node
rabbitmqctl.bat stop_app
如果無法順利 stop_app,可以嘗試反覆執行
stop_app
及start_app
執行 force_boot
rabbitmqctl.bat force_boot
重新啟動 RabbitMQ cluster 各個 node
rabbitmqctl.bat start_app
心得
經過使用 force_boot
指令後,再重新啟動 RabbitMQ cluster 的各個 node 後又一切正常了,反覆執行 failover 也可正常運作,就連 node 長時間 shutdown 一樣加不回去的狀況也依舊,沒有改善 XD
說實話就是沒有根本解決問題,感覺很虛;而且解決方式也需要離線 RabbitMQ cluster 上的各個 node,這樣跟沒有 HA 是一樣的,如果有天 production 環境遇到這個狀況就完蛋了 >”<
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-28
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。