RocketMQ集群部署

news2025/1/9 18:25:24

一、部署环境

两台服务器,每台一个nameserver构成集群,broker集群双主双从。

主机 容器名称 IP 与宿主机的端口映射

![在这里插入图片描述](https://img-blog.csdnimg.cn/ea99086ce3ae4d7cbb6cbfd4cfb1e433.png

  • ODL控制器会同过vip通道10909去连接mq。
  • 主从通过10912端口同步
  • 这两个地址是通过-2 +1 在配置文件端口10911基础上计算得出

两个宿主机上都有docker,并且创建了网桥docker-br0。

docker network create --subnet=172.16.1.0/24 docker-br0

docker network create --subnet=172.16.2.0/24 docker-br0

二、部署步骤

(一)、安装docker compose

参考官方方法:https://docs.docker.com/compose/install/linux/

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

docker compose version

拉取mq docker镜像

docker pull apache/rocketmq:4.3.1

docker pull apacherocketmq/rocketmq-dashboard

(二)、172.16.101.14 主机docker compose 部署 nameserver和broker 配置文件

  • 现在broker master配置文件都是开启自动创建topic的。如果topic消息间隔时间 > nameserver路由更新时间30s / (单个broker topic队列数 + 1),只会使用一个broker。
  • 在生产环境下不开启自动创建topic。需要手动给每个broker创建topic。手动创建topic后,消息会轮询所有broker的队列,选择一个发送。

1.创建路径docker-compose/rocketmq/,存放主从broker的配置文件:broker-a.conf broker-b-s.conf

broker-a.conf

brokerClusterName = rocketmq-cluster
brokerName = broker-a

# 0表示broker master 非0表示 broker slaver
brokerId = 0

# brokerIP1 当前broker监听的IP
brokerIP1 = 172.16.101.14

# brokerIP2 存在broker主从时,在broker主节点上配置了brokerIP2的话,broker从节点会连接主节点配置的brokerIP2来同步
brokerIP2 = 172.16.101.14

deleteWhen = 04
fileReservedTime = 48

namesrvAddr = rmqnamesrv-a:9876;172.16.101.13:9876

# 是否能够自动创建topic
autoCreateTopicEnable = true

#Broker 对外服务的监听端口, 默认10911
# listenPort = 10911

#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole = ASYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH

broker-b-s.conf

brokerClusterName = rocketmq-cluster
brokerName = broker-b

brokerId = 1

brokerIP1 = 172.16.101.14

deleteWhen = 04
fileReservedTime = 48

namesrvAddr = rmqnamesrv-a:9876;172.16.101.13:9876

listenPort = 11911

brokerRole = SLAVE

flushDiskType = ASYNC_FLUSH
  1. docker-compose/下创建文件docker-compose.yml

docker-compose.yml

version: '3.5'
services:
rmqnamesrv-a:
image: apache/rocketmq:4.3.1
restart: always
container_name: rmqnamesrv-a
ports:
- 9876:9876
volumes:
- ./rocketmq/logs/nameserver-a:/opt/logs/rocketmqlogs
- ./rocketmq/store/nameserver-a:/opt/store
environment:
JAVA_OPT_EXT: "-Duser.home=/opt -Xms512m -Xmx512m -Xmn150m"
command: sh mqnamesrv
networks:
- docker-br0


rmqbroker-a:
image: apache/rocketmq:4.3.1
container_name: rmqbroker-a
ports:
- 10911:10911
- 10909:10909
- 10912:10912
volumes:
- ./rocketmq/logs/broker-a:/home/rocketmq/logs
- ./rocketmq/store/broker-a:/home/rocketmq/store
- ./rocketmq/broker-a.conf:/home/rocketmq/rocketmq-4.3.1/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.3.1/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
networks:
- docker-br0

rmqbroker-b-s:
image: apache/rocketmq:4.3.1
container_name: rmqbroker-b-s
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- ./rocketmq/logs/broker-b-s:/home/rocketmq/logs
- ./rocketmq/store/broker-b-s:/home/rocketmq/store
- ./rocketmq/broker-b-s.conf:/home/rocketmq/rocketmq-4.3.1/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.3.1/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
networks:
- docker-br0

networks:
docker-br0:
external: true

(三)、172.16.101.13 主机docker compose 部署 nameserver和broker 配置文件

1.创建路径docker-compose/rocketmq/,存放主从broker的配置文件:broker-b.conf broker-a-s.conf

broker-b.conf

brokerClusterName = rocketmq-cluster
brokerName = broker-b

brokerId = 0

brokerIP1 = 172.16.101.13

brokerIP2 = 172.16.101.13

deleteWhen = 04
fileReservedTime = 48

namesrvAddr = rmqnamesrv-b:9876;172.16.101.14:9876

autoCreateTopicEnable = true

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

broker-a-s.conf

brokerClusterName = rocketmq-cluster
brokerName = broker-a

brokerId = 1

brokerIP1 = 172.16.101.13

deleteWhen = 04
fileReservedTime = 48

namesrvAddr = rmqnamesrv-b:9876;172.16.101.14:9876

listenPort = 11911

brokerRole = SLAVE

flushDiskType = ASYNC_FLUSH
  1. docker-compose/下创建文件docker-compose.yml

docker-compose.yml

version: '3.5'
services:
rmqnamesrv-b:
image: apache/rocketmq:4.3.1
restart: always
container_name: rmqnamesrv-b
ports:
- 9876:9876
volumes:
- ./rocketmq/logs/nameserver-b:/opt/logs/rocketmqlogs
- ./rocketmq/store/nameserver-b:/opt/store
environment:
JAVA_OPT_EXT: "-Duser.home=/opt -Xms512m -Xmx512m -Xmn150m"
command: sh mqnamesrv
networks:
- docker-br0


rmqbroker-b:
image: apache/rocketmq:4.3.1
container_name: rmqbroker-b
ports:
- 10911:10911
- 10909:10909
- 10912:10912
volumes:
- ./rocketmq/logs/broker-b:/home/rocketmq/logs
- ./rocketmq/store/broker-b:/home/rocketmq/store
- ./rocketmq/broker-b.conf:/home/rocketmq/rocketmq-4.3.1/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.3.1/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-b:rmqnamesrv-b
networks:
- docker-br0

rmqbroker-a-s:
image: apache/rocketmq:4.3.1
container_name: rmqbroker-a-s
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- ./rocketmq/logs/broker-a-s:/home/rocketmq/logs
- ./rocketmq/store/broker-a-s:/home/rocketmq/store
- ./rocketmq/broker-a-s.conf:/home/rocketmq/rocketmq-4.3.1/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.3.1/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-b:rmqnamesrv-b
networks:
- docker-br0

networks:
docker-br0:
external: true

(四)、部署

  1. 执行
docker compose up -d
docker compose down
  1. 此时已经在rocket下创建了logs和store文件夹,设置权限chmod -R 777 logs/ store/

  2. 部署docker compose up -d

  3. docker部署dashboard

docker run -d -it --net docker-br0 --ip 172.16.1.18 --name dashboard -p 8080:8080 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.101.13:9876;172.16.101.14:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" apacherocketmq/rocketmq-dashboard:latest /bin/bash 

启动后进入宿主机ip:8080页面

查看容器内网卡ip:hostname -i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高速信号的 pre-emphasis 预加重和 de-emphasis去加重

1 为何需要 emphasis ? 预加重和去加重其实属于高速信号均衡技术的一种,均衡技术又叫信号补偿技术。 信号从发送端发出,经信道传输,到达接收端。在传输过程中,信号会发生失真,影响接收端对信号的正确判决。…

项目构建与部署

项目构建与部署 Jar部署War部署1.修改打包形式2.排除内置的Tomcat容器3.添加servlet-api依赖4.修改启动类 项目可以内嵌Servlet容器,因此部署极为方便,可直接打包成可执行Jar包部署在有Java运行环境的服务器…

BurpSuite2023测试越权漏洞

BurpSuite2023测试越权漏洞 BurpSuite安装创建项目 - 打开内置浏览器越权漏洞测试问题处理 BurpSuite安装 官网下载社区版并安装,下载地址:链接: https://portswigger.net/burp 安装成功后图标 创建项目 - 打开内置浏览器 打开BurpSuite&#xff0c…

uni-app打包ios的步骤

注意:下面的操作必须同时满足三个条件,且这三个条件都是必须得: 1.有一个苹果开发者账号(要收费) 2.有一台苹果笔记本(在笔记本上生成证书和文件) 3.有一部苹果手机(用于测试app的功能) 使用uniapp发布ios的应用的步骤如下: 点击发…

Lecture 14 Context-Free Grammar

目录 Context-Free GrammarBasics of Context-Free GrammarsCFG Parsing ConstituentsSyntactic ConstituentsConstituents and PhrasesExample: A Simple CFG for English and generating sentencesCFG Trees CYK AlgorithmCYK AlgorithmConvert to Chomsky Normal FormThe CY…

影响电磁铁磁力大小的因素有哪些

影响电磁铁磁力大小的因素主要有四个,一是缠绕在铁芯上线圈的圈数,二是线圈中电流的强度,三是缠绕的线圈与铁芯的距离,四是铁芯的大小形状。 首先要了解电磁铁的磁性是如何产生的,通电螺线管的磁场,由毕奥&…

C#程序设计实验

C#实验 实验1 C# 基本编程 题目 VS下新建一个控制台项目:诸如:hello world程序,运行程序输出结果。并解释C#程序的结构: 诸如:一个基本的C#程序包含几部分 ,每一部分的功能是什么。。。 完整代码 usin…

YAPI接口自动化测试该如何正确地操作

目录 前言: 1、它首先是一个很好的接口维护的工具; 2、单个接口测试时,更方便灵活,更易用; 3、接口自动化测试,可以0代码基础进行接口集合的测试; 前言: YAPI是一款易于使用、可…

Lecture 15 Probabilistic Context-Free Grammar

目录 Ambiguity in Parsing Basics of PCFGsBasics of PCFGsStochastic Generation with PCFGs PCFG ParsingCYK for PCFGs Limitations of CFGPoor Independence AssumptionsLack of Lexical Conditioning Ambiguity in Parsing Context-Free grammars assign hierarchical st…

OpenELB 在 CVTE 的最佳实践

作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador。 公司介绍 广州视源电子科技股份有限公司(以下简称视源股份)成立于 2005 年 12 月,旗下拥…

最详细整理,HttpRunner接口自动化框架Hook机制详解(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 httprunner 4.x可…

软体机器人,刚柔软机器人仿真建模,干货满满,直接上图!

一、 背景: 软体机器人技术是近年来机器人领域最为热门的研究领域之一。软体机器人具有天然的柔 性、自适应性、低成本和被动安全性,在人机交互、医疗服务等领域具有广泛的应用前景。同时, 软体机器人的研究涉及软材料、机构设计、仿生学、微…

全链路压测

一般区分为两种:测试环境和生产环境压测。因生产环境的压测和真实用户的使用环境完全一致,测试结果更具有参考性。 全链路的压测的实施一般需要给压测请求带一个压测标识,用于压测数据的数据落库,查询,缓存&#xff0c…

设备维修管理系统

设备维修管理系统能够有效提高设备管理水平和设备运行效率。它不仅能够帮助企业实现设备信息化管理,还可以快速定位设备故障,提高设备修复效率,从而更好地保障生产安全和生产效率。 凡尔码搭建设备维护保养管理系统主要由以下几个模块组成&am…

【TA100】图形 2.2 模型与材质基础

一、 渲染管线与模型基础 1.可编程渲染管线 ● 蓝色背景的:可编程管线 ● 顶点着色器:模型的顶点进行计算 ● 片元着色器:将光栅化阶段插值的信息进行计算 2.uv ● 纹理映射:任何3D物体的表面都是2D的→纹理就是一张图→纹理…

6个免费商用图片素材库,再也不用担心版权问题了

本期给大家分享6个免费可商用的视频素材网站,设计师、自媒体、视频剪辑有福啦,再也不用担心版权问题了,记得收藏起来哦~ 菜鸟图库 https://www.sucai999.com/pic.html#?vNTYxMjky 网站主要是为新手设计师提供免费素材的,素材的…

[CKA]考试之基于角色的访问控制-RBAC

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Context: 为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定…

Pandas的to_sql()插入数据到mysql中所遇到的问题

使用pymysql驱动API,出现如下错误: DatabaseError: Execution failed on sql ‘SELECT name FROM sqlite_master WHERE type‘table’ AND name?;’: not all arguments converted during string formatting 1. pandas的数据表插入数据到mysql中所遇到…

王道考研数据结构代码总结(后四章)

目录 树基本概念与属性树的基本性质 图拓扑排序 本文包含王道考研讲课中所涉及的数据结构中的所有代码,当PPT代码和书上代码有所区别时以咸鱼的PPT为主,个人认为PPT上的代码比王道书上的代码要便于理解,此外,本博客也许会补充一些…

css01:顶部导航栏,左右分离布局

css01&#xff1a;顶部导航栏&#xff0c;左右分离布局 效果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>顶部导航栏</title><style>body {margin: 0;padding: 0;}.top-nav {background-color: #ff…