Centos7中安装RocketMQ

安装 RocketMQ

  • 使用 wget 命令将 RocketMQ 下载下来

    wget https://archive.apache.org/dist/rocketmq/4.5.1/rocketmq-all4.5.1-bin-release.zip

    当然也是可以使用其他的版本,进入 apach官网 ,然后找到 RocketMQ 对应的版本的地址即可。

  • 将下载下来的文件解压到 /opt 目录中

    unzip xxxx -d /opt

    这里 RocketMQ 是使用 zip 形式进行压缩的,所以需要 unzip 来进行解压,如果提示没有该命令的话需要使用下面的命令来进行安装。

    yum install zip unzip
  • 解压完成之后修改 /etc/profile 文件的内容,如下图所示,在该文件的末尾添加如下内容。

  • 修改完该配置文件之后,可能不会立即生效,所以最好使用 source 命令来更新一下该文件。

    source /etc/profile

安装 JDK

  • Oracle官网 去下载 jdk ,比如我这里下载的是 jdk-11.0.5-linux-x64.rpm ( Linux版本的 )。

  • 可以使用 Xshell 连接远程的 Linux 服务器,然后使用 rz 命令来将下载的 jdk 上传到服务器中。

  • 使用下面的命令来进行安装

    rpm -ivh jdk-11.0.5-linux-x64.rpm
  • 配置环境变量(就像在 Window 系统中配置 JAVA_HOME 环境变量一样)

    vim /etc/profile

    在最后面添加如下代码

    export JAVA_HOME=/usr/java/jdk-11.0.5
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

  • 检查是否安装完成

    java -version
  • rpm 卸载 jdk

    rpm -e jdk的版本

运行与关闭 RocketMQ 的操作

单机版

启动单机版的 RocketMQ 消息队列服务步骤如下:

进入到 解压的 RocketMQ 的 bin 目录,然后运行

# 启动 NameServer 命令
mqnamesrv
# 查看启动日志
tail -f ~/Logs/rocketmqlogs/namesrv.log

错误问题:

namesrv 修改

可能在执行 mqnamesrv 命令的时候就会出现下面的问题:

Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Unrecognized VM option 'UseCMSCompactAtFullCollection'

我们运行的是 mqnamesrv 这个命令,现在我们可以使用 cat 命令来查看一下这个文件里面的具体内容:

cat mqnamesrv

在输出的结果中最后一行可以看到如下内容:

sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@

也就是我们运行 mqnamesrv 的时候最终是运行的 runserver.sh 这个 shell 脚本,现在再使用 cat 命令查看一下这个文件

cat runserver.sh

部分内容如下:

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"

在我们启动时遇到的错误问题显示是不能识别 UseCMSCompactAtFullCollection 这个参数,在上面的输出结果中果然看到了这个参数,这是因为这个参数在 jdk8 里面有,但是到了 jdk11 就没有这个参数了,所以解决方案有两个

  1. 不使用 jdk11, 使用 jdk8
  2. 在启动脚本里面去除掉这些参数

具体需要删除的几个值如下:

UseCMSCompactAtFullCollection
UseParNewGC
UseConcMarkSweepGC
# 下面这里是修改内容,在 runserver.sh脚本中给的是 4g,我们服务器没有没有这么大内存,所以改小一点
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -
XX:MetaspaceSize=64mm -XX:MaxMetaspaceSize=160mm"

重新运行下面命令

mqnamesrv

然后又出现了问题,提示没有 -Xloggc 这个参数

再看 runserver.sh 这个脚本的内容发现有如下代码

JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"

所以我们继续安装提示来修改即可,将 -Xlogcc 修改为 -Xlog:gc

再启动的话会提示没有没有主类的错误

Error: Unable to initialize main class org.apache.rocketmq.namesrv.NamesrvStartup
Caused by: java.lang.NoClassDefFoundError: org/apache/rocketmq/srvutil/ShutdownHookThread

这个是需要注释掉 CLASSPATH(如何修改看下面完整文件即可), 改完之后的 runserver.sh 如下:

error_exit ()
{   
    echo "ERROR: $1 !!"
    exit 1
}

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
export CLASSPATH=${BASE_DIR}/lib/rocketmq-namesrv-4.5.1.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m"
JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 "
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

$JAVA ${JAVA_OPT} $@

broker文件修改

在 bin 目录中输入如下命令进行修改

vim runbroker.sh

修改完成之后的文件如下:

export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
# JVM Configuration
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:/dev/shm/mq_gc_%p.log"
#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

numactl --interleave=all pwd > /dev/null 2>&1
if [ $? -eq 0 ]
then
        if [ -z "$RMQ_NUMA_NODE" ] ; then
                numactl --interleave=all $JAVA ${JAVA_OPT} $@
        else
                numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
        fi
else
        $JAVA ${JAVA_OPT} --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED $@
fi

有一个地方是新加了代码,其余的只是修改,添加的地方是最后一行

$JAVA ${JAVA_OPT} --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED $@

原来的内容是

$JAVA ${JAVA_OPT} $@

tools.sh 文件修改

只需要删除一句代码

# 注释 JAVA_OPT="${JAVA_OPT} -
Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"

启动 mqnamesrv

可以直接输入下面命令 (当前目录是在 bin 目录)

mqnamesrv

也可以使用

nohup sh mqnamesrv &  # 最后面的 & 符号表示后台启动

查看 mqnamesrv 的启动状态

ps -ef | grep mq

当然也可以看 namesrv 的启动日志,日志文件在用户的 家目录下面的 logs 下面。具体路径如下:

~/logs/rocketmqlogs/namesrv.log   # ~ 表示用户的家目录

启动 broker

可以直接输入下面命令(当前目录在 bin 目录)

mqbroker -n localhost:9876

也可以使用

nohup sh mqbroker -n localhost:9876 &  # 最后面的 & 符号表示后台启动

本文由博客一文多发平台 OpenWrite 发布!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值