网站首页 > 博客文章 正文
前言
嗨,大家好。我是希留
前面我们搭建了一个单机的RocketMQ服务,但一般生产上使用都是搭建的集群服务。所以今天这篇文章就记录一下我是怎么搭建一个双主双从的集群的。
一、集群模式
在RocketMQ中,集群的部署模式是比较多的,有以下几种:
- 单个Master
° 这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用。 - 多Master模式
° 一个集群无Slave,全是Master,例如2个Master或者3个Master
° 单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不 可订阅,消息实时性会受到影响。 - 多Master多Slave模式,异步复制
° 每个Master配置一个Slave,有多对Master-Slave,采用异步复制方式,主备有短暂消息延迟,毫秒级。
° 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明,不需要人工干预。性能同多Master模式几乎一样。
° 缺点:Master宕机,磁盘损坏情况,会丢失少量消息。 - 多Master多Slave模式,同步双写
每个Master配置一个Slave,有多对Master-Slave,采用同步双写方式,主备都写成功,向应用返回成功。
° 优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。
° 缺点:性能比异步复制模式略低,大约低10%左右
二、搭建2m2s异步刷盘集群
由于我只有一台服务器,资源有限,就通过docker来搭建集群。
1. 创建2个master
1.1 创建 nameserver01 容器 (没有拉取镜像直接创建容器时,会自动先拉取镜像)
// docker 创建命令
docker create -p 9876:9876 --name rmqserver01 \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v /rmq/rmqserver/logs:/opt/logs \
-v /rmq/rmqserver/store:/opt/store \
foxiswho/rocketmq:server-4.3.2
如下图所示
1.2 创建nameserver02容器
docker create -p 9877:9876 --name rmqserver02 \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v /rmq/rmqserver02/logs:/opt/logs \
-v /rmq/rmqserver02/store:/opt/store \
foxiswho/rocketmq:server-4.3.2
出现一串字符串就表示创建完成
2. 创建 broker
2.1 创建第1个master broker
取名 broker01
// docker 命令
docker create --net host --name rmqbroker01 \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmq/rmqbroker01/conf/broker.conf:/etc/rocketmq/broker.conf \
-v /rmq/rmqbroker01/logs:/opt/logs \
-v /rmq/rmqbroker01/store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
如下图所示就是创建成功。
创建broker相关目录
修改 broker.conf 配置
#nameServer地址,分号分割
namesrvAddr=42.194.222.32:9876;42.194.222.32:9877
#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=xiliu-Cluster
#broker名字,名字一样的节点就是一组主从节点
brokerName=broker01
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
brokerIp1=42.194.222.32
brokerIp2=42.194.222.32
#Broker 对外服务的监听端口
listenPort=10911
2.2 创建第2个master broker
取名 broker02
docker create --net host --name rmqbroker02 \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmq/rmqbroker02/conf/broker.conf:/etc/rocketmq/broker.conf \
-v /rmq/rmqbroker02/logs:/opt/logs \
-v /rmq/rmqbroker02/store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
修改配置
namesrvAddr=42.194.222.32:9876;42.194.222.32:9877
brokerClusterName=xiliu-Cluster
brokerName=broker02
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
#刷盘方式 异步刷盘
flushDiskType=ASYNC_FLUSH
brokerIp1=42.194.222.32
brokerIp2=42.194.222.32
listenPort=10811
2.3 创建第1个slave broker
slave broker01
docker create --net host --name rmqbroker03 \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmq/rmqbroker03/conf/broker.conf:/etc/rocketmq/broker.conf \
-v /rmq/rmqbroker03/logs:/opt/logs \
-v /rmq/rmqbroker03/store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
配置
namesrvAddr=42.194.222.32:9876;42.194.222.32:9877
brokerClusterName=xiliu-Cluster
brokerName=broker01
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
brokerIp1=42.194.222.32
brokerIp2=42.194.222.32
listenPort=10711
2.4 创建第2个slave broker
slave broker02
docker create --net host --name rmqbroker04 \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-v /rmq/rmqbroker04/conf/broker.conf:/etc/rocketmq/broker.conf \
-v /rmq/rmqbroker04/logs:/opt/logs \
-v /rmq/rmqbroker04/store:/opt/store \
foxiswho/rocketmq:broker-4.3.2
配置
namesrvAddr=42.194.222.32:9876;42.194.222.32:9877
brokerClusterName=xiliu-Cluster
brokerName=broker02
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
brokerIp1=42.194.222.32
brokerIp2=42.194.222.32
listenPort=10611
3. 启动容器
先启动nameserver:docker start rmqserver01 rmqserver02
在启动broker:docker start rmqbroker01 rmqbroker02 rmqbroker03 rmqbroker04
三、验证集群
由于我部署了rocketmq-console管理工具,所以可以直接进入控制台看到相关集群信息。集群搭建完成
总结
以上就是本文的主要内容了。本文主要介绍了RocketMQ双主双从的集群服务搭建,环境搭建起来还是比较容易,主要还是要自己动手去搭建,熟悉一些配置。 感谢大家的阅读,如有疑问之处,欢迎在评论区留言交流~
- 上一篇: 小白入门必知必会-RocketMQ集群部署
- 下一篇: RocketMQ 在使用上的一些排坑和优化
猜你喜欢
- 2024-11-18 快速使用docker方式部署安装RocketMQ
- 2024-11-18 介绍新版RocketMQ v4.9.3 下载、安装、配置的完成过程
- 2024-11-18 docker-4:mac使用docker部署开发用rocketmq
- 2024-11-18 扩展RocketMQ 使其支持任意时间精度的消息延迟
- 2024-11-18 RocketMQ如何突破内网限制,实现内外网互通
- 2024-11-18 SpringBoot3.0 + RocketMq 构建企业级数据中台完结
- 2024-11-18 centos7安装部署RocketMQ分布式集群
- 2024-11-18 「转」Spring Cloud异步场景分布式事务怎样做?试试RocketMQ
- 2024-11-18 RocketMQ集群搭建
- 2024-11-18 RocketMQ 的持久化配置
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)