一、环境及准备

集群环境:

软件版本:

部署前操作:

关闭防火墙,关闭selinux(生产环境按需关闭或打开)
同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器
[root@es1 ~]# crontab -l #为了方便直接使用公网服务器
#update time
*/ * * * * /usr/bin/rdate -s time-b.nist.gov &>/dev/null

安装配置Java环境

配置hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.150.134 rocketmq-nameserver1
172.16.150.134 rocketmq-master1
172.16.150.135 rocketmq-nameserver2
172.16.150.135 rocketmq-master2
172.16.150.136 rocketmq-nameserver3
172.16.150.136 rocketmq-master3

二、RocketMQ简介

1.集群方式:

单Master方式

风险比较大, 一旦Broker重启或者宕机, 将导致整个环境不可用, 不建议线上使用.

多Master模式

一个集群中没有slave, 全是master, 例如2个master或者3个master.
优点:配置简单, 性能最好,单个Master宕机或重启对应用无影响, 磁盘配置为RAID10时, 即使机器宕机不可恢复, 由于RAID10磁盘非常可靠, 消息也不会丢(异步刷盘丢失少量信息, 同步刷盘一条不丢)
缺点 : 单台机器宕机期间, 这个机器上未被消费消息在机器恢复之前不可订阅, 消息实时性受到影响 .

多Master多Slave模式, 异步复制

每个 Master 配置一个 Slave,有多对Master-Slave,采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从 Slave消费,此过程对应用透明。不需要人工干预。性能同Master 模式几乎一样。
缺点:Master 宕机,磁盘损坏情况,会丢失少量消息。

多Master多Slave模式, 同步双写

每个 Master 配置一个 Slave,有多对Master-Slave,采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低 %左右,发送单个消息的 RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

2.名词解释

NameServer

NameServer顾名思义,在系统中肯定是做命名服务,服务治理方面的工作,功能应该是和zookeeper差不多,据说RocketMq的早期版本确实是使用的zookeeper,后来改为了自己实现的NameServer。
NameServer在RocketMQ中的两个主要作用
  NameServer维护了一份Broker的地址列表和,broker在启动的时候会去NameServer进行注册,会维护Broker的存活状态。
  NameServer维护了一份Topic和Topic对应队列的地址列表,broker每次发送心跳过来的时候都会把Topic信息带上。 NameServer的稳定性非常高。原因有二:
  NameServer互相独立,彼此没有通信关系,单台NameServer挂掉,不影响其他NameServer,即使全部挂掉,也不影响业务系统使用。无状态。
  NameServer不会有频繁的读写,所以性能开销非常小,稳定性很高。

Broker

broker是消息接收处理,落地的核心模块。这个模块用于接收producer发送的消息以及consumer。
与NameServer关系 连接
  单个broker和所有nameServer保持长连接 心跳
  心跳间隔:每隔30秒(此时间无法更改)向所有nameserver发送心跳,心跳包含了自身的topic配置信息。
  心跳超时:nameserver每隔10秒钟(此时间无法更改),扫描所有还存活的broker连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则断开连接。 断开
  时机:broker挂掉;心跳超时导致nameserver主动关闭连接
  动作:一旦连接断开,nameserver会立即感知,更新topc与队列的对应关系,但不会通知生产者和消费者 负载均衡
  一个topic分布在多个broker上,一个broker可以配置多个topic,它们是多对多的关系。
  如果某个topic消息量很大,应该给它多配置几个队列,并且尽量多分布在不同broker上,减轻某个broker的压力。
  topic消息量都比较均匀的情况下,如果某个broker上的队列越多,则该broker压力越大。

三、RocketMQ集群部署(多master方式)

1.下载软件(这里采用二进制安装,由于是实验环境,所以安装的版本为最新版本,如果生产不建议使用最新版本,但是建议使用4.3+版本,4.3之后RocketMQ开始支持事务)

[root@rocketmq-master1 ~]#  wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip

2.解压RocketMQ

[root@rocketmq-master1 ~]#unzip rocketmq-all-4.5.-bin-release.zip
[root@rocketmq-master1 ~]#mv rocketmq-all-4.5.-bin-release /usr/local
[root@rocketmq-master1 ~]#cd /usr/local
[root@rocketmq-master1 local]#ln -sv rocketmq-all-4.5.-bin-release rocketmq

3.创建相关数据及日志目录

mkdir -p /mnt/store/{commitlog,consumequeue,index,logs}

4.目录解析(根据部署的架构进入对应的目录)

[root@rocketmq-master1 local]# cd rocketmq/conf/
[root@rocketmq-master1 conf]# ll
总用量
drwxr-xr-x root root -- : 2m-2s-async #多主多从异步刷新参考配置文件
drwxr-xr-x root root -- : 2m-2s-sync  #多主多从同步刷新参考配置文件
drwxr-xr-x root root -- : 2m-noslave  #多master参考配置文件
....
[root@rocketmq-master1 conf]# cd 2m-noslave/ #由于我们使用的是多master架构,进入2m-noslave目录

5.创建配置文件

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,a.properties,就写broker-a,b的就填写b
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:;rocketmq-nameserver2:;rocketmq-nameserver3:
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=
#删除文件时间点,默认凌晨 4点
deleteWhen=
#文件保留时间,默认 48
小时
fileReservedTime=
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=
#destroyMapedFileIntervalForcibly=
#redeleteHangedFileInterval=
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=
#存储路径
storePathRootDir=/mnt/store
#commitLog 存储路径
storePathCommitLog=/mnt/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/mnt/store/consumequeue
#消息索引存储路径
storePathIndex=/mnt/store/index
#checkpoint 文件存储路径
storeCheckpoint=/mnt/store/checkpoint
#abort 文件存储路径
abortFile=/mnt/store/abort
#限制的消息大小
maxMessageSize=
#flushCommitLogLeastPages=
#flushConsumeQueueLeastPages=
#flushCommitLogThoroughInterval=
#flushConsumeQueueThoroughInterval=
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=
#拉消息线程池数量
#pullMessageThreadPoolNums=128
brokerIP1=172.16.150.134 #绑定本地IP,如果主机有多块网卡则需要配置,否则报错

拷贝配置文件(注意要修改brokerName的名称)

[root@rocketmq-master1 2m-noslave]# cp broker-a.properties broker-b.properties   #第二台配置文件,注意要修改brokerName的名称和绑定地址  !!!
[root@rocketmq-master1 2m-noslave]# cp broker-a.properties broker-c.properties #第三台配置文件
[root@rocketmq-master1 2m-noslave]# scp broker-a.properties broker-b.properties broker-c.properties 172.16.150.135:/usr/local/rocketmq/conf/
[root@rocketmq-master1 2m-noslave]# scp broker-a.properties broker-b.properties broker-c.properties 172.16.150.136:/usr/local/rocketmq/conf/

6.修改log路径

[root@rocketmq-master1 2m-noslave]# cd ..
[root@rocketmq-master1 conf]# pwd
/usr/local/rocketmq/conf
[root@rocketmq-master1 conf]# sed -i 's#${user.home}#/mnt#g' *.xml #默认位置为用户家目录下logs目录

7.修改服务启动脚本参数 

[root@rocketmq-master1 conf]# cd ../bin/
[root@rocketmq-master1 bin]# pwd
/usr/local/rocketmq/bin
[root@rocketmq-master1 bin]# vim runbroker.sh

[root@rocketmq-master1 bin]# vim runserver.sh 

8.先启动nameserver服务(必须)

[root@rocketmq-master1 bin]# nohup sh mqnamesrv &
[root@rocketmq-master1 logs]# cd /mnt/logs/rocketmqlogs/
[root@rocketmq-master1 rocketmqlogs]# tailf namesrv.log

9.启动broker服务

[root@rocketmq-master1 bin]#nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties  &  #注意,每台服务启动时指定的配置文件也要同时改变
[root@rocketmq-master2 bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties &
[root@rocketmq-master3 bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-c.properties & [root@rocketmq-master1 bin]# tailf /mnt/logs/rocketmqlogs/broker.log
[root@rocketmq-master1 bin]# tailf /mnt/logs/rocketmqlogs/broker.log

四、部署rockmq-console

Git地址:https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0

[root@rocketmq-master1 bin]#cd /mnt/
[root@rocketmq-master1 mnt]#git clone -b release-rocketmq-console-1.0. https://github.com/apache/rocketmq-externals.git
[root@rocketmq-master1 mnt]# cd /mnt/rocketmq-externals/rocketmq-console/src/main/resources
[root@rocketmq-master1 resources]#vim application.properties

 编辑配置文件,按照实际情况修改

编译源代码(需要maven环境)

[root@rocketmq-master1 resources]# cd /mnt/rocketmq-externals/rocketmq-console/
[root@rocketmq-master1 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

启动服务

[root@rocketmq-master1 rocketmq-console]# cd target/
[root@rocketmq-master1 target]# java -jar target/rocketmq-console-ng-1.0..jar

浏览器访问

编译过程中出现的报错:

-source 1.6 中不支持 diamond 运算符
[ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)

解决方法:pom.xml的plugins下添加:

在pom.xml的plugins下添加以下内容(全部内容):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
  </configuration>
</plugin>

拷贝时注意中文空格,否则会报错

或者使用容器的方式部署,步骤如下:

docker pull styletang/rocketmq-console-ng
docker run -d -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p : -t styletang/rocketmq-console-ng #将127.0.0.1修改为nameserver地址

如果当前环境已经存在rockmq,且为3.x版本时,使用最新的console时,在页面会有部分信息不展示,可以使用对应版本的console,下面的链接为3.2.6版本,使用Tomcat部署即可

步骤:

.unzip解压war包 -d指定到某个目录,
.进入解压目录下WEB-INF/classes/目录中
.修改config.properties配置文件,添加name server地址
格式IP(域名):port 如果有多个,已;为分割
4将目录移动到Tomcat docBase目录下,并启动
链接:https://pan.baidu.com/s/10NeEeBH8eugdYcDn6e02aQ  提取码:aq1t 

打开的界面略有不同,如下图

注意事项:

.配置文件名称和服务器对应,a:master1 b:master2 ..
.注意不同主机配置文件名称不同,brokerNam也不同
.每台briker服务启动时,注意要指定正确的配置文件
.建议生产每个服务使用screen命令启动,不要使用nohup

参考文档:

https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0/rocketmq-console

https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md

http://rocketmq.apache.org/docs/quick-start/

https://juejin.im/post/5a911ea16fb9a0633f0e36a1

https://blog.csdn.net/sybnfkn040601/article/details/64920062

https://www.cnblogs.com/buyige/p/9437054.html

搭建RocketMQ集群的更多相关文章

  1. CentOS7.4上搭建rocketMQ集群

    一.rocketMQ集群部署方案优缺点对比: 多Master模式(2m-noslave) : 一个集群无Slave,全是Master,例如2个Master或者3个Master 优点:配置简单,单个Ma ...

  2. RocketMQ集群搭建(3m-3s-async)

    RocketMQ集群搭建(3m-3s-async) 各角色介绍 角色 作用 Producer 消息发送者,将消息发送到 Broker.无状态,其与NameServer集群中的一个节点建立长连接,定期从 ...

  3. RocketMq 集群方式搭建 步骤教学包教包会

    mq集群方式搭建 有段时间没写这些技术文章了, 今天抽空写一点,不然自己都快忘记了 这篇文章记录了rocketmq 集群方式搭建的过程, 也是自己半天的成果记录吧! 感兴趣的朋友点个赞在走呗! 好了, ...

  4. 4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  5. RocketMQ集群搭建

    1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...

  6. RocketMQ集群搭建方式

    各角色介绍 Producer:消息的发送者:举例:发信者 Consumer:消息接收者:举例:收信者 Broker:暂存和传输消息:举例:邮局 NameServer:管理Broker:举例:各个邮局的 ...

  7. rocketmq学习(二) rocketmq集群部署与图形化控制台安装

    1.rocketmq图形化控制台安装 虽然rocketmq为用户提供了使用命令行管理主题.消费组以及broker配置的功能,但对于不够熟练的非运维人员来说,命令行的管理界面还是较难使用的.为此,我们可 ...

  8. MongoDB 搭建分片集群

    在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...

  9. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

随机推荐

  1. 【设计模式】Composite

    目录 前言 安卓View的实现 View Beyond setContentView setContentView做了什么事情? 如何将xml文件变成对象的? 小结 View的绘制流程 三个流程 三个 ...

  2. docker 安装与基本命令

    安装 Install Docker for Linux Download Docker for Mac Install Docker for Windows 镜像是docker三大核心概念中最重要的. ...

  3. (转)Unity与3ds Max的单位关系(使用FBX文件)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/a1780531/article/deta ...

  4. 章节十四、3-执行JavaScript命令

    一.网页页面都是由html+css和javaScript组成的,如果页面中没有javaScript的存在,就不会有操作动作的执行,例如页面上你点击的按钮或者链接都离不开javaScript.(这一节不 ...

  5. [Caliburn.Micro专题][1]快速入门

    目录 1. 什么是Caliburn.Micro? 2. 我是否需要学习CM框架? 3. 如何下手? 3.1 需要理解以下几个概念: 3.2 工程概览 3.3 示例代码 开场白:本系列为个人学习记录,才 ...

  6. 【Linux】-- 认识bash shell

    一.前言 我们知道管理整个计算机硬件的其实是系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们所想要达到的工作.那么Linux系统有多少shell可 ...

  7. Codeforces Round #303 (Div. 2)(CF545) E Paths and Trees(最短路+贪心)

    题意 求一个生成树,使得任意点到源点的最短路等于原图中的最短路.再让这个生成树边权和最小. http://codeforces.com/contest/545/problem/E 思路 先Dijkst ...

  8. 如何防止XSS攻击?

    来自: https://www.freebuf.com/articles/web/185654.html 前端安全 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业 ...

  9. VLDB 2019:

    纵览数据库顶会VLDB 2019论文,我们发现了六大发展动向 作者 | 韩硕 [导读]一年一度的数据库领域顶级会议 VLDB 2019 于当地时间8月26日-8月30日在美国加利福尼亚州洛杉矶召开,探 ...

  10. 洛谷 U86564 排队形

    洛谷 U86564 排队形 题目传送门 题目背景 \(JDFZ2019\)秋季运动会开始辣!为了使强大的高一 · \(6\)班有一个更好的精神面貌,班主任\(T\)老师和体委\(LY\),\(LYB\ ...