Rocket描述:
RocketMQ:
producer:消息的发送者,写信人;
consumer:消息的接收者;收信人;
broker:存储和传递消息,邮局
nameserv:管理broker,相当于邮局的管理机构一样!(数据无状态,)
topic:区分消息的种类,一个producer可以给一个或多个topic发送短信,一个consumer可以接收一个或多个topic的消息;
Message queue:相当于消息的分区,用于并行发送和接收消息;
Rocket集群描述
集群描述:
nameserv/producer/consumer:启动多个nameserv就是集群
1.nameservver是一个几乎无状态节点,可集群部署,节点直接无任何数据同步;
2.broker:
2.1:分为master和slave节点;一个master可以有多个salver,但是一个slave只能有一个master;
2.2:他们通过brokerName进行分组,brokerId=0代表master,brokerId=1代表salver;
2.3:每个broker和nameserver建立长连接,定时注册topic信息到所有的nameserver;
3.producer:producer和nameserver集群中的一个节点建立长连接(随机),定期从nameserver中获取topic路由信息,并向提供topic服务的master建立长连接,并定时向master节点发送心跳;producer完全无状态可集群部署;
4.consumer:consumer和namesever集群中的任一节点建立长连接,定期从namserver中获取topic路由信息,并向提过topic服务的maseter节点和slaver节点建立长连接,然后定时向master和slaver发送心跳,consumer可以master和slaver节点中都订阅消息,订阅规则由broker配置的规则决定;
三.集群搭建模式;
1.单master模式;不推荐使用,宕机玩完了!
2.多master模式:
3.多master多slaver(异步):单台master宕机后数据会有少量的丢失;
4.多master多slaver(同步):
四:集群的工作流程:
1.启动namaserver:nameserver启动后,监听broker,producer和consumer是否上线,相当于一个路由中心;
2.启动broker:broker和所有的nameserver建立长连接,定时发送心跳包,心跳包包含当前broker(ip+端口)以及topic储藏信息;当注册成功后,namserver就有了所有的broker和topic的映射关系;
3.创建topic:发送消息前需要先创建topic,需要指明当前topic要储藏在那个broker上 去;
4.producer生产消息:先和nameserver建立长连接,看当前的topic是在那些broker上面去,轮询从队列列表中选择一个队列,然后与所在队列的broker建立长连接从而向其发送信息;
5.consumer消费消息:跟其中的一台namsever建立长连接,获取当前的topic在那些Broker上,然后和broker建立连接,消费信息!
五:Rocket集群搭建:
服务器环境:
序号 | IP | 角色 | 架构模式 |
1 | 192.168.237.14 | nameserver/broker | Master1/slave2 |
2 | 192.168.237.9 | nameserver/broker | Master2/slave1 |
1.host添加信息
vim /etc/hosts
#nameserver
192.168.237.14 rocketmq-nameserver1
192.168.237.9 rocketmq-nameserver2
#broker
192.168.237.14 rocketmq-master1
192.168.237.14 rocketmq-slave2
192.168.237.9 rocketmq-master2
192.168.237.9 rocketmq-slave1
配置完场重启网卡:
systemctl restart network
2.防火墙关闭;
#查看防火墙状态;
filewall-cmd --state
#禁止firewalld开机启动;
systemctl disable filewalld.server
在实际的生产环境可以指定开放端口:
#开放nameserver端口:
filewalld-cmd --remove-port=9876/tcp--permanent
#开放master端口:
filewalld-cmd --remove-port=10911/tcp--permanent
#开放slaved端口(集群模式下不可开启)
filewalld-cmd --remove-port=11011/tcp--permanent
重启防火墙:
filewalld-cmd --reload
3.环境变量配置:
[root@docker ~]# vim /etc/profile
#set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.2.0-bin-release
PATH=$ROCKETMQ_HOME/bin:$PATH
export ROCKETMQ_HOME PATH
[root@docker ~]# source /etc/profile
4.创建消息存储路径:
在配置双主双从集群时,配置文件中相关的存储路径需要区分,主节点、从节点的数据不能保存在同一个目录下,不然则会出现:启动NamesrvStartup成功,启动第一个broker master成功,启动第二个broker slave则一直失败。
master文件目录:
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
slave文件目录:
mkdir /usr/local/rocketmq/store_slave
mkdir /usr/local/rocketmq/store_slave/commitlog
mkdir /usr/local/rocketmq/store_slave/consumequeue
mkdir /usr/local/rocketmq/store_slave/index
5.broker配置文件:
采用的多master多slave,同步刷新策略(ASYNC)
1、在192.238.237.14主机上对broker-a.properties文件进行Master1配置
[root@docker ~]# cd /usr/local/rocketmq/conf/2m-2s-async/
[root@docker 2m-2s-async]# ll
total 16
-rw-r--r--. 1 root root 929 Sep 19 2017 broker-a.properties
-rw-r--r--. 1 root root 922 Sep 19 2017 broker-a-s.properties
-rw-r--r--. 1 root root 929 Sep 19 2017 broker-b.properties
-rw-r--r--. 1 root root 922 Sep 19 2017 broker-b-s.properties
[root@docker 2m-2s-async]#vim broker-a.properties
在192.168.237.14机器上的Master Broker的配置文件broker-a.properties
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName=broker -a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.237.14:9876;192.168.237.9:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable= true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubionGroup= true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
disMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制消息的大小
maxMessageSize=65536
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=ASYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
2、在192.238.237.14主机上对broker-b-s.properties文件进行slvave2配置:
[root@docker 2m-2s-async]#vim broker-b-s.properties
在192.168.237.14机器上的slave2 Broker的配置文件broker-b-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11011
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.237.14:9876;192.168.237.9:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable= true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubionGroup= true
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
disMaxUsedSpaceRatio=88
#限制消息的大小
maxMessageSize=65536
#存储路径
storePathRootDir=/usr/local/rocketmq/store_slave
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store_slave/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq/store_slave/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store_slave/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store_slave/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store_slave/abort
3.在192.168.237.9主机上对 broker-b.properties进行Master2配置; 、
[root@node1 2m-2s-sync]# vim broker-b.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.237.14:9876;192.168.237.9:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable= true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubionGroup= true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
检测物理文件磁盘空间
disMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制消息的大小
maxMessageSize=65536
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=ASYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
4.在192.168.237.9主机上对 broker-a-s.properties进行slave1配
[root@node1 2m-2s-sync]# vim broker-a-s.properties
在192.168.237.9机器上的Slave Broker的配置文件broker-a-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
#Broker 对外服务的监听端口
listenPort=11011
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.237.14:9876;192.168.237.9:9876
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable= true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubionGroup= true
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
disMaxUsedSpaceRatio=88
#限制消息的大小
maxMessageSize=65536
#存储路径
storePathRootDir=/usr/local/rocketmq/store_slave
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store_slave/commitlog
#消费队列存储路径存储路径
storePathConsumerQueue=/usr/local/rocketmq/store_slave/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store_slave/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store_slave/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store_slave/abort
6.修改启动脚本文件:
7.服务启动:
1.启动Namaserver集群:
分别在192.168.237.14和192.168.237.9启动nameserv:
cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin
nohup sh mqnamesrv &
sh shutdown nameserv
2.启动Broker集群
在92.168.237.14主机上启动master1和slave2
master1:
cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-a.properties &
slave2:
cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &
master2:
cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-b.properties &
slave2:
cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &