当前位置: 首页 > article >正文

Docker搭建RocketMQ

Docker搭建RocketMQ

操作系统: CentOS 7 x64

版本号: CentOS Linux release 7.9.2009 (Core)

IP地址: 192.168.157.130

Docker 信息:

Client: Docker Engine - Community
Version:           24.0.7
API version:       1.43
Go version:        go1.20.10
Git commit:        afdd53b
Built:             Thu Oct 26 09:11:35 2023
OS/Arch:           linux/amd64
Context:           default

Server: Docker Engine - Community
Engine:
Version:          24.0.7
API version:      1.43 (minimum version 1.12)
Go version:       go1.20.10
Git commit:       311b9ff
Built:            Thu Oct 26 09:10:36 2023
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.6.24
GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
runc:
Version:          1.1.9
GitCommit:        v1.1.9-0-gccaecfc
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

1.准备工作

  1. 先准备配置目录和持久化目录,举个栗子:

    # 创建 RocketMQ 的 NameServer 和 Broker 配置及持久化目录
    mkdir -p /opt/module/rocketmq/namesrv/logs
    mkdir -p /opt/module/rocketmq/broker-master/{conf,logs,store}
    
  2. 设置目录权限,避免容器内无法写入日志文件:

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

2.创建容器共享网络

RocketMQ 中有多个服务,需要创建多个容器,创建 docker 网络便于容器间相互通信。

#Docker创建网络
#docker network create <network_name>
docker network create rocketmq-network

3.拉取官方RocketMQ镜像

# 拉取指定版本的 RocketMQ 镜像
docker pull apache/rocketmq:4.9.6
docker pull apache/rocketmq:5.3.1

# 拉取 RocketMQ Dashboard 镜像
docker pull apacherocketmq/rocketmq-dashboard:latest

# 拉取最新版 RocketMQ 镜像
docker pull apache/rocketmq

4.创建配置文件

这个是生产环境配置文件

进入 /opt/module/rocketmq/broker-master/conf 目录,创建并编辑 broker.conf 配置文件:

cd /opt/module/rocketmq/broker-master/conf
touch broker.conf
vim broker.conf

broker.conf 配置内容:

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
# broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-master
# 0表示Master,大于0表示不同的slave
brokerId = 0
# 表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
# 在磁盘上保留消息的时长,单位是小时
fileReservedTime = 72
# 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
# 刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址(这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这种,主节点需要配置ip1和ip2,从节点只需要配置ip1即可)
# 此ip由使用环境决定 本机使用 127 局域网使用 192 外网使用 外网ip
# 设置broker节点所在服务器的ip地址(公网IP),linux系统下,使用ifconfig 查一下你的主机ip,win系统下,用ipconfig查一下你的主机ip
brokerIP1 = 192.168.157.130
# nameServer地址,分号分割
#namesrvAddr = 127.0.0.1:9876
# Broker 对外服务的监听端口,
listenPort = 10911
# 是否允许Broker自动创建Topic ( 建议线下开启,线上关闭 !!! )
autoCreateTopicEnable = true
# 是否允许 Broker 自动创建订阅组 ( 建议线下开启,线上关闭 !!! )
autoCreateSubscriptionGroup = true
# linux开启epoll
useEpollNativeSelector = true
# 补充
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full diskMaxUsedSpaceRatio=95
#diskMaxUsedSpaceRatio = 95

设置文件权限,确保 RocketMQ 容器可以访问配置和存储目录:

# 设置目录权限
chmod -R 777 /opt/module/rocketmq

5.启动NameServer

启动 NameServer 容器:

docker run -d \
  -p 9876:9876 \
  -v /opt/module/rocketmq/namesrv/logs:/home/rocketmq/logs \
  -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn256M" \
  -e "MAX_POSSIBLE_HEAP=100000000" \
  --name rmqnamesrv \
  --net rocketmq-network \
  --restart=always \
  apache/rocketmq:4.9.6 sh mqnamesrv

# 验证NameServer是否启动成功
docker logs -f rmqnamesrv

验证:
如果启动成功,你会看到日志中出现 The Name Server boot success..

6.启动 Broker

NameServer 启动成功后,再启动 Broker 容器,使用 broker.conf 配置文件。

# 配置 Broker 的 IP 地址【测试环境中使用】
cd /opt/module/rocketmq/broker-master/conf
echo "brokerIP1=192.168.157.130" > broker.conf

# 启动 Broker
docker run -d \
  -p 10912:10912 -p 10911:10911 -p 10909:10909 \
  -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn256M" \
  -e "NAMESRV_ADDR=rmqnamesrv:9876" \
  -v /opt/module/rocketmq/broker-master/conf/broker.conf:/home/rocketmq/rocketmq-4.9.6/conf/broker.conf \
  -v /opt/module/rocketmq/broker-master/store:/home/rocketmq/store \
  -v /opt/module/rocketmq/broker-master/logs:/home/rocketmq/logs \
  --net rocketmq-network \
  --name rmqbroker \
  --restart=always \
  apache/rocketmq:4.9.6 sh mqbroker \
  -c /home/rocketmq/rocketmq-4.9.6/conf/broker.conf

# 验证 Broker 是否启动成功
docker logs rmqbroker

验证:
启动成功后,你会看到日志中显示 The broker boot success..

✨备注

至此,一个单节点副本的 RocketMQ 集群已经部署起来了,我们可以利用脚本进行简单的消息收发。

7.启动 RocketMQ Dashboard

RocketMQ Dashboard 用于监控和管理 RocketMQ 集群。

# 拉取 Dashboard 镜像
docker pull apacherocketmq/rocketmq-dashboard:latest

# 启动 Dashboard
docker run -d \
  -p 8080:8080 \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876" \
  --net rocketmq-network \
  --name rocketmq-dashboard \
  --restart=always \
  -t apacherocketmq/rocketmq-dashboard:latest

8.查看启动日志

查看 NameServer 和 Broker 的日志:

#docker logs [服务id/服务名]
docker logs rmqnamesrv
docker logs rmqbroker

docker logs -f -t --tail 20 rmqnamesrv
docker logs -f -t --tail 20 rmqbroker

9.查看防火墙【开放端口】

# 查询端口是否开放
firewall-cmd --query-port=9876/tcp
firewall-cmd --query-port=10911/tcp
firewall-cmd --permanent --remove-port=19876/tcp

# 开通 9876 (NameServer), 10911 (Broker监听端口), 19876 (备用端口)
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --zone=public --add-port=19876/tcp --permanent

# 移除端口
firewall-cmd --permanent --remove-port=9876/tcp
firewall-cmd --permanent --remove-port=10911/tcp
firewall-cmd --permanent --remove-port=19876/tcp

# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 查看已经开发那些端口
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports

10.进入RocketMQ容器内部

docker ps     # 查看正在运行的容器,并得到 容器id

# 进入容器内部
docker exec -it [容器id] /bin/bash  # 中间那个是容器id 就是 CONTAINER_ID
#  -it 表示进入
docker exec -it rmqnamesrv bash
docker exec -it rmqnamesrv /bin/bash

docker exec -it rmqbroker bash
docker exec -it rmqbroker /bin/bash
# 使用 命令别名 开启 ll命令
cat <<EOF >> /etc/profile
alias ll='ls -l --color=tty'
alias grep='grep --color=auto'
EOF

source /etc/profile

11.测试生产与消费

进入 Broker 容器并使用 tools.sh 测试消息的生产和消费。

# 进入 Broker 容器
docker exec -it rmqbroker bash

# 测试生产者
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

# 测试消费者
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

12.卸载 RocketMQ

#停止RocketMQ服务(也可以停止其他)
#docker stop [容器id/容器名]
docker stop rmqnamesrv
docker stop rmqbroker
docker stop rocketmq-dashboard

#删除RocketMQ服务(也可以删除其他)
#docker rm [服务id/服务名]
docker rm rmqnamesrv
docker rm rmqbroker
docker rm rocketmq-dashboard

#删除RocketMQ镜像
#docker rmi [镜像id/镜像名]
docker rmi rmqnamesrv
docker rmi rmqbroker
docker rmi rocketmq-dashboard

#删除rocketmq-net网络
docker network rm rocketmq-net

http://www.kler.cn/a/459981.html

相关文章:

  • Docker安装(Docker Engine安装)
  • MySQL 03 章——基本的SELECT语句
  • 《计算机网络》(B)复习
  • 走进深圳华为总部参观研学
  • vscode 多项目冲突:进行 vscode 工作区配置
  • 移动端如何实现上拉加载
  • 基于源码剖析:深度解读JVM底层运行机制
  • CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)
  • Unity3D仿星露谷物语开发11之添加Scenary Fader
  • 离线语音识别+青云客语音机器人(幼儿园级别教程)
  • Python基础--conda使用
  • 红黑树C/CPP
  • 【ES6复习笔记】对象方法扩展(17)
  • 一个复杂的SQL分析
  • FlaskAPI-交互式文档与includ_router
  • node.js之---事件驱动编程
  • 解决k8s部署dashboard时一直处于Pending状态的问题
  • Kotlin 协程基础知识总结一 —— 挂起、调度器与结构化并发
  • 微信小程序 覆盖组件cover-view
  • Vue.js 使用 Vue CLI 创建项目:快速上手指南
  • 【蓝桥杯选拔赛真题85】python摆放箱子 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • 2-6-1-1 QNX编程入门之进程和线程(六)
  • Linux的诞生与发展、体系结构与发行版本
  • Android使用JAVA调用JNI原生C++方法
  • 【Spark】架构与核心组件:大数据时代的必备技能(上)
  • 【VBA】EXCEL - VBA 遍历工作表的 5 种方法,以及注意事项