RocketMq詳細搭建(部署)


優勢:

  • 應用解耦:提高系統容錯性和可維護性
  • 異步提速:提升用戶體驗和系統吞吐量
  • 削峰填谷:提高系統穩定性

劣勢:

  • 系統可用性降低
  • 系統復雜度提高
  • 消息一致性問題

RocketMq安裝部署

部署前准備

  • 安裝Jdk

    #1. 獲取jdk安裝包(進入 /opt目錄操作 cd /opt)
    wget https://github.com/frekele/oracle-java/releases/download/8u181-b13/jdk-8u181-linux-x64.tar.gz
    #2. 解壓縮jdk安裝包
    tar -zxvf jdk-8u181-linux-x64.tar.gz
    #3. 設置環境變量
    vi ~/.bash_profile
    export JAVA_HOME=/opt/jdk1.8.0_181
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    #4. 使環境變量生效
    source ~/.bash_profile
    #5. 檢測並查看java版本
    java -version
    
  • 安裝Maven

    #1. 獲取Maven安裝包(進入 /opt目錄操作 cd /opt)
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
    #2. 解壓縮Maven壓縮包
    tar -zxvf apache-maven-3.6.3-bin.tar.gz
    #3. 設置環境變量
    vi ~/.bash_profile
    export PATH=$PATH:/opt/apache-maven-3.6.3/bin
    #4. 使環境變量生效
    source ~/.bash_profile
    #5. 檢測並查看java版本
    mvn -version
    

1. 單Master模式

這種方式風險較大,一旦Broker重啟或者宕機時,會導致整個服務不可用。不建議線上環境使用,可以用於本地測試。

#1. 獲取rocketmq 安裝包
wget https://codeload.github.com/apache/rocketmq/tar.gz/refs/tags/rocketmq-all-4.8.0
#2. 解壓縮rocketmq安裝包
tar -zxvf rocketmq-all-4.8.0
#3. 編譯rocketMq
cd rocketmq-all-4.8.0/
mvn -Prelease-all -DskipTests clean install -U
#4. 啟動rocketMq mqnamesrv
cd distribution/target/rocketmq-4.8.0/rocketmq-4.8.0
nohup sh bin/mqnamesrv &
# 查看日志
tail -f ~/logs/rocketmqlogs/namesrv.log
#5. 啟動broker
nohup sh bin/mqbroker -n localhost:9876 &
#查看日志
tail -f ~/logs/rocketmqlogs/broker.log 
#6. 測試
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
  • 問題解決(內存不足)

    RocketMq默認啟動配置的java虛擬機參數內存占用較高,如果內存不夠需要修改配置

    修改runserver.sh,runbroker.sh java啟動參數

    JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    
  • Lock failed,MQ already started(修改參數再啟動的時候報錯)

    查看java進程,關閉進程之后重新啟動程序

    ps -ef | grep java
    kill -9 進程id
    

2. 多Master模式

一個集群無Slave,全是Master,例如2個Master或者3個Master,這種模式的優缺點如下:

  • 優點:配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由於RAID10磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟),性能最高;
  • 缺點:單台機器宕機期間,這台機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到影響。
1)啟動NameServer

NameServer需要先於Broker啟動,且如果在生產環境使用,為了保證高可用,建議一般規模的集群啟動3個NameServer,各節點的啟動命令相同,如下:

### 首先啟動Name Server
$ nohup sh mqnamesrv &
 
### 驗證Name Server 是否啟動成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
2)啟動Broker集群
### 在機器A,啟動第一個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties &
 
### 在機器B,啟動第二個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties &

...

如上啟動命令是在單個NameServer情況下使用的。對於多個NameServer的集群,Broker啟動命令中-n后面的地址列表用分號隔開即可,例如 192.168.1.1:9876;192.161.2:9876

3. 多Master多Slave模式-異步復制

每個Master配置一個Slave,有多對Master-Slave,HA采用異步復制方式,主備有短暫消息延遲(毫秒級),這種模式的優缺點如下:

  • 優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,同時Master宕機后,消費者仍然可以從Slave消費,而且此過程對應用透明,不需要人工干預,性能同多Master模式幾乎一樣;
  • 缺點:Master宕機,磁盤損壞情況下會丟失少量消息。
1)啟動NameServer
### 首先啟動Name Server
$ nohup sh mqnamesrv &
 
### 驗證Name Server 是否啟動成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
2)啟動Broker集群
### 在機器A,啟動第一個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
 
### 在機器B,啟動第二個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
 
### 在機器C,啟動第一個Slave,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
 
### 在機器D,啟動第二個Slave,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &

4. 多Master多Slave模式-同步雙寫

每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,即只有主備都寫成功,才向應用返回成功,這種模式的優缺點如下:

  • 優點:數據與服務都無單點故障,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高;
  • 缺點:性能比異步復制模式略低(大約低10%左右),發送單個消息的RT會略高,且目前版本在主節點宕機后,備機不能自動切換為主機。
1)啟動NameServer
### 首先啟動Name Server
$ nohup sh mqnamesrv &
 
### 驗證Name Server 是否啟動成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
2)啟動Broker集群
### 在機器A,啟動第一個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &
 
### 在機器B,啟動第二個Master,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &
 
### 在機器C,啟動第一個Slave,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &
 
### 在機器D,啟動第二個Slave,例如NameServer的IP為:192.168.1.1
$ nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &

以上Broker與Slave配對是通過指定相同的BrokerName參數來配對,Master的BrokerId必須是0,Slave的BrokerId必須是大於0的數。另外一個Master下面可以掛載多個Slave,同一Master下的多個Slave通過指定不同的BrokerId來區分。$ROCKETMQ_HOME指的RocketMQ安裝目錄,需要用戶自己設置此環境變量。

搭建圖形化界面

rocketmq-console

#1. 獲取安裝包
wget https://codeload.github.com/apache/rocketmq-externals/tar.gz/refs/tags/rocketmq-console-1.0.0
#2. 解壓縮
tar -zxvf rocketmq-console-1.0.0
#3. 編譯源碼
cd rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/
mvn clean package -Dmaven.test.skip=true
nohup java -jar \
    -Drocketmq.config.namesrvAddr=192.168.106.133:9876 \
    -Drocketmq.config.isVIPChannel=false \
    target/rocketmq-console-ng-1.0.0.jar &
#4. 訪問
http://192.168.106.133:8080/#/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM