0.基础准备
jdk1.8下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
maven 下载地址:
http://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
rocketmq-4.3.2下载地址:
https://github.com/apache/rocketmq/archive/rocketmq-all-4.3.2.tar.gz
rocketmq-console下载:
https://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.zip
配置maven镜像仓库地址:
1 | <mirrors> |
参考资料(rocketmq集群介绍):
https://blog.csdn.net/leexide/article/details/80035470
https://roc-wong.github.io/blog/2018/11/RocketMQ-at-a-glance.html
关闭防火墙:
1 | systemctl stop firewalld |
1.RocketMQ 集群环境搭建
1.1 RocketMQ编译
java,maven环境变量首先配置正确。
然后更改本地maven的镜像仓库地址,最后进入到RocketMQ的源代码文件夹中,执行编译
1 | mvn -Prelease-all -DskipTests clean install -U |
执行完后,将 rocketmq-rocketmq-all-4.3.2/distribution/target 目录下的 apache-rocketmq 文件夹 copy 到 /opt 或应用存放的目录中。
1.2 更改默认的JVM配置
修改namesrv的配置:
1 | vim bin/runserver.sh |
修改broker的配置:
1 | vim /bin/runbroker.sh |
1.3 broker配置修改
broker的配置文件在 config/broker.conf中,其中 config/2m-2s-async 为多Master多Slave模式(异步复制)集群配置,config/2m-2s-sync为多Master多Slave模式(同步双写)集群配置,config/2m-noslave 为多Master集群。每种集群模式的优缺点见参考资料。
每种配置的关键配置项,如下:
1 | #集群名称(相同名称的brokerName,根据brokerId来区别主从) |
以上内容修改完毕后,还需要添加以下配置:
1 | # Broker的IP地址 |
1.4 启动namesrv,broker
启动namesrv:
1 | nohup sh bin/mqnamesrv > /dev/null 2>&1 & |
查看日志:
1 | tail -f ~/logs/rocketmqlogs/namesrv.log |
启动broker:
方式一:手动指定namesrv地址:1
nohup sh bin/mqbroker -n localhost:9876 > /dev/null 2>&1 &
方式二:指定配置文件(推荐):1
nohup sh bin/mqbroker -c conf/broker.conf > /dev/null 2>&1 &
查看日志:
1 | tail -f ~/logs/rocketmqlogs/broker.log |
1.5 停止namesrv,broker
1 | sh bin/mqshutdown namesrv |
1.6 测试Producer,Consumer
首先设置namesrv的地址
1 | export NAMESRV_ADDR=localhost:9876 |
测试发送消息:
1 | sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer |
测试接受消息:1
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
1.7 mqadmin功能一览
1 | # sh bin/mqadmin |
1.8 broker.conf主要配置
1 | #===================主要配置=============== |
2.Docker使用指南
2.1 docker常用命令
1 | yum install -y docker //安装docker |
1 | docker ps -a //检查docker运行状态 |
1 | docker images //查看本地镜像列表 |
2.2 编辑docker仓库地址
编辑仓库地址: vim /etc/docker/daemon.json
1 | { |
参数详细说明:https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-user-namespace-options
2.3 获取基础镜像
1 | docker pull 10.29.139.47:5001/base/java |
从docker hub上获取centos基础镜像
1 | docker pull centos:latest |
2.4 docker run 启动容器
启动容器
1 | docker run ... |
–name:容器实例名称
–privileged:使用该参数,container内的root拥有真正的root权限。
-td:后台运行容器(–tty,–detach)
-it 创建一个交互式的容器
-p 映射端口(本机的端口:映射的容器的端口)
-v 挂载目录/root/software:/software(本地目录:容器目录),在创建前容器是没有software目录的,docker 容器会自己创建
–privileged=true 关闭安全权限,否则你容器操作文件夹没有权限
资源限制:
–ulimit memlock=-1:容器使用内存不受限制
1 | docker容器资源限制默认: |
网络设置:
–net:网络指定
1 | docker容器网络选择: |
使用示例:
启动镜像,指定端口映射:
1 | docker run --name rocketmq-tmp -p 98761:98761 --privileged --ulimit memlock=-1 --net=host -td rockemq-base1 /usr/sbin/init |
启动一个镜像,映射目录:1
docker run -it -p 8070:8080 -v /root/software:/software --privileged=true docker.io/centos /bin/bash
2.5 docker exec 进入容器
方式一:exec
1 | docker exec -it kungfu-devel bash |
方式二:attach
注意:如果从这个stdin中exit,会导致容器的停止。
1 | docker attach cd24b1147c40 |
2.6 docker commit 保存镜像
保存镜像:1
docker commit afcaf46e8305 rocketmq-cluster
查看镜像的详细信息:
1 | docker inspect centos-vim:afcaf46e8305 |
2.6 docker push 推送镜像到远端
标记与推送:1
2
3 docker tag docker.io/centos 10.29.139.47:5001/jiagou_registry/centos7
docker push 10.29.139.47:5001/jiagou_registry/centos7
需要先登录:
1 | docker login -u你的docker账号 -p你的docker密 |
2.7 docker build 从dockerfile构建镜像
1 | docker build -t image_name -f ./Dockerfile . |
3.使用Docker搭建RocketMQ集群
3.1 构建基础镜像 rocketmq:base
1.拉取基础镜像
docker pull centos:latest
docker tag docker.io/centos 10.29.139.47:5001/jiagou_registry/centos7
docker tag 10.29.139.47:5001/jiagou_registry/centos7 centos7
2.启动容器
docker run –name rocketmq –privileged –ulimit memlock=-1 -v /root/soft:/data/soft –net=host -td centos7 /usr/sbin/init
3.在容器中配置java,maven环境
1 | JAVA_HOME=/opt/jdk1.8.0_191 |
4.编译rocketmq代码,将编译过后的文件copy到/opt下,最终rocketmq的路径为:/opt/apache-rocketmq
5.在/opt/apache-rocketmq/config/目录下,创建namesrv.conf配置文件
1 | vim namesrv.conf |
6.修改.bashrc文件
1 | vim ~/.bashrc |
7.保存镜像
在centos7的容器中,执行exit方法,退出容器
查看刚才容器的id
1 | docker ps -a |
保存,
1 | docker commit d4bd7510bdb2 rocketmq:base |
3.2 构建namesrv镜像 rocketmq:namesrv
创建目录:/root/dockerfiles/rocketmq-namesrv,进入目录执行,
1 | vim Dockerfile |
在Dockerfile的目录下,执行
1 | docker build -t rocketmq:namesrv -f ./Dockerfile . |
3.3 构建broker镜像 rocketmq:broker
创建目录:/root/dockerfiles/rocketmq-broker,进入目录执行,
1 | vim Dockerfile |
在Dockerfile的目录下,执行
1 | docker build -t rocketmq:broker -f ./Dockerfile . |
3.4 启动namesrv
1 | docker run -d -p 9877:9877 --name rmqnamesrv rocketmq:namesrv |
3.5 启动broker
创建以下配置目录:
/opt/mqconfig/broker-a-config/broker.conf
1 | vim broker.conf |
/opt/mqconfig/broker-a-s-config/broker.conf
1 | vim broker.conf |
/opt/mqconfig/broker-b-config/broker.conf
1 | vim broker.conf |
/opt/mqconfig/broker-b-s-config/broker.conf
1 | vim broker.conf |
启动master-a:1
docker run -d -p 20911:20911 -p 20909:20909 -v=/opt/mqconfig/broker-a-config:/config --name rmqbroker-a rocketmq:broker
启动slave-a:1
docker run -d -p 30911:30911 -p 30909:30909 -v=/opt/mqconfig/broker-a-s-config:/config --name rmqbroker-a-s rocketmq:broker
启动master-b:1
docker run -d -p 40911:40911 -p 40909:40909 -v=/opt/mqconfig/broker-b-config:/config --name rmqbroker-b rocketmq:broker
启动slave-b:1
docker run -d -p 50911:50911 -p 50909:50909 -v=/opt/mqconfig/broker-b-s-config:/config --name rmqbroker-b-s rocketmq:broker
3.6 启动console
拉取镜像:
1 | docker pull styletang/rocketmq-console-ng |
启动容器,指定–link,-p
1 | docker run -d -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false" --link rmqnamesrv:rmqnamesrv -p 8080:8080 --name rmqconsole -t docker.io/styletang/rocketmq-console-ng |
3.7 检查服务状态
查看容器状态:
1 | docker ps -a |
浏览器访问:



4.docker瘦身
参考网址: