1.1 名词解释

术语和缩写

解释

nameServer

专门为RocketMQ设计的轻量级名称服务

Producer

消息生产者,负责生产消息,一般由业务系统负责生产消息

Consumer

消息消费者,负责消费消息,一般是后台系统负责异步消息

Broker

消息中转角色,负责存储消息,转发消息

Master

Broker中的主节点

Slave

Broker中的副节点

异步复制

消息写入master节点,再由master节点异步复制到slave节点

同步双写

消息同时写入master节点和slave节点

异步刷盘

Broker的一种持久化策略,消息写入pagecache后,直接返回。由异步线程直接将pagecache写入硬盘

同步刷盘

Broker的一种持久化策略,消息写入pagecache后,由同步线程直接将pagecache写入硬盘

TPS

每秒发送消息个数

 

1.2 安装部署

1.2.1 硬件环境

Cpu4核、内存8g

软件环境

Linux环境

Jdk1.8或以上版本64位

Gradle 3.3或以上

 

1.2.2 单机部署

1、查看JAVA环境

(1)输入命令 Java -version

(2)显示jdk版本,如果jdk版本不低于1.8则继续下一步,如果低于1.8则需要安装jdk1.8或以上版本

 

2、下载rocketmq

可通过命令或者在官网下载:

wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip下载

官网:http://rocketmq.apache.org/dowloading/releases

rocketmq如何查看nameserver rocketmq版本查看_JAVA

 

rocketmq如何查看nameserver rocketmq版本查看_外网_02

3、 解压rocketmq

输入命令 unzip rocketmq-all-4.6.0-bin-release.zip -d ./rocketmq

可将rocketmq解压到当前目录的rocketmq文件夹内

 

4、创建存储路径

mkdir -p ../rocketmq/store/{store,commitlog,consumequeue,index}

 

5、配置RocketMq环境变量

RockeMq一般部署于非root用户下,vi /home/${user}/.bash_profile 或 vi /etc/profile,添加如下内容:

export NAMESRV_ADDR=0.0.0.0(内网ip):9876

 

rocketmq如何查看nameserver rocketmq版本查看_内网_03

6、设置broker配置

(1)输入命令创建配置

vi rocketmq/conf/default-broker.properties

  或 vi ../conf/broker.conf

(2)输入内容

#ip为服务器内网地址,port可自由设置一般为9876

  namesrvAddr=ip(内网ip):port;

  messageIndexSafe=true

  #是否允许Broker 自动创建。Topic,建议线下开启,线上关闭

  autoCreateTopicEnable=true

  waitTimeMillsInSendQueue=5000

  #发送消息线程池数量

  sendMessageThreadPoolNums=64

  useReentrantLockWhenPutMessage=true

  defaultReadQueueNums = 16

  defaultWriteQueueNums = 16

  #ip设置外网ip,不需要连接外网的话,可以在参数前面加#注释掉

  brokerIP1=ip(外网ip)

  #默认值为DefaultCluster,可以修改为broker所属的哪个集群

  brokerClusterName=DefaultCluster

    #原始值为本机主机名,Broker名称

  brokerName=broker-a

  #BrokerId,必须是大等于 0 的整数,0 表示Master,>0 表示 Slave,一个 Master 可以挂多个 Slave,Master 与 Slave通过 BrokerName 来配对,原始值为0

  brokerId=0

  deleteWhen=04

  fileReservedTime=48

  brokerRole=ASYNC_MASTER

  flushDiskType=ASYNC_FLUSH

  #port可自由设置,一般设置10911

  listenPort=port

  storePathRootDir=/usr/local/rocketmq/store

  storePathCommitLog= /usr/local/rocketmq/store/commitlog

  storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue

  storePathIndex=/usr/local/rocketmq/store/index

(3)最后按esc键,输入:wq保存配置

(4)实例:我自己本地的配置

namesrvAddr =#.#.#.#:9876

  brokerClusterName = DefaultCluster

  brokerName = broker-a

  listenPort=10911

  brokerId = 0

  deleteWhen = 04

  fileReservedTime = 48

  brokerRole = ASYNC_MASTER

  flushDiskType = ASYNC_FLUSH

  storePathRootDir=/opt/usr/rocketmq-4.6/store/store

  storePathCommitLog= /opt/usr/rocketmq-4.6/store/commitlog

  storePathConsumeQueue=/opt/usr/rocketmq-4.6/store/consumequeue

  storePathIndex=/opt/usr/rocketmq-4.6/store/index

 

 

rocketmq如何查看nameserver rocketmq版本查看_外网_04

7、修改启动脚本参数,根据自己linux的配置进行调整

vi bin/runbroker.sh

  JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"

  vi bin/runserver.sh 

  JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"

 

注意:Xms和Xmx至少是1G  否则启动不起来  Xmn一般是前者的一半,这边设置的内存不能大于机器实际的内存,根据实际情况调整

8、启动NameSrv

nohup sh mqnamesrv >/opt/usr/rocketmq/rocketmq4.6.0/logs/mqnamesrv.log 2>&1 &

rocketmq如何查看nameserver rocketmq版本查看_JAVA_05

9、启动broker

nohup sh mqbroker -c ../conf/broker.conf >/opt/usr/rocketmq/rocketmq4.6.0/logs/broker.log 2>&1 &

 

rocketmq如何查看nameserver rocketmq版本查看_内网_06

10、停止broker

其中default-broker.properties为上面第5步设置的broker配置文件名

sh mqshutdown broker

11、停止namesrv

sh mqshutdown namesrv

备注:停止这两个任务时不能用kill,如果用kill的话,重新启动的话,broker是启动不了的。

12、验证

(1)在ROCKETMQ_HOME路径下执行以下命令模拟Producer发消息:

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

(2)观察结果:会发出很多条下面的命令,说明发送成功:

 

rocketmq如何查看nameserver rocketmq版本查看_JAVA_07

 

 

 

(3)在ROCKETMQ_HOME路径下执行以下命令模拟Consumer发消息:

sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

(4)观察结果:会收到和上面一样多的命令,说明接收成功,可证明RocketMQ部署成功。

1.3 安装过程中遇到的坑

问题一:Failed to obtain the host name

启动brokerserver任务时,会报以下错误:这是由于启动的时候找不到自己的主机名对应的ip地址而造成的。

rocketmq如何查看nameserver rocketmq版本查看_内网_08

解决上述问题只需修改/etc/hosts文件,在该文件中添加本机配置,就可以了

vim /etc/hosts

 

添加: 内网ip:主机名

rocketmq如何查看nameserver rocketmq版本查看_JAVA_09

问题二:connect to null failed

 

rocketmq如何查看nameserver rocketmq版本查看_外网_10

首先先检查下namesrvAdrr 是否为空,若为空,则rocketmq没连接上namesrv的ip地址,查看方式:

 

sh /bin/mqbroker -m

rocketmq如何查看nameserver rocketmq版本查看_JAVA_11

正常情况下,namesrvAddr=内网ip:9876,报上述错误时,namesrvAddr=后面是没有值的,这种情况下,需检查rocketmq的配置环境。

vim /etc/profile
  
  export NAMESRV_ADDR=0.0.0.0(内网ip):9876  是否已经配置

 

问题三:connect to <121.41.110.225:10911> failed

rocketmq如何查看nameserver rocketmq版本查看_外网_12

配置文件中的内网地址时,测试时能测通。

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

修改为外网地址时,会报上述错误

查看防火墙,如果防火墙开启,则需关闭防火墙,重启后测试是否能通。若仍不能测通,可能是本服务器的外网ip没有对外开放,需要找运维开放或自己开放下。

 

查看防火墙的命令:

CentOS 6

vi /etc/sysconfig/iptables #编辑防火墙配置文件 systemctl status iptables

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动


CentOS 7

systemctl status firewalld #查看防火墙是否启动

systemctl start firewalld #启动防火墙

systemctl stop firewalld #关闭防火墙

cat /etc/firewalld/zones/public.xml #防火墙文件

firewall-cmd --list-all #防火墙端口list