搭建RocketMQ集群
一、环境及准备
集群环境:
软件版本:
部署前操作:
关闭防火墙,关闭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集群的更多相关文章
- CentOS7.4上搭建rocketMQ集群
一.rocketMQ集群部署方案优缺点对比: 多Master模式(2m-noslave) : 一个集群无Slave,全是Master,例如2个Master或者3个Master 优点:配置简单,单个Ma ...
- RocketMQ集群搭建(3m-3s-async)
RocketMQ集群搭建(3m-3s-async) 各角色介绍 角色 作用 Producer 消息发送者,将消息发送到 Broker.无状态,其与NameServer集群中的一个节点建立长连接,定期从 ...
- RocketMq 集群方式搭建 步骤教学包教包会
mq集群方式搭建 有段时间没写这些技术文章了, 今天抽空写一点,不然自己都快忘记了 这篇文章记录了rocketmq 集群方式搭建的过程, 也是自己半天的成果记录吧! 感兴趣的朋友点个赞在走呗! 好了, ...
- 4 种高可用 RocketMQ 集群搭建方案!
背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...
- RocketMQ集群搭建
1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...
- RocketMQ集群搭建方式
各角色介绍 Producer:消息的发送者:举例:发信者 Consumer:消息接收者:举例:收信者 Broker:暂存和传输消息:举例:邮局 NameServer:管理Broker:举例:各个邮局的 ...
- rocketmq学习(二) rocketmq集群部署与图形化控制台安装
1.rocketmq图形化控制台安装 虽然rocketmq为用户提供了使用命令行管理主题.消费组以及broker配置的功能,但对于不够熟练的非运维人员来说,命令行的管理界面还是较难使用的.为此,我们可 ...
- MongoDB 搭建分片集群
在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
随机推荐
- jmeter5.1分布式压测
在使用jmeter压测过程中,可能会度遇到内存溢出的错误,这是为什么呢?因为jmeter是java写的应用,java应用jvm堆内存heap受负载机硬件限制,虽然我们可以调整堆内存大小,但是单机无法支 ...
- Spring Cloud Eureka详细说明
之前学习了如何配置Eureka注册中心.消费者等,关于更详细的一些常用的配置在这里说明. 1.注册中心的自我保护模式 在我们调试Eureka的注册中心时,访问注册中心页面,常常会看见以下提示. 该提示 ...
- 数据挖掘--OPTICS
OPTICS是基于DBSCAN算法的缺陷提出来的一个算法. 核心思想:为每个数据对象计算出一个顺序值(ordering).这些值代表了数据对象的基于密度的族结构,位于同一个族的数据对象具有相近的顺序值 ...
- Python 爬虫之 Beautifulsoup4,爬网站图片
安装: pip3 install beautifulsoup4 pip install beautifulsoup4 Beautifulsoup4 解析器使用 lxml,原因为,解析速度快,容错能力强 ...
- Mongodb分片 学习小结
前一篇 https://www.cnblogs.com/frx9527/p/mongodb.html 学会搭建复制集Replication之后,就可以学习分片Sharding了. 教程建议看官方文档: ...
- 6. [mmc subsystem] mmc core(第六章)——mmc core主模块
一.说明 1.mmc core概述 mmc core主模块是mmc core的实现核心.也是本章的重点内容. 对应代码位置drivers/mmc/core/core.c. 其主要负责如下功能: mmc ...
- JAVAWEB复习笔记-day02
1.CSS样式优先级 优先级:由上到下,由外到内.优先级越来越高 2.css选择器 html标签选择器 class选择器(.) id选择器(#) 3.优先级 style属性>id选择器>c ...
- src和href 如何做好seo 前端页面有那三层 AMD和CMD 规范的区别 渐进增强
1==>简述一下src与href的区别 src用于替换当前元素: href用于在当前文档和引用资源之间确立联系 2==>.谈谈以前端角度出发做好SEO需要考虑什么? a. 了解搜索引擎如何 ...
- 6-剑指offer: 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 代码审计-sha()函数比较绕过
<?php $flag = "flag"; if (isset($_GET['name']) and isset($_GET['password'])) { var_dump ...