RabbitMQ是一款優秀的消息隊列中間件,提供了穩定、監控完善的產品,但是軟件就會有bug。為了前進路徑可以暢通,我們必須了解出現的一些故障的快速處理方式,畢竟在生產環境,時間就是生命,盡快的處理是避免產生事故的最有效方式。
了解常見的一些故障,我們可以有針對的處理預案,快速、高效的處理故障,更好的運維是我們一直的追求。
查看故障信息,RabbitMQ出現故障,要通過一些有效途徑快速的獲取故障原因,而不能是每次都通過重啟RabbitMQ服務的方式來解決。
如何查看故障信息,從幾個方面
通過rabbitmqctl status ,在出現故障 服務器,查看當前MQ運行狀態,該命令可以看到一些非常有用的信息
通過rabbitmqctl cluster_status ,查看集群狀態是否正常。在RabbitMQ集群由於網絡原因而可能出現網絡割裂的情況下,可以通過該命令查看集群運行狀態
查看rabbitmq 運行日志文件。可能有的小伙伴不知道該文件在哪里,在RABBITMQ_LOG_BASE定義的位置,還有小伙伴可能又要問RABBITMQ_LOG_BASE是什么,我只能說這個是rabbitmq的環境變量值,在rabbitMQ安裝路徑/sbin 目錄下,注意看有一個rabbitmq-env.bat 文件。請通過記事本打開該文件,然后搜索RABBITMQ_LOG_BASE,可以看到具體路徑。更多的就不詳細聊了,在RABBITMQ配置文件我會專門說明
故障信息一覽
- 通過localhost:15672 無法打開監控頁面。
原因:1、RabbitMQ服務未開啟 2、未開啟監控插件。
解決方案:
1、通過rabbitmq-service start 開啟RabbitMQ服務
2、通過rabbitmq-plugins enable rabbitmq_management 開啟監控插件。
通過以上兩種方式的操作,監控頁面一般都可以正常打開了。 - localhost:15672 的登錄密碼不知道?
原因:不懂rabbitmq或rabbitmq的超級小白,或者在安裝時將guest用戶刪除(概率極小),我當時第一次學習也是這樣,打開了監控面板,一臉懵逼,因為我壓根不知道登錄 密碼。
解決方案:
1、如果未使用RabbitMQ配置文件或未更改rabbitmq的配置文件,就是說采用的是默認配置。那么我們就必須知道RabbitMQ安裝以后會默認存在一個用戶,賬號與密碼均 是guest。
2、使用默認賬號密碼均是guest的用戶,仍舊無法登錄。那么為我們就要開始第二步了,通過rabbitmqctl list_users 查看是否有guest用戶。正常情況下,應該顯示
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.8\sbin>rabbitmqctl list_users
如果未看到一個用戶,那么我們可以創建一個用戶guozhiqi(名稱隨意)來執行登錄。
Listing users ...
guest [administrator]
具體操作:
1、執行rabbitmqctl add_user guozhiqi guozhiqi (rabbitmqctl add_user 用戶名 密碼)。執行完該命令后仍舊無法通過guozhiqi/guozhiqi登錄的,因為這個用戶是沒有管理權限的。
2、執行授權操作 rabbitmqctl set_user_tags guozhiqi administrator (rabbitmqctl set_user_tags 用戶名 角色(administrator,monitoring, management))
3、此時通過用戶guozhiqi 就可以登錄了
4、登錄進去你會發現,只能查看,不能進行任何修改或新增操作,原因是沒有權限。此時,針對運維人員就需要給用戶guozhqi授權,執行rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加權限 該問題解決
3、更改guest權限。通過rabbitmqctl change_password guest guest。也可以通過guest/guest用戶登錄啦。。。。 - 執行rabbitmqctl list_users ,出現Error: this command requires the 'rabbit' app to be running on the target node. Start it with 'rabbitmqctl start_app'.
解決方案:這個錯誤很明顯的指出了app未運行。很多人會弄混一個事情,就是一個rabbitmq service可以有多個app存在,也就是說可以搭建單機集群。
rabbitmq-service start/rabbitmq-service stop 是針對rabbitmq服務的操作。
什么情況下才會執行這個操作呢? 目前我已知的有兩種,一種是rabbitmq配置文件更改需要重新啟動(還需要重新安裝奧),另一種就是服務停止 需要開啟
rabbitmqctl stop_app/rabbitmqctl start_app 什么情況下會執行呢?首先我們要知道這兩個命令的作用是什么。關閉或開啟當前app,注意是當前。有興趣的哈,可以搜索單機集群搭建。 - windows服務開啟失敗。RabbitMQ: Erlang machine stopped instantly (distribution name conflict?)
解決方案:如果重命名服務器名稱或使用其他賬戶登錄系統,可能會出現該問題。使用安裝rabbitmq的賬戶進行登錄。
查看rabbitmq目錄是否包含中文或特殊字符,如果有的話,請更改安裝目錄。 - 執行命令 rabbitmqctl status 提示:unable to perform an operation on node 'rabbit@localhost'?
解決方案:首先分析出現這個異常信息,無法中心操作,也就是說RabbitMQ服務沒有啟動造成的。
windows 通過啟動RabbitMQ服務,centos通過rabbitmq-server 來開啟rabbitmq - centos 執行命令rabbitmqctl start_app 提示: bash: rabbitmqctl: command not found...
解決方案:首先可以明確知道的是,rabbitmqctl這個命令找不到。分析centos 中執行操作可能出現命令找不到的情況。
1、/etc/profile 未定義或未生效
2、用戶不同。
其中針對第一個針對性的說明一下,rabbitmq部署完后,會在/etc/profile中增加幾行(目錄可能不同)
export PATH=$PATH:/etc/rabbitmq/erlang/bin
export PATH=$PATH:/etc/rabbitmq/rabbitmq_server/sbin
這幾行的目的就是設置環境變量。不像windows設置了環境變量就會生效,centos 需要執行source /etc/profile 才會生效。因此如果出現command not found的提示,且配置了環境變量,那么請務必執行source /etc/profile 使之生效。
rabbitmq故障一覽,持續記錄出現的RabbitMQ故障及解決方式。