使用docker搭建RocketMQ(非集群搭建官方镜像)

之前在使用 RocketMQ 官方的包在搭建的时候,发现好多问题,什么修改内存大小,然后启动 broker 报错,类似 service not available now, maybe disk full 等等… 最后决定还是重新用 docker 搭建下,感觉这样子玩坏了,可以直接把容器干掉,重新启动一个新的容器,毕竟是在学习阶段,这样子快好多。

废话不多说,现在开始搭建。

具体搭建流程

前提说明,由于之前使用非 docker 搭建的时候会出现各种内存不足的情况(因为那个虚拟机上面还搭建了其他好多东西),所以这次我是新创建了一个虚拟机,专门用来搭建 RocketMQ。
虚拟机

第一步:下载官方镜像

可以去官网看下最新的镜像 apache/rocketmq Tags | Docker Hub, 我这里使用的是最新的。

docker pull apache/rocketmq

apace rocketmq

第二步:部署 NameServer

创建挂载文件夹

# 日志目录
mkdir /apps/rocketmq/nameserver/logs -p
# 保存路劲
mkdir /apps/rocketmq/nameserver/store -p

设置权限

# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /apps/rocketmq/nameserver/*

启动 namesrv 容器

docker run -d \
--privileged=true \
--name rmqnamesrv \
-p 9876:9876 \
-v /apps/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /apps/rocketmq/nameserver/store:/root/store \
-e "MAX_HEAP_SIZE=256M" \
-e "HEAP_NEWSIZE=128M" \
-e "MAX_POSSIBLE_HEAP=100000000" \
apache/rocketmq sh mqnamesrv

第三步:部署 broker

创建挂载文件夹

# 创建需要的挂载目录
mkdir /apps/rocketmq/broker/logs -p \
mkdir /apps/rocketmq/broker/data -p \
mkdir /apps/rocketmq/broker/store -p \
mkdir /apps/rocketmq/broker/conf -p

设置权限

# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /apps/rocketmq/broker/*

创建 broker.conf

vi /apps/rocketmq/broker/conf/broker.conf

添加以下配置信息到 broker.conf,这里不对参数做过多的说明,在下面Broker配置详解中有对Broker常用参数做详细介绍:
下面需要修改对应的 brokerIP1 地址!!!

# 集群名称
brokerClusterName=DefaultCluster
# 节点名称
brokerName=broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId=0
# Broker服务地址    String    内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1=192.168.148.129
# Broker角色
brokerRole=ASYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen=04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime=72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95

启动 broker

docker run -d \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 -p 10909:10909 \
--privileged=true \
-v /apps/rocketmq/broker/logs:/root/logs \
-v /apps/rocketmq/broker/store:/root/store \
-v /apps/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-e "MAX_POSSIBLE_HEAP=200000000" \
-e "MAX_HEAP_SIZE=512M" \
-e "HEAP_NEWSIZE=256M" \
-e "NAMESRV_ADDR=namesrv:9876" \
apache/rocketmq \
sh mqbroker -c /home/rocketmq/broker.conf

最后一行参数说明

  • sh mqbroker -c /home/rocketmq/broker.conf 启动 broker 服务 使用自定义配置文件。

到此,RocketMQ 就算搭建完了,下面我们来打个搭建一个监控看看。

第四步:搭建监控

下载镜像

docker pull apacherocketmq/rocketmq-dashboard:latest

启动容器

这里地址是我们上面对应的 nameserver 所在机器的 IP

docker run -p 8087:8080 --name rocketmq-console -d \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.148.129:9876" \
-t apacherocketmq/rocketmq-dashboard

最后搞完的截图
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答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的学习,熟悉更多命令和配置以适应不同场景下的构建。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wayfreem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值