RocketMQ(一)Server 集群环境搭建

RocketMQ
placeholder image
admin 发布于:2023-01-31 16:08:47
阅读:loading

基本介绍

MQ俗称消息队列,是一块非常有用的技术栈和解决方案思想,也曾在工作中多次应用到消息队列的解决思想。在没有使用MQ时也曾使用数据库来仿真异步消息处理的场景应用实现,也曾有幸被选中给周围同事演讲过一次RabbitMQ的技术分析(前后通过几个月的学习,先是ActiveMQ、再是RabbitMQ,也学习许了多家RabbitMQ的视频教程,最终根据自己理解的总结分享而出,有录屏可以分享给大家),至于RocketMQ这一块呢,我是不愿意去实践它的,因为深入了解一款MQ消息队列就可以了,对于其它同类中间件略知一二即可,但是SpringCloud Alibaba系的核心组件之一的RocketMQ,本着对于SpringCloud Alibaba系统的组件广泛学习的原则还是耐着性子去稍微入门了一下,将我入门的程度分享出来吧。

官方网站“https://rocketmq.apache.org”、“https://github.com/apache/rocketmq”,坚持闭着眼睛最新版的原则下载最新版“rocketmq-all-5.0.0-bin-release.zip”,参考如下图所示:

image.png

1)前置条件已经安装jdk,并配置环境变量;准备一台Windows主机和3台CentOS虚拟机(防火墙状态为关闭,保证其能互通访问);

2)下载dledger编译(使用MQ-5.0版本,已经内置了dledger,跳过此步骤,当前使用5.0.0版本);

A:只启动一台机器时,查看的集群列表中这个机器#ACTIVATED的状态为false,IP地址为:192.168.244.139:30911;

B:启动第二台机器时,IP地址为:192.168.244.134:30931,此时第二台机器的#ACTIVATED的状态为true;

C:启动第三台机器时,IP地址为:192.168.244.138:30921,此时这个机器#ACTIVATED的状态为false;

3)三台机器的master节点为#ACTIVATED的状态为true的机器,跟启动顺序有关系;

4)当master宕机或者关机后,另外两台机器会竞选出一个作为master(集群列表里会移除宕机的数据);

5)当剩下两台机器中的master再宕机或者关闭后,则剩余的最后一台机器一直被是为slave(从机),状态不会变化;

6)各种命令的执行,如创建Topic,创建后在其它的MQ服务中直接也可见;当某个宕机的服务再启动后也将能同步到Topic;

部署安装

仍然以之前介绍过的三台服务器为主,将基于这三台机器的部署集群环境,详细如下:

127.0.0.1

Windows 主机


192.168.244.139

CentOS虚拟机 1 主

约定为 0 号节点

192.168.244.138

CentOS虚拟机 2 从

约定为 1 号节点

192.168.244.134

CentOS虚拟机 3 从

约定为 2 号节点

(1)【对于3台机器做同样的操作将下载的《rocketmq-all-5.0.0-bin-release.zip》文件解压至/app/RocketMQ/rocketmq-5.0目录,重命名为rocketmq-5.0,该目录约定为%ROCKETMQ_HOME%

(2)【对于3台机器做同样的操作】修改%ROCKETMQ_HOME%/bin目录下的runserver.sh文件,将71行和76行的最大内存和最小内存等参数调整为256M(默认设置的4g内存,如果环境内存较大可无视此步骤)

(3)【对于3台机器做同样的操作】修改%ROCKETMQ_HOME%/bin目录下的runbroker.sh文件,将69行和85行的最大内存和最小内存等参数调整为256M(默认设置的4g内存,如果环境内存较大可无视此步骤);

(4)对于0号节点139的%ROCKETMQ_HOME%/conf/dledger/broker-n0.conf进行改写,参考内容如下:

# 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 = RaftCluster
# broker组名,同一个RaftClusterGroup内brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30911
# 设置NameServer地址和端口,集群时配置多个时用分号隔开
namesrvAddr=192.168.244.139:9876;192.168.244.138:9876;192.168.244.134:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.244.139:40911;n1-192.168.244.138:40912;n2-192.168.244.134:40913
## must be unique
dLegerSelfId=n0
sendMessageThreadPoolNums=16

(5)对于1号节点138的%ROCKETMQ_HOME%/conf/dledger/broker-n0.conf进行改写,参考内容如下:

# 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 = RaftCluster
# broker组名,同一个RaftClusterGroup内brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30921
# 设置NameServer地址和端口,集群时配置多个时用分号隔开
namesrvAddr=192.168.244.139:9876;192.168.244.138:9876;192.168.244.134:9876
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.244.139:40911;n1-192.168.244.138:40912;n2-192.168.244.134:40913
## must be unique
dLegerSelfId=n1
sendMessageThreadPoolNums=16

(6)对于2号节点134的%ROCKETMQ_HOME%/conf/dledger/broker-n0.conf进行改写,参考内容如下:

# 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 = RaftCluster
# broker组名,同一个RaftClusterGroup内brokerName名要一样
brokerName=RaftNode00
# 监听端口
listenPort=30931
# 设置NameServer地址和端口,集群时配置多个时用分号隔开
namesrvAddr=192.168.244.139:9876;192.168.244.138:9876;192.168.244.134:9876
storePathRootDir=/tmp/rmqstore/node02
storePathCommitLog=/tmp/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.244.139:40911;n1-192.168.244.138:40912;n2-192.168.244.134:40913
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=16

说明(4)(5)(6)三个步骤修改的都不是同一个文件,按照约定的编号进行对应文件的修改,同时集群环境的启动将也对应至具体的配置文件,参考3个启动命令和启动输出结果:

# 后台启动nameserver
nohup sh bin/mqnamesrv > nohubNameserv &
# 后台启动broker 139
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n0.conf &
# 后台启动broker 138
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n1.conf &
# 后台启动broker 134
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n2.conf &
# 查看集群状态
sh bin/mqadmin clusterList -n 127.0.0.1:9876
# 创建Topic
sh bin/mqadmin updatetopic -n localhost:9876 -t TestTopic222 -c RaftCluster
# 查看Topic
sh bin/mqadmin topicList -n 127.0.0.1:9876

说明上述mqadmin命令使用的是本机的ip 127.0.0.1的地址需要启动Nameserv服务。

image.png

(0号节点139机器启动Server)

image.png

(0号节点139机器启动Server输出)

image.png

(0号节点139机器启动Broker输出)

image.png

(查看集群列表)

其它说明

(1)通过创建Topic的命令在某个节点上增加后,会在其它节点查询会同步存在;

(2)当某个节点从关闭状态恢复至启动状态后,Topic数据会同步;

(3)当三台机器中138的ACTIVATED=true的机器宕机后,剩下的139和134两台机器精选主节点,如下图是所示:

image.png

(4)当前环境部署的三台节点Rocketmq Server及原始Server可至百度网盘下载:

链接:https://pan.baidu.com/s/1jJ3COAjTX3B96cNfxT0iMA 

提取码:rayc


 点赞


 发表评论

当前回复:作者

 评论列表


留言区