Rocketmq,单机,集群部署

RocketMQ: 一款分布式、队列模型的消息中间件。
1 能够保证严格的消息顺序
2 提供丰富的消息拉取模式
3 高效的订阅者水平扩展能力
4 实时消息订阅机制
5 亿级消息堆积能力

强调集群无单点,可扩展,任意一点高可用,水平扩展。

MQ待解决问题:
1 如何保证MQ高可用?
2 如何保证消息重复消费?消息丢失?消息传递顺序性问题?
3 一致性问题:
A系统处理完业务,通过MQ给B、C、D三个系统发送消息数据,如果
B系统,C系统处理成功,D系统处理失败。如何保证消息数据处理的一致性?
https://archive.apache.org/dist/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip

RocketMQ安装
1 下载rocketmq-all-4.4.0-bin-release.zip 二进制包
2 unzip rocketmq-all-4.4.0-bin-release.zip # 解压包
3 启动NameServer,bin目录下:
nohub sh mqnameserv & #后台启动
tail -f ~/logs/rocketmqlogs/namesrv.log #查看日志 ~/logs 表示 /root/logs 目录


sh mqshutdown namesrv #关闭NameServer

4 启动Broker ,bin目录下:
nohup sh mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log


sh mqshutdown broker #关闭broker

5 RocketMQ启动成功

注意:Broker启动失败原因,RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小。
bin目录下:
vi runbroker.sh #JAVA_OPT="KaTeX parse error: Expected 'EOF', got '#' at position 83: …er.sh #̲JAVA_OPT="{JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。
使用:

jps #查看相关程序进程是否启动成功

测试RocketMQ
1 发送消息,bin目录下:
export NAMESRV_ADDR=localhost:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

2 接收消息, bin目录下
export NAMESRV_ADDR=localhost:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭RocketMQ, bin目录下
sh mqshutdown namesrv
sh mqshutdown broker

8 RocketMQ集群
Producer 消息发送者
Consumer 消息接收者
Broker RocketMQ服务器实例
NameServer Broker管理者
Topic 发布/订阅机制
Message Queue 1:1 生产/消费机制

集群特点:
NameServer 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,
Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0
表示Slave。Master也可以部署多个,每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息
到所有NameServer。(Mater与Slave进行数据同步,可同步、异步进行。Master可进行读写操作,Slave只支持读操作)

Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic
服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

Consumer 与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic
服务的Master,Slave建立长连接,且定时向Master,Slave发送心跳。Consumer即可以从Master订阅消息,也可以从Slave订阅
消息,订阅规则由Broker配置决定。

集群模式:
1 单Master模式
2 多Master模式
一个集群无Slave,全是Master.例如2个Master或者3个Master,这种模式的优缺点如下:
优点:配置简单,单个Master宕机或者重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠
消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

3 多个Master多Slave模式(异步)

4 多Master多Slave模式(同步)

多Master多Slave
集群工作流程:
1 启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。
2 Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic
信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。

3 收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic.
4 Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,
轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。
5 Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,
开始消费消息。

集群环境:
192.168.25.135 nameserver9876、brokerserver Master1 10911、Slave2 11011
192.168.25.138 nameserver9876、brokerserver Master2 10911、Slave1 11011

nameserver 默认使用9876端口
master 默认使用10911端口
slave 默认使用11011端口

1 配置 /etc/hosts文件 #ip地址与域名配置
192.168.0.103 rocketmq-nameserver1
192.168.0.103 rocketmq-master1
192.168.0.103 rocketmq-slave2

192.168.0.104 rocketmq-nameserver2
192.168.0.104 rocketmq-master2
192.168.0.104 rocketmq-slave1

2 systemctl restart network #重启网卡,配置生效

3 防火墙配置
systemctl stop firewalld.service #关闭防火墙
firewall-cmd --state #查看防火墙状态
systemctl disable firewalld.service #禁止firewalld开机启动

4 配置环境变量
vim /etc/profile
ROCKETMQ_HOME=/home/qjs/rocketmq/rocketmq-all-4.4.0-bin-release
PATH= P A T H : PATH: PATH:ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

5 source /etc/profile #刷新文件使改动生效,此命令只对shell文件有效。

6 创建消息存储路径
mkdir /home/qjs/rocketmq/store
mkdir /home/qjs/rocketmq/store/commitlog
mkdir /home/qjs/rocketmq/store/consumequeue
mkdir /home/qjs/rocketmq/store/index

7 broker配置文件
#broker集群名称,用于划分broker
brokerClusterName=MQCluster001
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=mq_broker_1
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0
#Slave节点设置
#brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.1.100:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=10911
#未消费的持久化消息清理时间点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理
fileReservedTime=24
#单个commitLog文件的大小限制(单位:字节)
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20)
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/home/qjs/rocketmq/store
#commitLog文件存储路径
storePathCommitLog=/home/qjs/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/home/qjs/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/qjs/rocketmq/store/index
#文件存储路径
storeCheckpoint=/home/qjs/rocketmq/store/checkpoint
#abortFile文件存储路径
abortFile=/home/qjs/rocketmq/store/abort
#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=SYNC_MASTER
#Slave节点设置
#brokerRole=SLAVE
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=SYNC_FLUSH

8 修改启动脚本文件,设置内存大小
vim ./bin/runbroker.sh
JAVA_OPT="{JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

vim ./bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

9 启动NameServer集群
分别在192.168.25.135和192.168.25.138启动NameServer
bin目录下
nohup sh mqnamesrv &

10 启动Broker集群(双主双从启动)
192.168.0.103
bin目录下
nohup sh mqbroker -c /home/qjs/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties & #启动主节点
nohup sh mqbroker -c /home/qjs/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties & #启动从节点

192.168.0.104
bin目录下
nohup sh mqbroker -c /home/qjs/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties & #启动主节点
nohup sh mqbroker -c /home/qjs/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties & #启动从节点

11 查看进程状态
jps

12 查看日志
~/logs/rocketmqlogs/namesrv.log
~/logs/rocketmqlogs/broker.log

13 mqadmin管理工具(集群管理工具,rocketmq自带)
bin目录下
./mqadmin {command} {args}

14 集群管理工具(图形化管理)
1 下载 https://github.com/apache/rocketmq-externals
2 编译打包
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true #pom目录下执行此命令,打成jar包
注意:打包前在rocketmq-console的配置文件,application.properties中配置namesrv集群地址
rocketmq.config.namesrvAddr=192.168.0.103:9876;192.168.0.104:9876

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值