Docker部署RocketMQ集群

2023-05-16

一、概述

Apache RocketMQ是阿里开源的一款高性能、高吞吐量、队列模型的消息中间件的分布式消息中间件。

关于RocketMQ集群架构的详细介绍,请参考链接:https://blog.csdn.net/Weixiaohuai/article/details/123607472

二、下载镜像

docker pull apache/rocketmq:4.9.4
docker pull apacherocketmq/rocketmq-dashboard

主要用到了2个镜像,第1个用来部署NameServer和Broker,第2个用来管理rocketmq

三、部署

本文主要采用一台服务器来部署RocketMQ集群,集群部署模式采用多master模式,也就是2个NameServer和2个Broker

刷盘机制采用异步复制,异步刷盘

服务器配置:

操作系统:centos 7.6

硬件配置:2核4g

ip地址:192.168.137.138

创建目录

mkdir -p /opt/rocketmq/logs/nameserver-a
mkdir -p /opt/rocketmq/logs/nameserver-b
mkdir -p /opt/rocketmq/logs/broker-a
mkdir -p /opt/rocketmq/logs/broker-b
mkdir -p /opt/rocketmq/store/broker-a
mkdir -p /opt/rocketmq/store/broker-b
mkdir -p /opt/rocketmq/broker-a/
mkdir -p /opt/rocketmq/broker-b/

设置权限

chmod 777 -R /opt/rocketmq/logs/*
chmod 777 -R /opt/rocketmq/store/*

注意:这里如果不设置权限,会导致docker写入文件失败,导致rocketmq启动异常。

创建broker.conf

修改第一个节点配置

vim /opt/rocketmq/broker-a/broker-a.conf

内容如下:

brokerClusterName = rocketmq-cluster
brokerName = broker-a
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 192.168.137.138
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.137.138:9876;192.168.137.138:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

注意:brokerIP1,namesrvAddr,这2个参数,一般配置为内网ip,提供内网访问。如果需要公网访问,这里一定要配置公网ip,否则无法访问。

修改第二个节点配置

vim /opt/rocketmq/broker-b/broker-b.conf

内容如下:

brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 192.168.137.138
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.137.138:9876;192.168.137.138:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10912
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
View Code

注意:brokerName,listenPort这2个参数和第一个节点不一样,其他内容和第一个节点配置一样

编写 docker-compose.yml

vim /opt/rocketmq/docker-compose.yml

内容如下:

version: '3.5'
services:
  rmqnamesrv-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-a
    ports:
      - 9876:9876
    volumes:
      #- /opt/rocketmq/logs/nameserver-a:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-a

  rmqnamesrv-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-b
    ports:
      - 9877:9876
    volumes:
      #- /opt/rocketmq/logs/nameserver-b:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-b

  rmqbroker-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-a
    ports:
      - 10911:10911
    volumes:
      #- /opt/rocketmq/logs/broker-a/logs:/home/rocketmq/logs
      #- /opt/rocketmq/store/broker-a/store:/home/rocketmq/store
      - /opt/rocketmq/broker-a/broker-a.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-a:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-a

  rmqbroker-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-b
    ports:
      - 10912:10912
    volumes:
      #- /opt/rocketmq/logs/broker-b/logs:/home/rocketmq/logs
      #- /opt/rocketmq/store/broker-b/store:/home/rocketmq/store
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-b:9877"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-b
  rmqconsole:
    image: apacherocketmq/rocketmq-dashboard
    container_name: rmqconsole
    ports:
      - 8087:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
    volumes:
      - /opt/rocketmq/console-ng/data:/tmp/rocketmq-console/data
    networks:
      rmq:
        aliases:
          - rmqconsole
networks:
  rmq:
    name: rmq
    driver: bridge
View Code

最后一步,执行docker-compose

cd /opt/rocketmq
docker-compose up -d

查看进程,使用命令docker-compose ps

# docker-compose ps
    Name                  Command               State                Ports              
----------------------------------------------------------------------------------------
rmqbroker-a    sh mqbroker -c /home/rocke ...   Up      10909/tcp,                      
                                                        0.0.0.0:10911->10911/tcp,       
                                                        10912/tcp, 9876/tcp             
rmqbroker-b    sh mqbroker -c /home/rocke ...   Up      10909/tcp, 10911/tcp,           
                                                        0.0.0.0:10912->10912/tcp,       
                                                        9876/tcp                        
rmqconsole     sh -c java $JAVA_OPTS -jar ...   Up      0.0.0.0:8087->8080/tcp          
rmqnamesrv-a   sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp,
                                                        0.0.0.0:9876->9876/tcp          
rmqnamesrv-b   sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp,
                                                        0.0.0.0:9877->9876/tcp 

确保State状态为up

访问管理平台

http://192.168.137.138:8087

点击右上角切换语言为简体中文,点击集群,效果如下:

看到这个图,说明集群启动正常。

设置持久化配置

上面的 docker-compose.yml,注释掉了一些文件挂载操作,因为新版本的rocketmq无法启动创建文件,直接挂载一个空目录,会启动报错。

复制docker里面的文件

docker cp rmqnamesrv-a:/home/rocketmq/logs /opt/rocketmq/logs/nameserver-a
docker cp rmqnamesrv-b:/home/rocketmq/logs /opt/rocketmq/logs/nameserver-b
docker cp rmqbroker-a:/home/rocketmq/logs /opt/rocketmq/logs/broker-a
docker cp rmqbroker-a:/home/rocketmq/store /opt/rocketmq/store/broker-a
docker cp rmqbroker-b:/home/rocketmq/logs /opt/rocketmq/logs/broker-b
docker cp rmqbroker-b:/home/rocketmq/store /opt/rocketmq/store/broker-b

设置权限,否则会写入文件失败,造成启动失败。

chmod 777 -R /opt/rocketmq/logs/*
chmod 777 -R /opt/rocketmq/store/*

关闭相关docker进程

docker-compose down

修改docker-compose.yml,开启持久化配置

version: '3.5'
services:
  rmqnamesrv-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-a
    ports:
      - 9876:9876
    volumes:
      - /opt/rocketmq/logs/nameserver-a:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-a

  rmqnamesrv-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-b
    ports:
      - 9877:9876
    volumes:
      - /opt/rocketmq/logs/nameserver-b:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-b

  rmqbroker-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-a
    ports:
      - 10911:10911
    volumes:
      - /opt/rocketmq/logs/broker-a/logs:/home/rocketmq/logs
      - /opt/rocketmq/store/broker-a/store:/home/rocketmq/store
      - /opt/rocketmq/broker-a/broker-a.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-a:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-a

  rmqbroker-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-b
    ports:
      - 10912:10912
    volumes:
      - /opt/rocketmq/logs/broker-b/logs:/home/rocketmq/logs
      - /opt/rocketmq/store/broker-b/store:/home/rocketmq/store
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-b:9877"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-b
  rmqconsole:
    image: apacherocketmq/rocketmq-dashboard
    container_name: rmqconsole
    ports:
      - 8087:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
    volumes:
      - /opt/rocketmq/console-ng/data:/tmp/rocketmq-console/data
    networks:
      rmq:
        aliases:
          - rmqconsole
networks:
  rmq:
    name: rmq
    driver: bridge
View Code

启动相关docker进程

docker-compose up -d

等待30秒,再次访问管理后台,如果数据能显示,表示正常。

测试

点击主题,默认是空的

点击新增

 选择集群,BROKER_NAME,输入主题名test

点击提交后,会出现一条数据,点击发送消息

 点击提交

 提示成功

 点击消息,选择主题test,点击搜索,就可以看到发送记录了。

本文参考链接:

https://www.136.la/jingpin/show-176132.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker部署RocketMQ集群 的相关文章

随机推荐

  • 自制嵌入式GUI 【前1-3篇】-基于freeRTOS

    自制GUI第4篇 xff1a https blog csdn net shungry article details 78659613 自制GUI第5篇 xff1a https blog csdn net shungry article d
  • 基于C++的PID控制器

    PID控制器是一种广泛用于各种工业控制场合的控制器 xff0c 它结构简单 xff0c 可以根据工程经验整定参数Kp Ki Kd 虽然现在控制专家提出了很多智能的控制算法 xff0c 比如神经网络 xff0c 模糊控制等 xff0c 但是P
  • 模糊PID控制算法的C++实现

    很久没有更新博客了 xff0c 今天就来讲讲模糊PID的C 43 43 实现方法 先来看一下整体的框架 xff1a 解释下上面框图的意思 xff0c 模糊PID其实是在普通PID的基础之上 xff0c 通过输入的两个变量 xff1a 误差和
  • C++ Map常见用法说明

    一 声明二 插入操作 1 使用 进行单个插入1 使用insert进行单个和多个插入 三 取值四 容量查询五 迭代器六 删除交换 1 删除2 交换 七 顺序比较八 查找九 操作符 C 43 43 中map提供的是一种键值对容器 xff0c 里
  • MEC —— 优化内存与速度的卷积计算

    本次介绍一种内存利用率高且速度较快的卷积计算方法 来自ICML2017 MEC Memory efficient Convolution for Deep Neural Network 1 背景工作 目前的CNN模型中 xff0c 全连接层
  • linux下常见版本查询操作

    系统版本查询 1 使用uname命令 打印所有版本信息 可通过uname help查看使用方法 uname xff0d span class hljs operator a span 我的 输出 xff1a Linux cvlab span
  • ubuntu 18.04 下 D435i SDK安装 ros-wapper安装 绘制rosbag 运行vins-mono离线/在线

    1 参考blog 1 D435i Ubuntu18 04使用D435i运行VINS Mono 2 RealSenseD435i xff08 一 xff09 xff1a Ubuntu18 04 下的安装 使用和bag录制 xff0c 且解决
  • 两年工作经验程序员的迷茫

    每个人都有每个人的经历 xff0c 每个程序员也有每个程序员的经历 上大学时 xff0c 读的是计算机专业 大一时 xff0c 开始学习office软件 xff0c 之后接触第一种计算机语言C语言 特别是C语言课时 xff0c 其实上课有很
  • 阿里云AccessKey ID获取方式

    1 登录到阿里云的控制台 xff0c 点击右上角的头像图标 xff0c 如下所示 xff1a 2 点击 AccessKey 管理 xff0c 展示如下 xff0c 然后点击 继续使用 xff0c 就可以申请AccessKeyID 和Acce
  • docker启动ubuntu的桌面环境

    一 概述 由于最近一段时间在家办公 xff0c 国内服务器在阿里云 xff0c 国外站点在aws 家里的移动宽带比较差 xff0c 无法访问aws 所以尝试在阿里云启动docker xff0c 找到一个lxde桌面环境的ubuntu镜像 二
  • Portainer中文汉化

    一 概述 Portainer是Docker的图形化管理工具 xff0c 提供状态显示面板 应用模板快速部署 容器镜像网络数据卷的基本操作 xff08 包括上传下载镜像 xff0c 创建容器等操作 xff09 事件日志显示 容器控制台操作 S
  • docker安装kibana

    一 概述 Kibana是一个针对Elasticsearch的开源分析及可视化平台 xff0c 用来搜索 查看交互存储在Elasticsearch索引中的数据 使用Kibana xff0c 可以通过各种图表进行高级数据分析及展示 环境说明 操
  • pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)

    一 概述 在上一篇文章中 xff0c 链接如下 xff1a https www cnblogs com xiao987334176 p 13791061 html 已经介绍了pyecharts画一些基本图形 xff0c 接下来介绍画地图 二
  • vue日期格式化

    一 概述 现有vue页面如下 xff1a 需要将日期转换为 xff1a 2020 12 25 二 实现 修改vue html部分 xff0c 应用方法dateFormat lt el table column prop 61 34 star
  • ElementUI-textarea文本域高度自适应设置的方法

    一 概述 textarea默认情况下 xff0c 当超出范围后 xff0c 会在右边显示滑动条 体验不太好 xff0c 不需要滑动条 xff0c 根据内容 xff0c 自动增加高度 xff0c 并显示完整内容 二 解决方法 主要有3种方式
  • ElementUI 实现el-table 列宽自适应

    一 概述 Element UI 是 PC 端比较流行的 Vue js UI 框架 xff0c 它的组件库基本能满足大部分常见的业务需求 但有时候会有一些定制性比较高的需求 xff0c 组件本身可能没办法满足 最近在项目里就碰到了 很多页面都
  • 微信小程序设置底部导航栏

    一 概述 微信小程序底部想要有一个漂亮的导航栏目 xff0c 不知道怎么制作 xff0c 于是百度找到了本篇文章 xff0c 分享给大家 好了 小程序的头部标题 设置好了 xff0c 我们来说说底部导航栏是如何实现的 我们先来看个效果图 这
  • ElementUI 轮播图

    一 概述 因项目需求 xff0c 需要增加轮播图 xff0c 官方demo效果如下 xff1a 但这个不是我们想要的 xff0c 我们需要的是这样的 二 代码实现 需要在原有的基础上 xff0c 修改页面样式才行 test vue lt t
  • Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。

    重新装office之后打开系统的文件提示 Word在试图打开文件时遇到错误 请尝试下列方法 检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢复转换器打开文件 1 文件安全性问题 xff0c 可以打开Word 或ppt xff
  • Docker部署RocketMQ集群

    一 概述 Apache RocketMQ是阿里开源的一款高性能 高吞吐量 队列模型的消息中间件的分布式消息中间件 关于RocketMQ集群架构的详细介绍 xff0c 请参考链接 xff1a https blog csdn net Weixi