RabbitMQ集群恢復與故障轉(zhuǎn)移的5種解決方案

RabbitMQ鏡像隊列集群的恢復的解決方案和應用場景:

前提:比如兩個節(jié)點A和B組成一個鏡像隊列


場景1: A先停, B后停
方案1: 該場景下B是Master,只要先啟動B,再啟動A即可?;蛘呦葐覣,再30秒之內(nèi)啟動B接口恢復鏡像隊列


場景2: A、B同時停機
方案2:該場景可能由于機房斷電等原因造成的,只需在30秒之內(nèi)連續(xù)啟動A和B即可恢復鏡像


場景3:A先停,B后停,且A無法恢復
方案3: 該場景是1場景的加強版,因為B是Master,所以等B起來以后,在B節(jié)點調(diào)用控制臺命令:rabbitmqctl forget_cluster_node A解除與A的Cluster關(guān)系,再將新的Slave節(jié)點加入B即可重新恢復鏡像隊列


場景4: A先停,B后停,且B無法恢復
方案4:該場景是場景3的加強版,比較難處理,原因是因為Master節(jié)點無法恢復,早在3.1x時代之前沒有什么好的解決方案,但是現(xiàn)在已經(jīng)有解決方案了,在3.4.2以后的版本。因為B是主節(jié)點,所有直接啟動A是不行的,當A無法啟動的時候,也就沒辦法在A節(jié)點上調(diào)用之前的rabbitmqctl forget_cluster_node B命令了。新版本中forget_cluster_node支持--offline參數(shù)

這就意味著允許rabbitmqctl在理想節(jié)點上執(zhí)行該命令,迫使RabbitMQ在未啟動Slave節(jié)點中選擇一個節(jié)點作為Master。當在A節(jié)點執(zhí)行 rabbitmqctl forget_cluster_node --offline B時,RabbitMQ會mock一個節(jié)點代表A,執(zhí)行 forget_cluster_node命令將B剔除cluster,然后A就可以正常的啟動了,最后將新的Slave節(jié)點加入A即可恢復鏡像隊列


場景5:A先停、B后停,且A、B均無法恢復,但是能得到A或B的磁盤文件
方案5:這種場景更加難處理,只能通過恢復數(shù)據(jù)的方式去嘗試恢復,將A與B的數(shù)據(jù)文件模式在$RABBIT_HOME/var/lib/目錄中,把它拷貝到新的節(jié)點對應的mulxia,再將新的節(jié)點hostname改成A或B的hostname,如果是A節(jié)點(Slave)的磁盤文件,則按照場景4處理即可,如果是B節(jié)點(Master)的磁盤文件,則按照場景3處理即可,最后新的Slave加入新節(jié)點后完成恢復。


場景6:A先停、B后停,且A、B均無法恢復,且得不到A和B的磁盤文件

恩,你可以直接跑路了o(╯□╰)o

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容