rocketMQ安装部署详细解析

Posted 程序猿knight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rocketMQ安装部署详细解析相关的知识,希望对你有一定的参考价值。

一、简介rocketMQ

RocektMQ是阿里巴巴在2012年开源的一个纯java、分布式、队列模型的第三代消息中间件,不仅在传统高频交易链路有着低延迟的出色表现,在实时计算等大数据领域也有着不错的吞吐。

2016年11月11号,双十一大促见证了RocketMQ低延迟存储架构的成功试水,99.996%的延迟落在了10ms以内,极个别由于GC引发的停顿在50ms以内,其高性能、低延时和高可靠的特性承载了近年来双十一17万笔/秒的交易峰值,在整个生产链路上都有着稳定和出色的表现。其在同年捐赠给Apache后正式进入孵化期。并于2017年9月RocketMQ正式从Apache社区正式毕业,成为Apache顶级项目。

二、相关术语

1. Producer

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

Producer Group

一类Producer的集合名称,这类Producer通常发送一类消息,且发送逻辑一致。

2. Consumer

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

Push Consumer

Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立 刻回调Listener接口方法。

Pull Consumer

Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制。

Consumer Group

一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。

3. Broker

消息中转角色,负责存储消息,转发消息,一般也称为Server。

Master

Broker中的主节点。

Slave

Broker中的副节点。

4. Nameserver

专为RocketMQ设计的轻量级名称服务。集群中Nameserver互相独立,彼此没有通信关系,单台Nameserver挂掉,不影响其他Nameserver,即使全部挂掉,也不影响业务系统使用。而且Nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。

5. 广播消费

一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每个Consumer都消费一次,广播消费中的Consumer Group概念可以认为在消息划分方面无意义。

6. 集群消费

一个Consumer Group中的Consumer实例平均分摊消费消息。例如某个Topic有9条消息,其中一个Consumer Group有3个实例(可能是3个进程,或者3台机器),那么每个实例只消费其中的3条消息。

7. 顺序消息

消费消息的顺序要同发送消息的顺序一致,在RocketMQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列,这样Consumer就可以按照Producer发送的顺序去消费消息。

8. 普通顺序消息

顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。如果业务能容忍在集群异常情况(如某个Broker宕机或者重启)下,消息短暂的乱序,使用普通顺序方式比较合适。

9. 严格顺序消息

顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式Failover特性,即Broker集群中只要有一台机器不可用,则整个集群都不可用,服务可用性大大降低。如果服务器部署为同步双写模式,此缺陷可通过备机自动切换为主避免,不过仍然会存在几分钟的服务不可用。

10. Message Queue

在RocketMQ中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用Offset来访问,offset为java long类型,64位,理论上在100年内不会溢出,所以认为是长度无限,另外队列中只保存最近几天的数据,之前的数据会按照过期时间来删除。也可以认为Message Queue是一个长度无限的数组,offset就是下标。

11. 异步复制

消息写入master节点,再由master节点异步复制到slave节点,类似mysql中的master-slave机制。

12. 同步双写

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

13. 异步刷盘

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

14. 同步刷盘

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

三、RocketMQ集群部署模式

RocketMQ作为消息中间件,其主要功能为消息的Publish/Subscribe。而Broker担任的消息转发和存储功能,其部署方式有很多种:

1. 单Master

优点:除了配置简单没什么优点。

缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。

2. 多Master

优点:配置简单,性能最高。

缺点:可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性。

3. 异步多Master多Slave

每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级。

优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预。

缺点:Master宕机或磁盘损坏时会有少量消息丢失。

4. 同步多Master多Slave

每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功。

优点:服务可用性与数据可用性非常高。

缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主。

四、RocketMQ集群特性分析

RocketMQ部署架构图如下所示:

Nameserver

Nameserver的开发旨在轻量级,多台Nameserver互相独立,彼此间互不通信,这样的设计,保证了单台Nameserver宕机,不影响Nameserver。nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。

Broker与Nameserver关系

连接:

每个Broker与系统中所有的Nameserver保持长连接。

心跳间隔:

每隔30秒(此时间无法更改)向所有Nameserver发送心跳,心跳包含了自身的topic配置信息。

心跳超时:

Nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的Broker连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则断开连接。

断开:

一旦连接断开,Nameserver会立即更新topic与队列的对应关系,但不会通知生产者和消费者。

负载均衡:

一个topic分布在多个Broker上,一个broker可以配置多个topic,它们是多对多的关系。如果某个topic消息量很大,应该给它多配置几个队列,并且尽量多分布在不同broker上,减轻某个broker的压力。topic消息量都比较均匀的情况下,如果某个broker上的队列越多,则该broker压力越大。

可用性:

由于消息分布在各个broker上,一旦某个broker宕机,则该broker上的消息读写都会受到影响。所以rocketmq提供了master/slave的结构,salve定时从master同步数据,如果master宕机,则slave提供消费服务,但是不能写入消息,此过程对应用透明,由rocketmq内部解决。

两个关键点:

  1. 一旦某个broker master宕机,生产者和消费者多久才能发现?受限于rocketmq的网络连接机制,默认情况下,最多需要30秒,但这个时间可由应用设定参数来缩短时间。这个时间段内,发往该broker的消息都是失败的,而且该broker的消息无法消费,因为此时消费者不知道该broker已经挂掉。


  2. 消费者得到master宕机通知后,转向slave消费,但是slave不能保证master的消息100%都同步过来了,因此会有少量的消息丢失。但是消息最终不会丢的,一旦master恢复,未同步过去的消息会被消费掉。


可靠性:

所有发往broker的消息,有同步刷盘和异步刷盘机制,总的来说,可靠性非常高。

同步刷盘时,消息写入物理文件才会返回成功,因此非常可靠。

异步刷盘时,只有机器宕机,才会产生消息丢失,broker挂掉可能会发生,但是机器宕机崩溃是很少发生的,除非突然断电。

Consumer

与Nameserver关系

连接:

单个消费者和一台nameserver保持长连接。定时查询topic配置信息,如果该nameserver挂掉,消费者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。

心跳:

与nameserver没有心跳。

轮询时间:

默认情况下,消费者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,客户端最多要30秒才能感知。该时间由DefaultMQPushConsumer的pollNameServerInteval参数决定,可手动配置。

与Broker关系

连接:

单个消费者和该消费者关联的所有broker保持长连接。

心跳:

默认情况下,消费者每隔30秒向所有broker发送心跳,该时间由DefaultMQPushConsumer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费。

断开:

消费者挂掉;心跳超时导致broker主动关闭连接。

动作:

一旦连接断开,broker会立即感知到,并向该消费者分组的所有消费者发出通知,分组内消费者重新分配队列继续消费。

负载均衡:

集群消费模式下,一个消费者集群多台机器共同消费一个topic的多个队列,一个队列只会被一个消费者消费。如果某个消费者挂掉,分组内其它消费者会接替挂掉的消费者继续消费。

消费机制

本地队列:

消费者不间断的从broker拉取消息,消息拉取到本地队列,然后本地消费线程消费本地消息队列,只是一个异步过程,拉取线程不会等待本地消费线程,这种模式实时性非常高。对消费者对本地队列有一个保护,因此本地消息队列不能无限大,否则可能会占用大量内存,本地队列大小由DefaultMQPushConsumer的pullThresholdForQueue属性控制,默认1000,可手动设置。

轮询间隔:

消息拉取线程拉取间隔时间由DefaultMQPushConsumer的pullInterval属性控制,默认为0,可手动设置。

消息消费数量:

监听器每次接受本地队列的消息数量是由参数DefaultMQPushConsumer的consumeMessageBatchMaxSize属性控制,默认为1,可手动设置。

消费进度存储:

每隔一段时间将各个队列的消费进度存储到对应的broker上,该时间由DefaultMQPushConsumer的persistConsumerOffsetInterval属性控制,默认为5秒,可手动设置。

Producer

与Nameserver关系

连接:

单个生产者者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,生产者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。

心跳:

与nameserver没有心跳。

与Broker关系

连接:

单个生产者和该生产者关联的所有broker保持长连接。

心跳:

默认情况下,生产者每隔30秒向所有broker发送心跳,该时间由DefaultMQProducer的heartbeatBrokerInterval参数决定,可手动配置。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接。

断开:

移除Broker上的生产者信息。

负载均衡:

生产者时间没有关系,每个生产者向队列轮流发送消息。

以上论述了RocketMQ各组件特性和关系,除此之外,在允许可自动创建Topic的配置下,Producer负责创建Topic消息和发送消息,发送消息支持三种方式,异步、同步和onway方式。就总体的消息传输层面来说,RocketMQ有集群模式和广播模式,默认是集群模式,集群模式以其原生的Consumer Group(消费组)实现了负载均衡,广播模式下,Consumer Group下的每个Consumer实例则要消费全部的消息数据。就业务适用层面来说,rocketMQ可以根据业务需求,实现Order Message(订单消息)、Broadcasting(广播消息)、Scheduled Message(延迟消息)、Batch(同Topic批量消息发送)、Filter(基本消息过滤和高级消息过滤)、OpenMessaging(流式消息发送)等。

五、RocketMQ分布式部署实践案例详述

此处就RocketMQ的多Master多Slave的模式在Linux服务器部署案例进行详细的说明,如系统部署结构图所示。

1. 本次部署环境

Linux服务器192.168.162.235、192.168.162.236两台(下文均简称235、236),详细部署环境示意表如下:

rocketMQ安装部署详细解析

rocketMQ安装部署详细解析

2. 编辑Hosts

分别修改235 和236 的hosts 文件

 
   
   
 
  1. sudo vim /etc/hosts

  2.      IP                NAME

  3. 192.168.162.235      nameserver1

  4. 192.168.162.235      master1

  5. 192.168.162.235      master1-slave1

  6. 192.168.162.236      nameserver2

  7. 192.168.162.236      master2

  8. 192.168.162.236      master2-slave2

注:修改hosts 文件需获得sudo 权限,本机用户是rocketMQ非root用户, 故申请了堡垒机权限(即获得root权限)。

3. 下载官方源码

4. 上传到Linux并解压

分别上传rocketmq-all-4.2.0-bin-release.zip到235和236服务器的/home/rocketMQ/ZHF/rocketMQ-2m2s/目录下:

 
   
   
 
  1. cd /home/rocketMQ/ZHF/rocketMQ-2m2s/

  2. tar zxvf rocketmq-all-4.2.0-bin-release.zip

5. 创建持久化存储目录

Master目录设置:

 
   
   
 
  1. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store

  2. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog

  3. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue

  4. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store/index

Slave目录设置:

 
   
   
 
  1. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s

  2. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog

  3. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue

  4. mkdir /home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index

6. RocketMQ配置文件

235服务器设置:

 
   
   
 
  1. sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a.properties

  2. sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b-s.properties

236服务器设置:

 
   
   
 
  1. sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b.properties

  2. sudo vim /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a-s.properties

broker-a.properties文件配置

 
   
   
 
  1. # Licensed to the Apache Software Foundation (ASF) under one or more

  2. # contributor license agreements.  See the NOTICE file distributed with

  3. # this work for additional information regarding copyright ownership.

  4. # The ASF licenses this file to You under the Apache License, Version 2.0

  5. # (the "License"); you may not use this file except in compliance with

  6. # the License.  You may obtain a copy of the License at

  7. #

  8. # http://www.apache.org/licenses/LICENSE-2.0

  9. #

  10. # Unless required by applicable law or agreed to in writing, software

  11. # distributed under the License is distributed on an "AS IS" BASIS,

  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  13. # See the License for the specific language governing permissions and

  14. # limitations under the License.

  15. #brokerClusterName=DefaultCluster

  16. #brokerName=broker-a

  17. #brokerId=0

  18. #deleteWhen=04

  19. #fileReservedTime=48

  20. #brokerRole=ASYNC_MASTER

  21. #flushDiskType=ASYNC_FLUSH

  22. #所属集群名字

  23. brokerClusterName=rocketmq-cluster

  24. #broker名字,注意此处不同的配置文件填写的不一样

  25. brokerName=broker-a

  26. #0 表示 Master,>0 表示 Slave

  27. brokerId=0

  28. namesrvAddr=nameserver1:9876;nameserver2:9876

  29. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  30. defaultTopicQueueNums=4

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

  32. autoCreateTopicEnable=true

  33. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  34. autoCreateSubscriptionGroup=true

  35. #Broker 对外服务的监听端口

  36. listenPort=10911

  37. haListenPort=10912

  38. #删除文件时间点,默认凌晨 4点

  39. deleteWhen=04

  40. #文件保留时间,默认 48 小时

  41. fileReservedTime=18

  42. #commitLog每个文件的大小默认1G

  43. mapedFileSizeCommitLog=1073741824

  44. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  45. mapedFileSizeConsumeQueue=300000

  46. #destroyMapedFileIntervalForcibly=120000

  47. #redeleteHangedFileInterval=120000

  48. #检测物理文件磁盘空间

  49. diskMaxUsedSpaceRatio=88

  50. #存储路径

  51. storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store

  52. #commitLog 存储路径

  53. storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog

  54. #消费队列存储路径存储路径

  55. storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue

  56. #消息索引存储路径

  57. storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/index

  58. #checkpoint 文件存储路径

  59. storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/checkpoint

  60. #abort 文件存储路径

  61. abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/abort

  62. #限制的消息大小

  63. maxMessageSize=65536

  64. #flushCommitLogLeastPages=4

  65. #flushConsumeQueueLeastPages=2

  66. #flushCommitLogThoroughInterval=10000

  67. #flushConsumeQueueThoroughInterval=60000

  68. #Broker 的角色

  69. #- ASYNC_MASTER 异步复制Master

  70. #- SYNC_MASTER 同步双写Master

  71. #- SLAVE

  72. brokerRole=SYNC_MASTER

  73. #刷盘方式

  74. #- ASYNC_FLUSH 异步刷盘

  75. #- SYNC_FLUSH 同步刷盘

  76. flushDiskType=ASYNC_FLUSH

  77. #checkTransactionMessageEnable=false

  78. #发消息线程池数量

  79. #sendMessageThreadPoolNums=128

  80. #拉消息线程池数量

  81. #pullMessageThreadPoolNums=128

  82. brokerIP1=192.168.162.235

broker-a-s.properties文件配置

 
   
   
 
  1. # Licensed to the Apache Software Foundation (ASF) under one or more

  2. # contributor license agreements.  See the NOTICE file distributed with

  3. # this work for additional information regarding copyright ownership.

  4. # The ASF licenses this file to You under the Apache License, Version 2.0

  5. # (the "License"); you may not use this file except in compliance with

  6. # the License.  You may obtain a copy of the License at

  7. #

  8. #     http://www.apache.org/licenses/LICENSE-2.0

  9. #

  10. # Unless required by applicable law or agreed to in writing, software

  11. # distributed under the License is distributed on an "AS IS" BASIS,

  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  13. # See the License for the specific language governing permissions and

  14. # limitations under the License.

  15. #brokerClusterName=DefaultCluster

  16. #brokerName=broker-b

  17. #brokerId=1

  18. #deleteWhen=04

  19. #fileReservedTime=48

  20. #brokerRole=SLAVE

  21. #flushDiskType=ASYNC_FLUSH

  22. #所属集群名字

  23. brokerClusterName=rocketmq-cluster

  24. #broker名字,注意此处不同的配置文件填写的不一样

  25. brokerName=broker-a

  26. #0 表示 Master,>0 表示 Slave

  27. brokerId=1

  28. namesrvAddr=nameserver1:9876;nameserver2:9876

  29. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  30. defaultTopicQueueNums=4

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

  32. autoCreateTopicEnable=true

  33. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  34. autoCreateSubscriptionGroup=true

  35. #Broker 对外服务的监听端口

  36. listenPort=10923

  37. haListenPort=10924

  38. #删除文件时间点,默认凌晨 4点

  39. deleteWhen=04

  40. #文件保留时间,默认 48 小时

  41. fileReservedTime=18

  42. #commitLog每个文件的大小默认1G

  43. mapedFileSizeCommitLog=1073741824

  44. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  45. mapedFileSizeConsumeQueue=300000

  46. #destroyMapedFileIntervalForcibly=120000

  47. #redeleteHangedFileInterval=120000

  48. #检测物理文件磁盘空间

  49. diskMaxUsedSpaceRatio=88

  50. #存储路径

  51. storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s

  52. #commitLog 存储路径

  53. storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog

  54. #消费队列存储路径存储路径

  55. storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue

  56. #消息索引存储路径

  57. storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index

  58. #checkpoint 文件存储路径

  59. storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/checkpoint

  60. #abort 文件存储路径

  61. abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/abort

  62. #限制的消息大小

  63. maxMessageSize=65536

  64. #flushCommitLogLeastPages=4

  65. #flushConsumeQueueLeastPages=2

  66. #flushConsumeQueueLeastPages=2#flushCommitLogThoroughInterval=10000

  67. #flushConsumeQueueThoroughInterval=60000

  68. #Broker 的角色

  69. #- ASYNC_MASTER 异步复制Master

  70. #- SYNC_MASTER 同步双写Master

  71. #- SLAVE

  72. brokerRole=SLAVE

  73. #刷盘方式

  74. #- ASYNC_FLUSH 异步刷盘

  75. #- SYNC_FLUSH 同步刷盘

  76. flushDiskType=ASYNC_FLUSH

  77. #checkTransactionMessageEnable=false

  78. #发消息线程池数量

  79. #sendMessageThreadPoolNums=128

  80. #拉消息线程池数量

  81. #pullMessageThreadPoolNums=128

  82. brokerIP1=192.168.162.235

broker-b.properties文件配置

 
   
   
 
  1. # Licensed to the Apache Software Foundation (ASF) under one or more

  2. # contributor license agreements.  See the NOTICE file distributed with

  3. # this work for additional information regarding copyright ownership.

  4. # The ASF licenses this file to You under the Apache License, Version 2.0

  5. # (the "License"); you may not use this file except in compliance with

  6. # the License.  You may obtain a copy of the License at

  7. #

  8. #     http://www.apache.org/licenses/LICENSE-2.0

  9. #

  10. # Unless required by applicable law or agreed to in writing, software

  11. # distributed under the License is distributed on an "AS IS" BASIS,

  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  13. # See the License for the specific language governing permissions and

  14. # limitations under the License.

  15. #brokerClusterName=DefaultCluster

  16. #brokerName=broker-b

  17. #brokerId=0

  18. #deleteWhen=04

  19. #fileReservedTime=48

  20. #brokerRole=ASYNC_MASTER

  21. #flushDiskType=ASYNC_FLUSH

  22. #所属集群名字

  23. brokerClusterName=rocketmq-cluster

  24. #broker名字,注意此处不同的配置文件填写的不一样

  25. brokerName=broker-b

  26. #0 表示 Master,>0 表示 Slave

  27. brokerId=0

  28. namesrvAddr=nameserver1:9876;nameserver2:9876

  29. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  30. defaultTopicQueueNums=4

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

  32. autoCreateTopicEnable=true

  33. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  34. autoCreateSubscriptionGroup=true

  35. #Broker 对外服务的监听端口

  36. listenPort=10911

  37. haListenPort=10912

  38. #删除文件时间点,默认凌晨 4点

  39. deleteWhen=04

  40. #文件保留时间,默认 48 小时

  41. fileReservedTime=18

  42. #commitLog每个文件的大小默认1G

  43. mapedFileSizeCommitLog=1073741824

  44. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  45. mapedFileSizeConsumeQueue=300000

  46. #destroyMapedFileIntervalForcibly=120000

  47. #redeleteHangedFileInterval=120000

  48. #检测物理文件磁盘空间

  49. diskMaxUsedSpaceRatio=88

  50. #存储路径

  51. storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store

  52. #commitLog 存储路径

  53. storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/commitlog

  54. #消费队列存储路径存储路径

  55. storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/consumequeue

  56. #消息索引存储路径

  57. storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/index

  58. #checkpoint 文件存储路径

  59. storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/checkpoint

  60. #abort 文件存储路径

  61. abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store/abort

  62. #限制的消息大小

  63. maxMessageSize=65536

  64. #flushCommitLogLeastPages=4

  65. #flushConsumeQueueLeastPages=2

  66. #flushCommitLogThoroughInterval=10000

  67. #flushConsumeQueueThoroughInterval=60000

  68. #Broker 的角色

  69. #- ASYNC_MASTER 异步复制Master

  70. #- SYNC_MASTER 同步双写Master

  71. #- SLAVE

  72. brokerRole=SYNC_MASTER

  73. #刷盘方式

  74. #- ASYNC_FLUSH 异步刷盘

  75. #- SYNC_FLUSH 同步刷盘

  76. flushDiskType=ASYNC_FLUSH

  77. #checkTransactionMessageEnable=false

  78. #发消息线程池数量

  79. #sendMessageThreadPoolNums=128

  80. #拉消息线程池数量

  81. #pullMessageThreadPoolNums=128

  82. brokerIP1=192.168.162.236

broker-b-s.properties文件配置

 
   
   
 
  1. # Licensed to the Apache Software Foundation (ASF) under one or more

  2. # contributor license agreements.  See the NOTICE file distributed with

  3. # this work for additional information regarding copyright ownership.

  4. # The ASF licenses this file to You under the Apache License, Version 2.0

  5. # (the "License"); you may not use this file except in compliance with

  6. # the License.  You may obtain a copy of the License at

  7. #

  8. #     http://www.apache.org/licenses/LICENSE-2.0

  9. #

  10. # Unless required by applicable law or agreed to in writing, software

  11. # distributed under the License is distributed on an "AS IS" BASIS,

  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  13. # See the License for the specific language governing permissions and

  14. # limitations under the License.

  15. #brokerClusterName=DefaultCluster

  16. #brokerName=broker-b

  17. #brokerId=1

  18. #deleteWhen=04

  19. #fileReservedTime=48

  20. #brokerRole=SLAVE

  21. #flushDiskType=ASYNC_FLUSH

  22. #所属集群名字

  23. brokerClusterName=rocketmq-cluster

  24. #broker名字,注意此处不同的配置文件填写的不一样

  25. brokerName=broker-b

  26. #0 表示 Master,>0 表示 Slave

  27. brokerId=1

  28. namesrvAddr=nameserver1:9876;nameserver2:9876

  29. #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

  30. defaultTopicQueueNums=4

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

  32. autoCreateTopicEnable=true

  33. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

  34. autoCreateSubscriptionGroup=true

  35. #Broker 对外服务的监听端口

  36. listenPort=10923

  37. haListenPort=10924

  38. #删除文件时间点,默认凌晨 4点

  39. deleteWhen=04

  40. #文件保留时间,默认 48 小时

  41. fileReservedTime=18

  42. #commitLog每个文件的大小默认1G

  43. mapedFileSizeCommitLog=1073741824

  44. #ConsumeQueue每个文件默认存30W条,根据业务情况调整

  45. mapedFileSizeConsumeQueue=300000

  46. #destroyMapedFileIntervalForcibly=120000

  47. #redeleteHangedFileInterval=120000

  48. #检测物理文件磁盘空间

  49. diskMaxUsedSpaceRatio=88

  50. #存储路径

  51. storePathRootDir=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s

  52. #commitLog 存储路径

  53. storePathCommitLog=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/commitlog

  54. #消费队列存储路径存储路径

  55. storePathConsumeQueue=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/consumequeue

  56. #消息索引存储路径

  57. storePathIndex=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/index

  58. #checkpoint 文件存储路径

  59. storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/checkpoint

  60. #abort 文件存储路径

  61. abortFile=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/abort

  62. #限制的消息大小

  63. maxMessageSize=65536

  64. #flushCommitLogLeastPages=4

  65. #flushConsumeQueueLeastPages=2

  66. #flushCommitLogThoroughInterval=10000

  67. #flushConsumeQueueThoroughInterval=60000

  68. #Broker 的角色

  69. #- ASYNC_MASTER 异步复制Master

  70. #- SYNC_MASTER 同步双写Master

  71. #- SLAVE

  72. brokerRole=SLAVE

  73. #刷盘方式

  74. #- ASYNC_FLUSH 异步刷盘

  75. #- SYNC_FLUSH 同步刷盘

  76. flushDiskType=ASYNC_FLUSH

  77. #checkTransactionMessageEnable=false

  78. #发消息线程池数量

  79. #sendMessageThreadPoolNums=128

  80. #拉消息线程池数量

  81. #pullMessageThreadPoolNums=128

  82. brokerIP1=192.168.162.236

7. 启动参数设置

RocketMQ启动文件位于/home/rocketMQ/ZHF/rocketMQ-2m2s/bin/目录下,Linux中nameserver启动文件为:mqnamesrv,broker启动文件为:mqbroker,mqnamesrv和mqbroker启动文件分别调用了runserver.sh和runbroker.sh文件,这两个文件分别设置了nameserver和broker的启动内存,目前内存启动参数分别为nameserver启动内存4G,最大内存4G,新生代2G,broker启动内存8G,最大内存8G,新生代4G。

8. 端口及防火墙设置

RokcetMQ启动默认使用3个端口9875,10911,10912,三个端口分别代表nameserver服务器端口,broker端口,broker HA端口。需注意的是在多Master多Slave模式下10911和10912是Master的使用端口,但Slave端口的设置与Master的端口不同,具体端口约束为:Slave - Master > 2,否则可能导致同一台服务器无法同时启动Master和Slave。

如果服务器启动了防火墙,为了端口不被屏蔽,需将Master和Slave对应端口加入到iptables表以开放对应端口号,添加完成后重启防火墙。命令行开放端口操作如下:

分别打开235和236终端,在root用户下执行命令:

开放端口:
 
   
   
 
  1. /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9876 -j ACCEPT

  2. /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10911 -j ACCEPT

  3. /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10912 -j ACCEPT

  4. /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10923 -j ACCEPT

  5. /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10924 -j ACCEPT

保存:

 
   
   
 
  1. /etc/rc.d/init.d/iptables save

重启:

 
   
   
 
  1. /etc/init.d/iptables restart

查看端口开放情况:

 
   
   
 
  1. /sbin/iptables -L -n

9. 启动Nameserver

分别启动235、236的Nameserver

 
   
   
 
  1. cd /home/rocketMQ/ZHF/rocketMQ-2m2s/bin

  2. nohup sh mqnamesrv &

10.启动Broker

235上Master启动:

 
   
   
 
  1. nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a.properties

236上Master启动:

 
   
   
 
  1. nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b.properties

235上对应236Master的Slave启动:

 
   
   
 
  1. nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-b-s.properti

236上对应235Master的Slave启动:

 
   
   
 
  1. nohup sh mqbroker -c /home/rocketMQ/ZHF/rocketMQ-2m2s/conf/2m-2s-async/broker-a-s.properti

至此,Nameserver、Broker启动完成,可以用jobs命令查看当前运行进程,如下是服务端相关shutdown,即在bin目录下:

 
   
   
 
  1. sh mqshutdown namesrv

  2. sh mqshutdown broker

六、RocketMQ监控平台部署

1. 修改配置文件,关联rocketMQ集群到管理界面

首先解压并进入解压后rockemq-externals-master目录rocketmq-externals-master/rocketmq-externals-master/rocketmq-console/src/main/resources,修改目录下application.properties配置文件内容如下图:

rocketMQ安装部署详细解析

2. 编译rocketmq-console

 
   
   
 
  1. mvn clean package -Dmaven.test.skip=true

编译需用maven命令进行编译,如下图,显示BIUD SUCCESS,则编译成功,成功后会在rocketmq-externals-master/rocketmq-console/target目录下产生一个rocketmq-console-ng-1.0.0.jar文件。

rocketMQ安装部署详细解析

3. 将编译好的rocketmq-console-ng-0.0.jar包上传linux服务器

4. 运行jar包

 
   
   
 
  1. java -jar target/rocketmq-console-ng-1.0.0.jar

运行显示下图则启动成功:

rocketMQ安装部署详细解析

5. 访问管理界面

浏览器输入http://192.168.162.235:8080/回车显示监控界面如下:

至此,RocketMQ部署完成。

推荐阅读










微信:Yuanping1510



以上是关于rocketMQ安装部署详细解析的主要内容,如果未能解决你的问题,请参考以下文章

干货分享RocketMQ命名服务和路由组件——namesrv解析

搭建 Apache RocketMQ 单机环境

windows下RocketMQ安装部署

RocketMQ详细安装教程(RocketMQ安装RocketMQ修改默认端口console管理后台安装)

RocketMQ详细安装教程(RocketMQ安装RocketMQ修改默认端口console管理后台安装)

RocketMQ3.2.6安装部署及调用