RabbitMQ troubleshooting
RabbitMQ是一款優秀的訊息佇列中介軟體,提供了穩定、監控完善的產品,但是軟體就會有bug或避免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
Listing users ...
guest[administrator]
如果未看到一個使用者,那麼我們可以建立一個使用者guozhiqi(名稱隨意)來執行登入。
具體操作:
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目錄是否包含中文或特殊字元,如果有的話,請更改安裝目錄。
rabbitmq故障一覽,持續記錄出現的RabbitMQ故障及解決方式。