一、引言
RocketMQ 是一款开源的分布式消息队列系统,具有低延迟、高并发、高可用等特性,在分布式系统中广泛用于异步解耦、流量削峰等场景。RocketMQ Dashboard 则为用户提供了可视化的管理界面,方便监控和管理 RocketMQ 集群。本文档详细介绍如何使用 Docker 部署 RocketMQ 及其 Dashboard,并对相关容器进行管理。
二、部署前准备
在开始部署之前,需要确保服务器上已经安装了 Docker。如果尚未安装,请根据服务器的操作系统类型,参考 Docker 官方文档进行安装。
三、创建数据目录并设置权限
- 创建目录:在服务器上执行以下命令,创建用于存储 RocketMQ 日志和数据的目录。
mkdir -p /data/rocketmq/{logs,store}
mkdir -p
中的-p
参数用于递归创建目录,如果父目录不存在,会一并创建。此命令创建了/data/rocketmq/logs
和/data/rocketmq/store
两个目录,分别用于存放日志和数据。
- 设置权限:为了让 Docker 容器能够顺利读写这些目录,需要赋予它们足够的权限。
chmod -R 777 /data/rocketmq
chmod -R 777 /data/rocketmq
中的-R
表示递归修改权限,777
代表所有用户(所有者、所属组、其他用户)都具有读、写、执行权限。
四、启动 RocketMQ NameServer 容器
执行以下命令启动 NameServer 容器:
docker run -d \
--name rmqnamesrv \
-p 9876:9876 \
-v /data/rocketmq/logs:/root/logs \
-v /data/rocketmq/store:/root/store \
apache/rocketmq:latest \
sh mqnamesrv
-d
:使容器在后台运行,不占用当前终端会话。--name rmqnamesrv
:为容器命名为rmqnamesrv
,方便后续管理和识别。-p 9876:9876
:将容器内的 9876 端口映射到宿主机的 9876 端口,外部可以通过宿主机的 IP 和 9876 端口访问 NameServer 服务。-v /data/rocketmq/logs:/root/logs
和-v /data/rocketmq/store:/root/store
:这两个参数分别将宿主机的/data/rocketmq/logs
和/data/rocketmq/store
目录挂载到容器内的/root/logs
和/root/store
目录,实现数据持久化,容器重启后数据不会丢失。apache/rocketmq:latest
:指定使用最新版本的 RocketMQ 官方 Docker 镜像。sh mqnamesrv
:在容器内执行启动 NameServer 的脚本。
五、启动 RocketMQ Broker 容器
运行以下命令启动 Broker 容器:
docker run -d \
--name rmqbroker \
-p 10909:10909 \
-p 10911:10911 \
-v /data/rocketmq/logs:/root/logs \
-v /data/rocketmq/store:/root/store \
-e "NAMESRV_ADDR=ip:9876" \
-e "JAVA_OPT_EXT=-Xms256m -Xmx256m -Xmn128m" \
apache/rocketmq:latest \
sh mqbroker -n ip:9876
- 部分参数与启动 NameServer 容器时类似,如
-d
、--name
、-v
、apache/rocketmq:latest
。 -p 10909:10909
和-p 10911:10911
:分别将容器内的 10909 和 10911 端口映射到宿主机,10909 端口用于 Broker 与 Producer、Consumer 之间的通信,10911 端口用于 Broker 与 NameServer 之间的通信。-e "NAMESRV_ADDR=ip:9876"
:设置 NameServer 的地址,让 Broker 能够连接到 NameServer 进行注册和通信。-e "JAVA_OPT_EXT=-Xms256m -Xmx256m -Xmn128m"
:设置容器内 JVM 的堆内存参数,-Xms256m
表示初始堆大小为 256MB,-Xmx256m
表示最大堆大小为 256MB,-Xmn128m
表示新生代大小为 128MB。sh mqbroker -n ip:9876
:在容器内执行启动 Broker 的脚本,并指定 NameServer 的地址。
六、启动 RocketMQ Dashboard 容器
执行以下命令启动 Dashboard 容器:
docker run -d \
--name rmq-dashboard \
-p 9999:8080 \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=ip:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
apacherocketmq/rocketmq-dashboard:latest
-d
、--name
参数作用同上。-p 9999:8080
:将容器内的 8080 端口映射到宿主机的 9999 端口,用户可以通过宿主机 IP 和 9999 端口访问 Dashboard 的 Web 界面。-e "JAVA_OPTS=-Drocketmq.namesrv.addr=ip:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
:设置 Dashboard 连接 NameServer 的地址,并关闭 VIP 通道(在一些网络环境下,关闭 VIP 通道可以避免连接问题)。apacherocketmq/rocketmq-dashboard:latest
:使用最新版本的 RocketMQ Dashboard 官方 Docker 镜像。
七、查看容器日志
在部署和运行过程中,查看容器日志有助于排查问题。可以使用以下命令分别查看 NameServer、Broker 和 Dashboard 容器的日志:
docker logs -f rmqnamesrv
docker logs -f rmqbroker
docker logs -f rmq-dashboard
-f
参数表示持续跟踪日志输出,就像使用tail -f
命令查看文件日志一样,新产生的日志会实时显示在终端上。
八、停止并删除容器
当不再需要 RocketMQ 及其 Dashboard 服务时,可以停止并删除相关容器:
- 停止并删除 Dashboard 容器:
docker stop rmq-dashboard
docker rm rmq-dashboard
docker stop
命令用于停止正在运行的容器,docker rm
命令用于删除已停止的容器。
- 停止并删除 Broker 容器:
docker stop rmqbroker
docker rm rmqbroker
- 停止并删除 NameServer 容器:
docker stop rmqnamesrv
docker rm rmqnamesrv
九、总结
通过以上步骤,我们可以使用 Docker 快速部署 RocketMQ 及其 Dashboard,实现消息队列系统的搭建和可视化管理。在实际应用中,可以根据业务需求对配置参数进行调整和优化,以满足不同场景下的性能和功能要求。同时,定期查看容器日志和监控系统运行状态,有助于及时发现和解决潜在问题,保障系统的稳定运行。