RocketMQ 安裝


RocketMQ 安裝

記錄如何安裝rocketMQ 以及使用service腳本進行管理

注意:請確保當前機器上安裝了JDK 並且有JAVA_HOME 環境變量

一、RocketMQ 下載安裝

  1. 從官網上下載最新安裝包,下載完成后並解壓到/opt 目錄中

    [root@VM-4-14-centos ~] tar -zxvf rocketmq-4.9.3.tar.gz -C /opt/
    
  2. 修改runbroker.sh、runserver.sh 將其中的去掉-Xms參數,避免內存不足無法啟動
    1

    2

  3. 創建rocketmq 用戶,並進行建立軟鏈接參數

    [root@VM-4-14-centos bin] useradd -r -M rocketmq  # 創建rocketmq用戶
    [root@VM-4-14-centos bin] ln -s /opt/rocketmq-4.9.3/ /usr/local/rocketmq # 建立軟鏈接
    [root@VM-4-14-centos rocketmq] echo 'export PATH=/usr/local/rocketmq/bin:$PATH' >> /etc/profile && source /etc/profile # 加入path環境變量
    
  4. 將rocketmq.sh 文件放到rocketmq bin目錄下,並修改權限

    [root@VM-4-14-centos bin] mv /root/rocketmq.sh /usr/local/rocketmq/bin/ 
    [root@VM-4-14-centos bin] chown rocketmq:rocketmq -R /usr/local/rocketmq/ #修改文件所有者
    [root@VM-4-14-centos bin] chmod +x -R /usr/local/rocketmq/bin/ 
    
  5. 將rockemq service 腳本復制到 /etc/init.d/ 目錄下

    [root@VM-4-14-centos ~] cp /root/rocketmq /etc/init.d/
    [root@VM-4-14-centos ~] chmod +x /etc/init.d/rocketmq # 增加執行權限
    [root@VM-4-14-centos ~] chkconfig rocketmq # 服務自啟動
    

二、RocketMQ 啟動測試

  1. 輸入service rocketmq start 啟動rocketMQ

    [root@VM-4-14-centos ~] service rocketmq start # rocketmq 啟動
     Starting RocketMQ... 
    Name Server Start Success
    Broker Start Success
     Start RocketMQ  ...............................  [OK] 
    
  2. 輸入service rocketmq status 查看rocketMQ 狀態

    [root@VM-4-14-centos bin] service rocketmq status
     Broker is running on 27614   
     NameServer is running on 27570
    

三、問題排查

如果出現問題可以查看rockeMQ 的日志

  1. 進入/usr/local/rocketmq/log 目錄下,查看rocketMQ 日志,所有日志以日期為單位進行分割

    3

四、附錄

  1. rocketmq.sh 腳本

    #!/bin/bash
    # this is rocketmq start stop script
    FRONT="\033[34;49;1m"
    BACK="\033[39;49;0m"
    # 應用目錄
    ROCKETMQ_HOME=${ROCKETMQ_HOME:-/usr/local/rocketmq}
    # () 括號可以用於命令執行結果,即將該命令執行結果作為參數傳給變量
    TODAY=$(date +%y%m%d)
    IP=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
    
    start_server () {
      cd ${ROCKETMQ_HOME}
      nohup sh $ROCKETMQ_HOME/bin/mqnamesrv 1>${ROCKETMQ_HOME}/log/rocketmq_nameserver_${TODAY}.log 2>&1 &
      SERVER_PID="$!"
    
      if [[ $? != 0 ]]; then
        echo -e "${FRONT}Name Server Start Failed${BACK}"
        exit 2
      else
        echo -e "${FRONT}Name Server Start Success${BACK}"  
      fi
    
    }
    
    start_broker () {
      cd ${ROCKETMQ_HOME}
      nohup sh $ROCKETMQ_HOME/bin/mqbroker -n ${IP}:9876 -c $ROCKETMQ_HOME/conf/broker.conf >${ROCKETMQ_HOME}/log/rocketmq_broker_${TODAY}.log 2>&1 &
      BROKER_PID="$!"
    
      if [[ $? != 0 ]]; then
        echo -e "${FRONT}Broker Start Failed${BACK}"
        exit 2
      else
        echo -e "${FRONT}Broker Start Success${BACK}"  
      fi
    
    }
    
    do_stop () {
      cd ${ROCKETMQ_HOME}
      if [[ -f $ROCKETMQ_HOME/bin/mqshutdown ]]; then
    
        sh ./bin/mqshutdown namesrv >> ${ROCKETMQ_HOME}/log/rocketmq_shutdown_${TODAY}.log
        sleep  2s
        sh ./bin/mqshutdown broker >> ${ROCKETMQ_HOME}/log/rocketmq_shutdown_${TODAY}.log
    
        if [[ $? = 0 ]]; then
        echo -e "${FRONT}stop success${BACK}"
        fi
    
      else
        echo -e "${FRONT}no stop script,exit${BACK}"
        exit 2
      fi
    }
    
    do_status () {
      STATUS1=$(jps | grep BrokerStartup)
      if [[ ${STATUS1} != "" ]]; then
        echo -e "$FRONT Broker is running on $(echo ${STATUS1} | sed "s/BrokerStartup/""/g") $BACK " 
      else
        echo -e "$FRONT Broker NOT RUNNING $BACK "
      fi
    
      STATUS2=$(jps | grep NamesrvStartup)
      if [[ ${STATUS2} != "" ]]; then
        echo -e "$FRONT NameServer is running on $(echo ${STATUS2} | sed "s/NamesrvStartup/""/g") $BACK "
      else
        echo -e "$FRONT NameServer NOT RUNNING $BACK "
      fi
    
    }
    
    do_start (){
      start_server
      sleep 1 
      start_broker
    }
    
    case "$1" in
      start)
        do_start
      ;;
      stop)
        do_stop
      ;;
      restart)
        do_stop
       # 由於broker 在停止時是不會立即退出的,所以此處需要將sleep時間略微長一點,如果2s不足可以再延長些
        sleep 2
        do_start
      ;;
      status)
        do_status
      ;;
      *)
        echo "$0 <start|stop|restart|status> [id]"
      ;;
    esac
    
    
  2. rocketmq service 腳本

    #!/bin/sh
    # as it does use of the /proc filesystem.
    # chkconfig:   2345 90 10
    # description:  RocketMQ is high performance Message Queue
    
    ulimit -n 65535
    FRONT="\033[33;49;1m"
    BACK="\033[39;49;0m"
    GREEN_STAR="\033[32;49;1m*\033[39;49;0m"
    RED_STAR="\033[31;49;1m*\033[39;49;0m"
    WARNING="\033[33;49;1m [WARNING] \033[39;49;0m"
    ERROR="\033[31m [ERROR] \033[0m"
    SUCCESS="\033[32m [OK] \033[0m"
    LISTITEM="\033[32m [-] \033[0m"
    POINT="..............................."
    USER=rocketmq
    EXEC=/usr/local/rocketmq/bin/rocketmq.sh
    ROCKETMQ_HOME=${ROCKETMQ_HOME:-/usr/local/rocketmq}
    TODAY=$(date +%y%m%d)
    # source 該文件,將export一些環境變量並傳入子shell中
    source /etc/profile
    
    do_status () {
      STATUS1=$(jps | grep BrokerStartup)
      if [[ ${STATUS1} != "" ]]; then
        echo -e "$FRONT Broker is running on $(echo ${STATUS1} | sed "s/BrokerStartup/""/g") $BACK " 
      else
        echo -e "$FRONT Broker NOT RUNNING $BACK "
      fi
    
      STATUS2=$(jps | grep NamesrvStartup)
      if [[ ${STATUS2} != "" ]]; then
        echo -e "$FRONT NameServer is running on $(echo ${STATUS2} | sed "s/NamesrvStartup/""/g") $BACK "
      else
        echo -e "$FRONT NameServer NOT RUNNING $BACK "
      fi
    
    }
    
    case "$1" in
        start)
            #echo "$PIDFILE exists, process is already running or crashed"
            #echo -e "$FRONT Start RocketMQ $BACK $POINT $SUCCESS"
            echo -e "$FRONT Starting RocketMQ... $BACK"
            # -m參數不重置環境變量
            runuser $USER -m -c "$EXEC start"
            reslt_va=$?
            if [[ $reslt_va -eq 0 ]]; then
                echo -e "$FRONT Start RocketMQ $BACK $POINT $SUCCESS"
            else
                echo -e "$FRONT Start RocketMQ $BACK $POINT $ERROR"
            fi
            ;;
        stop)
            #echo "$PIDFILE does not exist........ process is not running"
            echo -e "$FRONT Stop RocketMQ $BACK $POINT $SUCCESS"
            #echo "Stopping ..."
            runuser $USER -m -c "$EXEC stop"
            reslt_va=$?
            if [[ $reslt_va -eq 0 ]];then
                echo -e "$FRONT Stop RocketMQ $BACK $POINT $SUCCESS"
            else
                echo -e "$FRONT Stop RocketMQ $BACK $POINT $ERROR"
            fi
            ;;
        restart)
            #echo "$PIDFILE does not exist........ process is not running"
            echo -e "$FRONT Restart RocketMQ... $BACK"
            runuser $USER -m -c "$EXEC restart"
            reslt_va=$?
            if [[ $reslt_va -eq 0 ]];then
                echo -e "$FRONT Restart RocketMQ $BACK $POINT $SUCCESS"
            else
                echo -e "$FRONT Restart RocketMQ $BACK $POINT $ERROR"
            fi
    	    ;;
        status)
            do_status
    	    ;;    
        *)
            echo "Please use start or stop or status as first argument"
            ;;
    esac
    
    


免責聲明!

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



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