docker环境下搭建rocketmq集群

rocketmq是一个分布式消息中间件,分布式的意思就是多台机器可以通过网络连接协同工作,因此rocketmq可以运行在多台机器上,以达到超越单机的服务能力。rocketmq的架构图如下所示

docker环境下搭建rocketmq集群_第1张图片

我们首先搭建一个最小的rocketmq集群,需要启动一个nameserver和一个broker。

这里我们选择在linux下使用docker来搭建集群,我们需要启动三个容器

首先需要拉取三个镜像

docker pull foxiswho/rocketmq:server-4.5.1
docker pull foxiswho/rocketmq:broker-4.5.1
docker pull apacherocketmq/rocketmq-dashboard

上面两个分别对应nameserver结点和broker结点,这里简单介绍一下,nameserver结点有点像服务注册和发现中心,broker结点就是实际干活的结点,dashboard是一个可视化的监控页面,可以让我们非常方便地监控rocketmq的工作情况。

(31条消息) 使用docker安装RocketMQ_docker rocketmq_皓亮君的博客-CSDN博客

你也可以像上面这篇文章一样拉取一个镜像启动server和broker,但是我没有成功,然后按照下面这篇文章的思路成功了

(31条消息) docker安装启动rocketMQ遇到的坑 broker内网_rmqbroker_陈晓东1024的博客-CSDN博客

文章说拉取的镜像是foxiswho/rocketmq,其实不是的,拉取的就是我上面写的两个不同tag的镜像。

接着就是创建并启动三个容器。

首先是server结点

docker run -d -p 9876:9876 --name rmqserver  foxiswho/rocketmq:server-4.5.1

 如果你没有下载相应镜像的话会自动下载。

然后是broker结点

docker run -d -p 10911:10911 -p 10909:10909\
 --name rmqbroker --link rmqserver:namesrv\
 -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt"\
 -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m"\
 foxiswho/rocketmq:broker-4.5.1

这里面 -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" 是设置jvm的参数,根据你的机器性能来决定,具体的参数设置可以参考下面的文章

(31条消息) java虚拟机(JVM)内存设置_java运行内存设置_阿里官方架构师的博客-CSDN博客

最后就是启动可视化程序

docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=【替换成你的server结点的ip地址】:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
apacherocketmq/rocketmq-dashboard

在启动成功后到web控制台可以看到broker信息

docker环境下搭建rocketmq集群_第2张图片

 

这里还有一个坑,就是broker的ip地址,可以看到ip地址是172.17.0.3,ping一下这个ip地址会发现根本ping不通。

docker环境下搭建rocketmq集群_第3张图片

我们需要进入到容器中去修改配置文件

docker exec -it rmqbroker /bin/bash

需要给 /etc/rocketmq/broker.conf 添加两行数据

docker环境下搭建rocketmq集群_第4张图片

其中ip地址就是你的主机可以访问的ip地址。

由于我没有找到在docker容器运行的时候重新加载配置文件的方法,因此我使用先删除容器,然后创建容器的时候将外部的文件挂载到容器内的方法来接在配置文件。

首先在外面创建一个配置文件,内容和上面截图的一样,就是你在启动broker的时候需要加载的配置文件。然后停止并删除容器

docker container stop rmqbroker
docker rm rmqbroker

 然后在使用下面的命令创建并且运行容器

docker run -d -p 10911:10911 -p 10909:10909\
 --name rmqbroker --link rmqserver:namesrv\
 -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt"\
 -e "JAVA_OPT_EXT=-server -Xms1g -Xmx2g"\
 -v /usr/docker/conf/broker.conf:/etc/rocketmq/broker.conf\
 foxiswho/rocketmq:broker-4.5.1

其中 /usr/docker/conf/broker.conf 就是保存容器外的配置文件,/etc/rocketmq/broker.conf 就是容器内的配置文件,接下来就是见证奇迹的时刻

docker环境下搭建rocketmq集群_第5张图片

 

这里顺便提一下,如果连server结点都连接不上,可以使用下面的命令关闭防火墙

iptables -F

最后可以将容器的开启与结束命令都写到一个脚本文件里,这样运行一个脚本就可以启停容器了。

docker环境下搭建rocketmq集群_第6张图片

你可能感兴趣的:(中间件,java-rocketmq,rocketmq,java)