1、创建namesrv服务
(1)拉取镜像
docker pull rocketmqinc/rocketmq
(2)创建一个数据目录
即创建一个namesrv数据存储路径
mkdir -p /docker/rocketmq/nameserver/logs /docker/rocketmq/nameserver/store
(3)构建namesrv容器
docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v /docker/rocketmq/nameserver/logs:/root/logs -v /docker/rocketmq/nameserver/store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv
(4)参数说明
参数 | 说明 |
---|---|
-d | 以守护进程的方式启动 |
- -restart=always | docker重启时候容器自动重启 |
- -name rmqnamesrv | 把容器的名字设置为rmqnamesrv |
-p 9876:9876 | 把容器内的端口9876挂载到宿主机9876上面 |
-v /docker/rocketmq/nameserver/logs:/root/logs | 目录挂载 |
-v /docker/rocketmq/nameserver/store | 目录挂载 |
rmqnamesrv | 容器的名字 |
-e “MAX_POSSIBLE_HEAP=100000000” | 设置容器的最大堆内存为100000000 |
rocketmqinc/rocketmq | 使用的镜像名称 |
sh mqnamesrv | 启动namesrv服务 |
2、创建broker节点
(1)创建broker.conf配置文件
我的目录是/opt/docker/rocketmq/broker.conf,文件内容如下:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 127.0.0.1:9876
brokerIP1 = 主机的IP
注意:brokerIP1中的IP一定要大写
(2)构建broker容器
docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 --privileged=true -v /docker/rocketmq/data/broker/logs:/root/logs -v /docker/rocketmq/data/broker/store:/root/store -v /docker/rocketmq/conf/broker.conf:/opt/docker/rocketmq/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker -c /opt/docker/rocketmq/broker.conf
(3)参数说明
参数 | 说明 |
---|---|
-d | 以守护进程的方式启动 |
- -restart=always | docker重启时候容器自动重启 |
- -name rmqbroker | 把容器的名字设置为rmqbroker |
- --link rmqnamesrv:namesrv | 和rmqnamesrv容器通信 |
-p 9876:9876 | 把容器内的端口9876挂载到宿主机9876上面 |
-p 10909:10909 | 把容器的vip通道端口挂载到宿主机 |
-e “NAMESRV_ADDR=namesrv:9876” | 指定namesrv的地址为本机namesrv的ip地址:9876 |
-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker | 指定broker服务的最大堆内存 |
rocketmqinc/rocketmq | 使用的镜像名称 |
sh mqbroker -c /opt/docker/rocketmq/broker.conf | 指定配置文件启动broker节点 |
(4)注意事项
a、如果报下图错误,则需要重新启动docker
systemctl restart docker
b、如果遇到下图错误
解决方法一:
在编写borker.conf文件的时候,使用的不是vim命令。使用的时候centos的文本编辑器编写的。删除掉之后,通过vim命令重新编写。保存后,可能会解决问题。博主不是这个原因,大家也可以参考解决方法二
解决方法二:
大家则需要将下图路径1修改为路径2,即路径1和路径2一样
3、创建rockermq-console服务即安装控制台
(1)拉取镜像
docker pull pangliang/rocketmq-console-ng
(2)构建rockermq-console容器即启动控制台
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=自己的IP:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 pangliang/rocketmq-console-ng
(3)参数说明
参数 | 说明 |
-d | 以守护进程的方式启动 |
-restart=always | docker重启时候镜像自动重启 |
-name rmqadmin | 把容器的名字设置为rmqadmin |
-e “JAVA_OPTS=-Drocketmq.namesrv.addr=自己的IP:9876 | 设置namesrv服务的ip地址 |
Dcom.rocketmq.sendMessageWithVIPChannel=false | 不使用VIP通道发送消息 |
–p 8080:8080 | 把容器内的端口8080挂载到宿主机上的9999端口 |
(4)访问控制台
打开浏览器访问 http://IP:8080
(5)注意事项
需要关闭防火墙或者开放namesrv和broker端口,控制台服务将无法访问namesrv服务
异常信息如下:org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to failed
关闭防火墙
systemctl stop firewalld.service
开放指定端口
firewall-cmd --permanent --zone=public --add-port=9876/tcp
firewall-cmd --permanent --zone=public --add-port=10911/tcp
# 立即生效
firewall-cmd --reload
如果是云服务器的话还需要大家在安全组开放端口