維運手冊
# 前言
本文檔為金蝶Apusic分散式訊息佇列for RabbitMQ(Apusic Distributed Message Queue,簡稱:ADMQ for RabbitMQ)的運維手冊,旨在為中間件運維人員提供ADMQ for RabbitMQ標準化運維指南,涵蓋安裝部署、配置優化、日常運維、故障排除、安全加固等核心場景,確保ADMQ for RabbitMQ產品服務穩定、高效、安全運行。
# 適用對象
本文檔適用於IT資訊化業務負責人、研發經理、軟體專案經理、軟體架構師、運維工程師。
# 相關文檔
了解更多ADMQ for RabbitMQ產品相關的資訊,請參閱以下ADMQ for RabbitMQ產品手冊文件集:
| 序號 | 手冊文檔 | 說明 |
|---|---|---|
| 1 | 金蝶Apusic分散式訊息佇列for RabbitMQ 快速使用手冊 | 簡單介紹了如何快速上手使用ADMQ for RabbitMQ。 |
| 2 | 金蝶Apusic分散式訊息佇列for RabbitMQ 安裝手冊 | 詳細介紹如何在各作業系統上安裝ADMQ for RabbitMQ,以及ADMQ for RabbitMQ服務啟停等操作。 |
| 3 | 金蝶Apusic分散式訊息佇列for RabbitMQ 訊息引擎使用者手冊 | 詳細介紹 ADMQ for RabbitMQ 訊息引擎相關功能的使用、配置、管理及配套工具的使用方法。 |
| 4 | 金蝶Apusic分散式訊息佇列for RabbitMQ 管控台使用者手冊 | 詳細介紹ADMQ for RabbitMQ管控台相關功能的使用和操作說明。 |
| 5 | 金蝶Apusic分散式訊息佇列for RabbitMQ 開發手冊 | 詳細介紹基於各開發語言進行ADMQ for RabbitMQ用戶端應用開發的說明。 |
| 6 | 金蝶Apusic分散式訊息佇列for RabbitMQ 遷移手冊 | 詳細介紹從RabbitMQ遷移到ADMQ for RabbitMQ的說明。 |
| 7 | 金蝶Apusic分散式訊息佇列for RabbitMQ 運維手冊 | 詳細介紹ADMQ for RabbitMQ的監控、運維、安全加固等運維說明。 |
| 8 | 金蝶Apusic分散式訊息佇列for RabbitMQ 效能優化手冊 | 詳細介紹ADMQ for RabbitMQ效能調優的說明。 |
# 技術支援
ADMQ for RabbitMQ產品提供全面的技術支援服務,您可以透過以下方式獲得技術支援:
- 網址:www.apusic.com
- 電話:400-855-5800
- 信箱:support@apusic.com
- 金蝶雲社群:https://vip.kingdee.com/?productId=73&productLineId=14&lang=zh-CN
您在取得技術支援時,請提供如下資訊:
- 您的姓名
- 公司資訊與聯絡方式
- 作業系統及其版本
- 產品版本號
- 出現異常及錯誤的日誌、截圖等詳細資訊
# 日常運維
# 服務管理
# 啟動服務
# 啟動 RabbitMQ 服務
bin/admq-daemon start rabbitmq server
# 啟動應用(bin/admq rabbitmq admin ctl)
bin/admq rabbitmq admin ctl start_app
1
2
3
4
5
2
3
4
5
# 停止服務
# 停止應用
bin/admq rabbitmq admin ctl stop_app
# 停止 RabbitMQ 服務
bin/admq-daemon stop rabbitmq server
1
2
3
4
5
2
3
4
5
# 查看服務狀態
# 查看服務狀態
bin/admq rabbitmq admin status
# 查看節點狀態
bin/admq rabbitmq admin ctl status
# 查看叢集狀態
bin/admq rabbitmq admin ctl cluster_status
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 重新啟動服務
# 重新啟動服務
bin/admq-daemon restart rabbitmq server
1
2
2
# 日誌管理
# 日誌位置
| 日誌類型 | 路徑 | 說明 |
|---|---|---|
| 服務日誌 | ./log/rabbitmq/rabbit@hostname.log | RabbitMQ 主日誌 |
| 啟動日誌 | ./log/rabbitmq/rabbit@hostname-sasl.log | SASL 日誌 |
| 管控台日誌 | ./logs/ | 管控台運行日誌 |
# 監控檢查
# 日常檢查清單
| 檢查項 | 檢查命令 | 正常標準 |
|---|---|---|
| 節點狀態 | bin/admq rabbitmq admin ctl status | 節點運行正常 |
| 叢集狀態 | bin/admq rabbitmq admin ctl cluster_status | 所有節點在線 |
| 記憶體使用 | bin/admq rabbitmq admin ctl status | 低於 vm_memory_high_watermark |
| 磁碟空間 | df -h | 高於 disk_free_limit |
| 連線數 | bin/admq rabbitmq admin ctl list_connections | 正常範圍內 |
| 佇列堆積 | bin/admq rabbitmq admin ctl list_queues messages | 無異常堆積 |
| 消費者數 | bin/admq rabbitmq admin ctl list_queues consumers | 消費者正常在線 |
# 健康檢查腳本
#!/bin/bash
# 節點健康檢查
bin/admq rabbitmq admin diagnostics health_check
# 記憶體檢查
bin/admq rabbitmq admin diagnostics memory_breakdown
# 告警佇列檢查
bin/admq rabbitmq admin ctl list_queues name messages consumers | awk '$2 > 10000 {print "WARNING: Queue "$1" has "$2" messages"}'
# 連線數檢查
CONN_COUNT=$(bin/admq rabbitmq admin ctl list_connections | wc -l)
if [ $CONN_COUNT -gt 1000 ]; then
echo "WARNING: Connection count $CONN_COUNT exceeds threshold"
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 配置管理
# 配置文件
# rabbitmq.conf
主配置文件,位於 ./config/rabbitmq.conf。
# 網路配置
listeners.tcp.default = 5672
listeners.ssl.default = 5671
# 記憶體配置
vm_memory_high_watermark.relative = 0.4
vm_memory_high_watermark_paging_ratio = 0.5
# 磁碟配置
disk_free_limit.relative = 2.0
# 心跳配置
heartbeat = 60
# 通道配置
channel_max = 2047
# 佇列配置
queue_master_locator = min-masters
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 動態配置
# 查看執行時參數
bin/admq rabbitmq admin ctl list_parameters
# 設置執行時參數
bin/admq rabbitmq admin ctl set_parameter federation-upstream my-upstream '{"uri":"amqp://remote-host"}'
# 清除執行時參數
bin/admq rabbitmq admin ctl clear_parameter federation-upstream my-upstream
# 查看策略
bin/admq rabbitmq admin ctl list_policies
# 設置策略
bin/admq rabbitmq admin ctl set_policy ha-all "^" '{"ha-mode":"all"}' --priority 0 --apply-to queues
# 清除策略
bin/admq rabbitmq admin ctl clear_policy ha-all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 故障排除
# 常見問題及解決方案
# 服務無法啟動
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 連接埠被佔用 | 5672/15672 連接埠被其他程序佔用 | 查找並停止佔用程序,或修改監聽連接埠 |
| Erlang Cookie 不一致 | 叢集節點 Cookie 不匹配 | 同步 .erlang.cookie 檔案 |
| 記憶體不足 | 系統記憶體不足 | 增加記憶體或降低 vm_memory_high_watermark |
| 磁碟空間不足 | 磁碟空間低於 disk_free_limit | 清理磁碟空間或調整 disk_free_limit |
| 配置錯誤 | rabbitmq.conf 格式錯誤 | 檢查配置文件語法 |
# 訊息消費異常
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 訊息堆積 | 消費者處理速度過慢或消費者離線 | 增加消費者數量或優化消費邏輯 |
| 訊息遺失 | 未啟用持久化或手動確認 | 啟用訊息持久化和手動確認 |
| 重複消費 | 消費者確認逾時後重新投遞 | 優化消費者處理邏輯,確保及時確認 |
| 消費延遲 | 網路延遲或消費者效能問題 | 檢查網路狀況,優化消費者程式碼 |
# 叢集異常
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 節點離線 | 網路故障或服務異常 | 檢查網路連通性,重新啟動服務 |
| 腦裂 | 網路分割導致叢集分裂 | 使用 bin/admq rabbitmq admin ctl forget_cluster_node 清理 |
| 鏡像佇列不同步 | 網路延遲或節點故障 | 檢查網路狀況,等待自動同步 |
| 佇列不可用 | 佇列所在節點離線 | 使用鏡像佇列或 Quorum Queue |
# 故障排除命令
# 查看節點詳細資訊
bin/admq rabbitmq admin ctl status
# 查看叢集狀態
bin/admq rabbitmq admin ctl cluster_status
# 查看連線詳情
bin/admq rabbitmq admin ctl list_connections peer_host peer_port state channels
# 查看通道詳情
bin/admq rabbitmq admin ctl list_channels connection pid consumer_count messages_unacknowledged
# 查看佇列詳情
bin/admq rabbitmq admin ctl list_queues name pid slave_pids synchronised_slave_pids messages consumers memory
# 查看消費者詳情
bin/admq rabbitmq admin ctl list_consumers queue_name channel_pid ack_required prefetch_count
# 查看記憶體使用詳情
bin/admq rabbitmq admin diagnostics memory_breakdown
# 查看程序資訊
bin/admq rabbitmq admin diagnostics processes
# 查看網路連線
bin/admq rabbitmq admin diagnostics connections
# 收集診斷資訊
bin/admq rabbitmq admin diagnostics gather_auth_context
bin/admq rabbitmq admin diagnostics quorum_status "queue_name"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 備份與還原
# 配置備份
# 匯出配置定義
bin/admq rabbitmq admin ctl export_definitions /backup/definitions.json
# 匯入配置定義
bin/admq rabbitmq admin ctl import_definitions /backup/definitions.json
1
2
3
4
5
2
3
4
5
# 資料備份
# Mnesia 資料庫備份
# 備份 Mnesia 資料庫
bin/admq rabbitmq admin ctl eval 'rabbit_mnesia:backup("/backup/mnesia.backup").'
# 還原 Mnesia 資料庫
bin/admq rabbitmq admin ctl eval 'rabbit_mnesia:restore("/backup/mnesia.backup").'
1
2
3
4
5
2
3
4
5
# 安全加固
# 網路安全
# 防火牆配置
# 開放必要連接埠
firewall-cmd --permanent --add-port=5672/tcp # AMQP
firewall-cmd --permanent --add-port=5671/tcp # AMQP over SSL
firewall-cmd --permanent --add-port=15672/tcp # Management HTTP
firewall-cmd --permanent --add-port=15671/tcp # Management HTTPS
firewall-cmd --permanent --add-port=25672/tcp # Erlang Distribution
firewall-cmd --reload
1
2
3
4
5
6
7
2
3
4
5
6
7
# SSL/TLS 配置
# rabbitmq.conf
listeners.ssl.default = 5671
ssl_options.cacertfile = /path/to/ca_certificate.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = false
ssl_options.versions.1 = tlsv1.2
ssl_options.versions.2 = tlsv1.3
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 存取控制
# 修改預設使用者
# 修改 guest 使用者密碼
bin/admq rabbitmq admin ctl change_password guest newpassword
# 刪除預設 guest 使用者(推薦)
bin/admq rabbitmq admin ctl delete_user guest
# 建立新管理員使用者
bin/admq rabbitmq admin ctl add_user admin strongpassword
bin/admq rabbitmq admin ctl set_user_tags admin administrator
bin/admq rabbitmq admin ctl set_permissions -p / admin ".*" ".*" ".*"
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 最小權限原則
# 為業務使用者分配最小權限
bin/admq rabbitmq admin ctl add_user app_user apppassword
bin/admq rabbitmq admin ctl set_user_tags app_user none
bin/admq rabbitmq admin ctl set_permissions -p /app_vhost app_user "^app-.*" "^app-.*" "^app-.*"
1
2
3
4
2
3
4
# 效能監控
# 監控指標
| 指標 | 說明 |
|---|---|
| rabbitmq_connections | 連線數 |
| rabbitmq_channels | 通道數 |
| rabbitmq_queues | 佇列數 |
| rabbitmq_queue_messages_ready | 可消費訊息數 |
| rabbitmq_queue_messages_unacked | 未確認訊息數 |
| rabbitmq_queue_messages | 總訊息數 |
| rabbitmq_node_mem_used | 記憶體使用量 |
| rabbitmq_node_disk_free | 磁碟剩餘空間 |
| rabbitmq_node_cpu_user | CPU 使用者態使用率 |
# 運維最佳實踐
- 定期檢查:建立日常檢查機制,及時發現潛在問題
- 監控告警:配置完善的監控和告警體系
- 備份策略:制定定期備份策略,確保資料安全
- 文檔記錄:記錄所有運維操作和變更
- 容量規劃:定期評估叢集容量,提前擴容
- 安全更新:及時更新安全修補程式
- 災難演練:定期進行故障還原演練
编辑页面 (opens new window)