RocketMQ 安裝部署教程詳解

RocketMQ 安裝部署教程詳解

Linux 環境

  • OS: Ubuntu 16.04 LTS x64
  • 系統配置: 1C/2G/5M
  • RocketMQ: 4.5.2
  • JDK: 1.8.0_201
  • Maven: 3.6.1
  • Git

1. 安裝 git

apt-get update
apt install -y git

2. 安裝 jdk8u201

wget http://lzmx.oss-cn-shanghai-internal.aliyuncs.com/soft/jdk-8u201-linux-x64.tar.gz
mkdir -p /opt/java && tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/java/
echo 'export JAVA_HOME=/opt/java/jdk1.8.0_201' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
java -version

3. 安裝 maven3.6.1

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip
apt install unzip
unzip apache-maven-3.6.1-bin.zip -d /opt/java
echo 'export MAVEN_HOME=/opt/java/apache-maven-3.6.1' >> /etc/profile
echo 'export PATH=${MAVEN_HOME}/bin:${PATH}' >> /etc/profile
source /etc/profile
mvn -version

建議替換源爲阿里源,替換好的配置文件如下

rm -rf /opt/java/apache-maven-3.6.1/conf/settings.xml
wget -P /opt/java/apache-maven-3.6.1/conf http://lzmx.oss-cn-shanghai-internal.aliyuncs.com/tmp/settings.xml

沒有的同學可以手動替換 setting.xml 中的 mirror 加快下載依賴的速度

<mirror> 
    <id>aliMaven</id> 
    <name>aliyun maven</name>   
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    <mirrorOf>central</mirrorOf> 
</mirror>

4. 安裝 tmux

安裝 tmux 主要是爲了終端複用,方便後續安裝,不裝也沒關係

apt install -y tmux

5. 部署 RocketMQ

克隆遠程倉庫

git clone https://github.com/apache/rocketmq.git

編譯RocketMQ

阿里雲1C2G機器大概編譯需要3-5分鐘的樣子,還是很快的。

cd rocketmq
mvn -Prelease-all -DskipTests clean install -U

將編譯完的程序移出,例如移到 /root/rocketmq 目錄下

cp distribution/target/rocketmq-4.5.2.tar.gz /root
# 刪除源碼包
rm -rf rocketmq
# 解壓打包好的文件
tar zxvf rocketmq-4.5.2.tar.gz
mv rocketmq-4.5.2 rocketmq
cd rocketmq

環境變量設置

這裏我臨時放在 /root 目錄下了,可以根據自己的需要替換這個位置

echo 'export ROCKETMQ_HOME=/root/rocketmq' >> /etc/profile
echo 'export PATH=$ROCKETMQ_HOME/bin:$PATH' >> /etc/profile

使環境變量生效

source /etc/profile

增加運行權限

進入 rocketmq 文件夾,增加運行權限

cd rocketmq/bin
chmod +x *

修改默認啓動配置

修改默認配置。由於RocketMQ默認配置要求很高,開始啓動前需要先修改這些參數。

否則的話,我們很有會遇到內存分配或者不夠的問題(memory alloc failed)。

  • 修改 bin/runserver.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=320m"

  • 修改 bin/runbroker.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

  • 修改 bin/tools.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"

運行 namesrv 節點

都修改完成了之後可以開始運行 namesrv 了,這裏建議用 tmux 複用終端方便管理

sh mqnamesrv

出現 The Name Server boot success. serializeType=JSON 表示 namesrv 啓動成功

運行 broker 節點

接下來啓動 broker 節點,單機跑的話可能會產生如下報錯

[main] ERROR RocketmqCommon - Failed to obtain the host name
java.net.UnknownHostException: iZowsledoqslnrZ: iZowsledoqslnrZ: Name or service not known
        at java.net.InetAddress.getLocalHost(InetAddress.java:1506) ~[na:1.8.0_201]
        at org.apache.rocketmq.common.BrokerConfig.localHostName(BrokerConfig.java:185) [rocketmq-common-4.5.2.jar:4.5.2]
        at org.apache.rocketmq.common.BrokerConfig.<init>(BrokerConfig.java:38) [rocketmq-common-4.5.2.jar:4.5.2]
        at org.apache.rocketmq.broker.BrokerStartup.createBrokerController(BrokerStartup.java:110) [rocketmq-broker-4.5.2.jar:4.5.2]
        at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58) [rocketmq-broker-4.5.2.jar:4.5.2]
Caused by: java.net.UnknownHostException: iZowsledoqslnrZ: Name or service not known
        at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_201]
        at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929) ~[na:1.8.0_201]
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324) ~[na:1.8.0_201]
        at java.net.InetAddress.getLocalHost(InetAddress.java:1501) ~[na:1.8.0_201]
        ... 4 common frames omitted
The broker[DEFAULT_BROKER, 172.17.10.236:10911] boot success. serializeType=JSON and name server is localhost:9876

根據報錯 Name or service not known 可知,這是由於啓動的時候找不到自己的主機名對應的ip地址而造成的,只需要讓在 /etc/hosts 中添加 127.0.0.1 iZowsledoqslnrZ,注意是主機名

echo '127.0.0.1 iZowsledoqslnrZ' >> /etc/hosts

重新啓動 broker 節點。

sh mqbroker -n localhost:9876 autoCreateTopicEnable=true

啓動成功出現如下提示
The broker[localhost, 172.17.10.236:10911] boot success. serializeType=JSON

測試環境

跑一個測試看看,生產者/消費者測試

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

關閉所有服務器

sh bin/mqshutdown broker
sh bin/mqshutdown namesrv

安裝管理面板

git clone https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console
mvn clean package -Dmaven.test.skip=true
cd target
cp rocketmq-console-ng-1.0.1.jar ~/rocketmq-console.jar
cd ~
java -jar rocketmq-console.jar --server.port=8080 --rocketmq.config.namesrvAddr=localhost:9876

常見錯誤

  1. 啓動Name Server的時候報:
    Please set the ROCKETMQ_HOME variable in your environment!
    配置一下ROCKETMQ_HOME的環境變量。
  2. 啓動Broker的時候報找不到主類JDK,修改runbroker.cmd第40行
    set "JAVA_OPT=%JAVA_OPT% -cp "%CLASSPATH%""
    原來的%CLASSPATH%少了雙引號。
  3. 啓動Producer報錯
    org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.1:10909> failed
    多種原因:
  • 檢查IP地址,經檢查對應服務器安裝有其他網橋,將其卸載即可
  • 在Producer中將VIP通道關閉:producer.setVipChannelEnabled(false);
  1. 啓動Producer報錯
    org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest2
  • Broker沒有正確連接到Name Server 或

  • Producer沒有正確連接到Name Server 或

  • Broker禁止自動創建Topic,且用戶沒有通過手工方式創建Topic
    默認配置啓動broker時autoCreateTopicEnable=true已設置,所以檢查連接即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章