基于docker容器搭建rocketmq集群(3主三从)

基于docker容器搭建rocketmq集群(3主三从)

一、安装前准备

本文所需文件免费提供地址:https://download.csdn.net/download/qq_40756113/80018298
觉得作者不错的还请点个关注,后续还有博客上新。

1.1、服务器准备

本次集群搭建使用docker容器模拟服务器资源,因为要搭建三主三从集群,因此需要准备三个docker容器充当三台服务器资源。

本文中的容器使用搭建redis集群的三台容器,本次准备使用三台容器模拟中间件服务器,在三个容器中搭建三个中间件集群,本篇博客为第二个中间件—rocketmq。具体的容器准备(局域网搭建、ip分配、容器环境)见上篇博客基于docker容器搭建redis集群(3主三从)

本次规划上做三主三从,每台服务器做一主一从,启动一个nameserver(默认9876)和两个broker(10911,10900),因此需要两个broker端口一个nameserver端口。

服务器资源IP端口备注
10.25.27.116broker-a:10911;broker-b-s:10900;nameserver:9876
10.25.27.117broker-b:10911;broker-c-s:10900;nameserver:9876
10.25.27.118broker-c:10911;broker-a-s:10900;nameserver:9876

三个broker主节点分别为broker-a、broker-b,broker-c,三个从节点分别为broker-a-s,broker-b-s,broker-c-s,主节点和从节点分别部署到不同的服务器上。

1.2、安装软件准备

序号软件名称功能用途
1jdk1.8.0_152RocketMq运行环境
2apache-rocketmq.4.3.2分布式消息和流处理平台

二、软件安装

2.1、jdk1.8安装

Rocketmq是由java开发,所以运行rocketmq需要安装java运行环境jdk,本次采用jdk1.8.0_152,将下载的压缩包上传到用户目录下/home/test01/java

1、解压文件
cd /home/test01/java
tar -zxvf jdk1.8.0_152.tar.gz
2、配置环境变量
vim ~/.bash_profile

export JAVA_HOME=/home/test01/java/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
3、使配置立刻生效
source ~/.bash_profile

输入java,javac等命令进行测试

2.2、apache-rocketmq.4.3.2安装

1、到用户目录下创建rocketmq目录

mkdir -p /home/test01/rocketmq

2、将apache-rocketmq.4.3.2.tar.gz安装包上传到/home/test01/software目录下,解压安装包到目录/home/test01/rocketmq/

tar -zxvf apache-rocketmq.4.3.2.tar.gz -C /home/test01/rocketmq/

3、配置环境变量

vim ~/.bash_profile

export ROCKETMQ_HOME=/home/test01/rocketmq/apache-rocketmq-4.3.2
export PATH=$ROCKETMQ_HOME/bin:$PATH

source ~/.bash_profile

三、配置及启动rocketmq

3.1、配置创建集群的相关文件

1、创建文件目录结构

# 创建集群配置文件存放的目录
mkdir -p /home/test01/rocketmq/conf/clusterconf

# 创建集群节点的日志相关文件路径
#主节点
mkdir -p /home/test01/rocketmq/data/broker-a-m/commitlog
mkdir -p /home/test01/rocketmq/data/broker-a-m/consumequeue
mkdir -p /home/test01/rocketmq/data/broker-a-m/index
#从节点
mkdir -p /home/test01/rocketmq/data/broker-b-s/commitlog
mkdir -p /home/test01/rocketmq/data/broker-b-s/consumequeue
mkdir -p /home/test01/rocketmq/data/broker-b-s/index

# 打印启动日志(可选)
mkdir -p /home/test01/rocketmq/logs

注意:另外两个服务器根据规划,10.25.27.117创建的是broker-b-m和broker-c-s,10.25.27.118创建的是broker-c-m和broker-a-s,a,b,c代表三个broker的名称,m为主节点,s为从节点。也可以根据自己需求进行自定义命名规范,但是下面的配置文件也要随之改变。

2、配置主机broker-a.properties文件

进入/home/test01/rocketmq/conf/clusterconf目录下,使用vim创建并编辑broker-a.properties文件

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-a
#集群中 0 表示 Master,>0 表示 Slave
brokerId=0
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#指定broker的IP(根据实际情况填写)
brokerIP1=10.25.27.116
#nameServer地址,集群用分号分割,域名1:9876; 域名2:9876; 域名3:9876(根据实际情况填写)
namesrvAddr=10.25.27.116:9876;10.25.27.117:9876;10.25.27.118:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/test01/rocketmq/data/broker-a-m
#commitLog 存储路径
storePathCommitLog=/home/test01/rocketmq/data/broker-a-m/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/test01/rocketmq/data/broker-a-m/consumequeue
#消息索引存储路径
storePathIndex=/home/test01/rocketmq/data/broker-a-m/index
#checkpoint 文件存储路径
storeCheckpoint=/home/test01/rocketmq/data/checkpoint
#abort 文件存储路径
abortFile=/home/test01/rocketmq/data/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128

#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
waitTimeMillsInSendQueue=300  #或者更大

3、配置从机broker-b-s.properties文件

进入/home/test01/rocketmq/conf/clusterconf目录下,使用vim创建并编辑broker-b-s.properties文件

# 所属集群名称
brokerClusterName=rocketmq-cluster
# broker名称
brokerName=broker-b
#broker的角色
# 集群中0表示Master,>0表示Slave
brokerId=1

# broker的数据规则
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER同步双写Master
#- SLAVE
brokerRole=SLAVE

# 刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 指定broker的IP
brokerIP1=10.25.27.116
#nameServer地址,集群用分号分割
namesrvAddr=10.25.27.116:9876;10.25.27.117:9876;10.25.27.118:9876

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false

# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false

# broker对外服务的监听端口
listenPort=10900

# 删除文件时间点,默认凌晨四点
deleteWhen=04

# 文件保留时间,默认48小时
fileReservedTime=48

# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/test01/rocketmq/data/broker-b-s

#commitLog存储路径
storePathCommitLog=/home/test01/rocketmq/data/broker-b-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/home/test01/rocketmq/data/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/home/test01/rocketmq/data/broker-b-s/index
#checkpoint文件存储路径
storeCheckpoint=/home/test01/rocketmq/data/broker-b-s/checkpoint
#abort文件存储路径
abortFile=/home/test01/rocketmq/data/broker-b-s/abort

#限制消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false

#发送消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
waitTimeMillsInSendQueue=300

116服务器配置完毕后,另外两台服务器也根据规划分别进行相应的配置,主要注意broker名称、brokerid、角色、ip、监听端口、文件目录的区别。也可以使用scp将整个目录拷贝到另外两个服务器后进行配置及目录的修改。

3.2、修改启动内存

因为rocket默认启动内存比较大,因此需要修改启动内存,实际生产中根据需要进行修改,本次为测试搭建,虚拟机内存较小,所以我们把启动内存减小。

进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下

分别修改runbroker.sh和runserver.sh文件,将jvm启动参数修改为合适大小然后保存。

在这里插入图片描述

3.3、启动nameserver

进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下

#三台服务器都执行启动

#nohup表示以守护程序运行,&表示后台运行
nohup sh mqnamesrv &

#执行后使用jps查看启动结果,或者查看nohup.out文件查看启动日志

3.4、启动broker

进入/home/test01/rocketmq/apache-rocketmq-4.3.2/bin目录下

#116服务器
#执行后使用jps查看启动结果,或者查看nohup.out文件查看启动日志
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-a.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-b-s.properties &

#另外两台也对应启动broker
#117
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-b.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-c-s.properties &
#118
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-c.properties &
nohup sh mqbroker -c /home/test01/rocketmq/conf/clusterconf/broker-a-s.properties &

注意:防火墙一定要开放所使用的端口。

四、安装rocketmq监控台(可选)

为方便管理我们在116服务器上安装rocketmq-console,并查看集群运行情况。

4.1、下载rocketmq-console

使用浏览器下载rocketmq-console.zip压缩包,在本地解压

在这里插入图片描述

4.2、配置访问端口及集群地址

进入rocketmq-console\src\main\resources目录下,打开application.properties文件进行编辑(根据自己情况进行配置)

在这里插入图片描述

4.3、编译打包

打开命令窗口进入rocketmq-console目录下执行(需安装有maven)

mvn clean package -Dmaven.test.skip=true

在rocketmq-console\target目录下会生成rocketmq-console-ng-1.0.1.jar文件

4.4、上传启动

将上面生成的jar包上传到116服务器上的/home/test01/rocketmq目录下,然后启动

nohup java -jar rocketmq-console-ng-1.0.1.jar &

注意:因为我们使用的是docket容器模拟的服务器,所以我们需要将访问端口(我的是9898)进行端口映射,即将容器的端口映射到宿主机对应端口,然后使用浏览器访问宿主机的对应端口即可。对于如何为容器追加端口映射可以自行百度或参考:https://blog.csdn.net/lypeng_/article/details/98176138

在这里插入图片描述

浏览器访问后查看集群信息可以看到三主三从集群搭建成功。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 要搭建RocketMQ集群,可以使用Docker容器化技术来实现。以下是搭建RocketMQ集群的步骤: 1. 安装DockerDocker Compose 2. 创建一个Docker Compose文件,定义RocketMQ集群的配置和服务 3. 在Docker Compose文件中定义三个服务:NameServer、Broker和Console 4. 配置NameServer服务,指定NameServer的端口和集群名称 5. 配置Broker服务,指定Broker的端口、NameServer地址和集群名称 6. 配置Console服务,指定Console的端口和NameServer地址 7. 启动Docker Compose,创建RocketMQ集群 8. 使用RocketMQ Console管理和监控集群 以上是搭建RocketMQ集群的基本步骤,具体的实现细节可以参考RocketMQ官方文档和Docker官方文档。 ### 回答2: RocketMQ是一个 Apache 开源的分布式消息传递系统,在分布式应用中广泛应用。它具有高可用性、高并发性、高性能、可扩展性等优点。Docker 是一种容器化技术,它可以将应用程序及其依赖项打包成一个 Docker 容器,从而使应用程序在运行时具有一致的环境。这就为 RocketMQ 集群搭建提供了很大的便利。这里我们就以 Docker 为基础,来讲解如何搭建 RocketMQ 集群。 第一步,创建 Dockerfile 我们首先需要创建 Dockerfile,该文件用于指导 Docker 构建 RocketMQ 集群。以下是 Dockerfile 内容: FROM java:8-jre ENV ROCKETMQ_VERSION=4.3.2 ENV ROCKETMQ_HOME=/opt/rocketmq-${ROCKETMQ_VERSION} ADD rocketmq-all-${ROCKETMQ_VERSION}-bin-release.tar.gz /opt RUN ln -s ${ROCKETMQ_HOME}/bin/mqnamesrv /usr/local/bin && ln -s ${ROCKETMQ_HOME}/bin/mqbroker /usr/local/bin CMD cd ${ROCKETMQ_HOME}/bin && nohup sh mqnamesrv & CMD cd ${ROCKETMQ_HOME}/bin && sleep 5 && sh mqbroker -n namesrv:9876 autoCreateTopicEnable=true 第二步,构建 Docker image 我们使用以下命令构建 Docker image: $ docker build -t rocketmq:4.3.2 . 第三步,运行容器 接下来在一台机器上启动该镜像的多个容器,每个容器都要有一个不同的名字和 IP 地址,这样它们之间才能通信。RocketMQ 集群需要两个组件:NameServer 和 Broker。 启动 NameServer 容器: $ docker run --name rmqnamesrv -p 9876:9876 -d rocketmq:4.3.2 sh mqnamesrv 启动 Broker 容器: $ docker run --name rmqbroker -p 10911:10911 -p 10909:10909 \ -e "NAMESRV_ADDR=192.168.1.100:9876;192.168.1.101:9876" \ -e "JAVA_OPTS=-Duser.home=/opt" \ --link rmqnamesrv:namesrv \ -d rocketmq:4.3.2 -e "NAMESRV_ADDR" 用于指定 NameServer 的地址,并以分号分隔;-e "JAVA_OPTS" 用于指定 JAVA_HOME 路径。 第四步,测试 RocketMQ 集群 我们可以使用以下命令测试该 RocketMQ 集群是否正常: $ docker exec -it rmqbroker sh mqadmin clusterList -n namesrv:9876 输出如下: Cluster Name: DefaultCluster Cluster Status: OK 至此,我们成功搭建RocketMQ 集群RocketMQ 集群搭建十分简单,只需按照上述步骤操作即可。对于生产环境,需要更加细致地考虑配置和优化。 ### 回答3: RocketMQ是一款开源的分布式消息中间件,它使用广泛且可靠,尤其是应用在高并发场景下。而Docker则是现在非常火热的容器化技术,它可以轻松的实现RocketMQ集群部署。下面,我们将介绍如何使用Docker搭建RocketMQ集群。 首先要做的是创建一个Docker容器并安装RocketMQ容器可以复制多个并形成集群。在这个过程中,我们可以使用开源的RocketMQ容器来作为我们的基础镜像。我们可以使用docker pull指令从docker hub拉取RocketMQ官方镜像,然后运行docker run命令将容器启动起来。启动容器时,需要指定一些参数以方便配置RocketMQ。例如: docker run -d --name rmqnamesrv --restart=always -p 9876:9876 -v /mnt/docker/namesrv/logs:/root/logs -e "MAX_POSSIBLE_HEAP=100000000" -e "JAVA_OPT_EXT=-server -Xms512m -Xmx512m -Xmn256m" rocketmqinc/rocketmq:4.3.2 sh mqnamesrv 该命令意味着我们正在创建一个名为rmqnamesrv的容器,并将容器的5672端口映射到宿主机的5672端口,还为容器设置了一个存储卷用于存储RocketMQ的日志,以及设置了Java运行参数等。 类似于namesrv容器,我们还可以使用该命令创建broker容器,以实现RocketMQ集群,我们可以在同一台主机上启动多个容器,也可以在多台主机上启动多个容器,并连接它们的端口,从而实现分布式部署模式。 接下来,我们需要进行配置操作,通过修改配置文件来允许程序在集群环境中工作。例如修改broker的配置文件broker.conf,配置完后需要将该文件映射到相关容器中,以使配置生效。 最后,我们需要将Docker配置成依据我们指定的规则,在多个容器之间启动和停止,从而使整个集群能够随时运行和维护。这意味着我们需要创建脚本和服务来管理容器的启动和停止,并处理容器之间的通信,以此表现Docker的自动化管理。这可以通过Docker Compose来实现,该工具使我们能够启动和停止多个容器,并将它们组织成服务。 总之,通过使用Docker搭建RocketMQ集群,使得我们不必关心繁琐的安装和配置过程,它简化了部署,增强了系统的可维护性和可扩展性。当然,要加强对DockerRocketMQ的学习,熟悉更多命令和配置以适应不同场景下的构建。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值