# RocketMQ升級到主從切換的方法教程
## 目錄
1. [主從架構核心概念](#一主從架構核心概念)
- 1.1 [RocketMQ集群模式對比](#11-rocketmq集群模式對比)
- 1.2 [主從切換設計原理](#12-主從切換設計原理)
2. [升級前準備工作](#二升級前準備工作)
- 2.1 [環境兼容性檢查](#21-環境兼容性檢查)
- 2.2 [數據備份方案](#22-數據備份方案)
3. [主從配置實戰](#三主從配置實戰)
- 3.1 [Broker角色配置](#31-broker角色配置)
- 3.2 [HA服務參數調優](#32-ha服務參數調優)
4. [故障切換演練](#四故障切換演練)
- 4.1 [手動觸發主從切換](#41-手動觸發主從切換)
- 4.2 [自動故障檢測機制](#42-自動故障檢測機制)
5. [生產環境驗證](#五生產環境驗證)
- 5.1 [監控指標配置](#51-監控指標配置)
- 5.2 [回滾應急預案](#52-回滾應急預案)
6. [常見問題解決方案](#六常見問題解決方案)
---
## 一、主從架構核心概念
### 1.1 RocketMQ集群模式對比
| 模式類型 | 節點角色 | 數據一致性 | 故障恢復時間 |
|----------------|-------------------|--------------|--------------|
| 單Master | 獨立部署 | 無副本 | 不可恢復 |
| 多Master | 全量節點平等 | 最終一致 | 分鐘級 |
| **主從模式** | Master-Slave分層 | 強一致性 | 秒級切換 |
```java
// 典型主從配置示例
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0 // 0表示Master,>0表示Slave
brokerRole = SYNC_MASTER // 同步復制模式
核心組件交互流程: 1. HAConnection建立長連接 2. Slave定期上報偏移量 3. Master心跳檢測超時(默認10秒) 4. Controller選舉新Master
版本要求:
磁盤檢測腳本:
#!/bin/bash
df -h | grep /data/rocketmq/store
ls -lh /data/rocketmq/store/commitlog | wc -l
推薦備份策略: 1. 停止Broker進程 2. 使用rsync增量備份
rsync -avzP /store_path root@backup:/rocketmq_backup/$(date +%Y%m%d)
master節點broker-a.properties:
listenPort=10911
brokerIP1=192.168.1.101
enableControllerMode=true
controllerAddr=192.168.1.101:9876
slave節點broker-a-s1.properties:
brokerId=1
brokerRole=SLAVE
syncMasterFlushOffset=true
haMasterAddress=192.168.1.101:10911
參數名 | 默認值 | 生產建議值 |
---|---|---|
haSendHeartbeatInterval | 5000 | 3000 |
haHousekeepingInterval | 20000 | 15000 |
haTransferBatchSize | 32768 | 65536 |
# 通過admin命令觸發
mqadmin updateBrokerConfig -n ns1:9876 -b broker-a-s1 \
-k brokerRole -v SYNC_MASTER
檢測邏輯時序圖:
sequenceDiagram
Master->>Slave: 定時心跳(3s間隔)
Slave->>Controller: 上報狀態
alt 心跳丟失
Controller->>Slave: 發起選舉
end
Prometheus關鍵指標:
- job_name: 'rocketmq_exporter'
metrics_path: '/metrics'
static_configs:
- targets: ['mq-exporter:5557']
relabel_configs:
- source_labels: [__address__]
regex: '(.*):9876'
target_label: instance
brokerRole=ASYNC_MASTER
enableControllerMode=false
問題1:切換后消息堆積 - 原因:Slave同步延遲 - 解決方案:
UPDATE broker_stats SET flush_offset = (SELECT MAX(offset) FROM commitlog)
問題2:腦裂現象 - 現象:雙Master同時寫入 - 處理步驟: 1. 斷開網絡分區 2. 人工介入仲裁 3. 重建ZK臨時節點
最佳實踐建議:在業務低峰期執行切換操作,提前進行至少3次完整演練。監控Grafana看板應包含”HA_Status”和”SyncDelay”關鍵指標。 “`
注:本文為簡化示例,實際完整版需補充以下內容: 1. 各配置參數的詳細解釋 2. 性能壓測數據對比 3. 不同版本間的差異說明 4. 完整的運維操作手冊 5. 企業級案例實踐分析
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。