rocketmq高可用集群部署(RocketMQ-on-DLedger Group)
rocketmq高可用集群部署(RocketMQ-on-DLedger Group)
rocketmq部署架构
rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂。
单master模式
这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。
多master
一个集群无Slave,全是Master,例如2个Master或者3个Master
- 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
- 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。
多master异步复制slave
每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:
- 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
- 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。
多master同步复制slave。
每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:
- 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
- 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
RocketMQ-on-DLedger Group(可自动主从容灾)
之前的几种方式,能解决数据冗余备份,一定高可用问题。但是master故障后,多master多slave架构能提供继续想slave消费数据。但是生产数据呢?这会导致生产服务中断不可用。所以又出现了RocketMQ-on-DLedger Group架构。可自主容灾。引入了DLedger工具。
rocketmq架构:
部署架构
部署架构:RocketMQ-on-DLedger Group
服务器数量3台。
部署操作步骤
官网下载rocketmq二进制包
解压并安装
cd /opt
wget http://192.168.0.155:9999/rocketmq-all-4.9.1-bin-release.zip
unzip rocketmq-all-4.9.1-bin-release.zip
mkdir /data/rocketmq-4.9.1-raftcluster
3台主机分别配置nameserver
修改bin目录下的文件:runserver.sh,将jvm调整至1G。(由于我服务器资源内存有限)
3台主机分别启动nameserver
cd ./bin #切换到bin目录
nohup sh mqnamesrv > ./nameserver.log 2>&1 &
每台nameserver是不需要互相通信,NameServer之间数据不同步。和hdfs的nameserver不是一样的概念。
通过命令
netstat -tunlp | grep 9876
检查端口9876是否存在编辑broker的配置文件
第一台主机node0的配置(192.168.0.218):
vim ./conf/dledger/broker-n0.conf
内容如下:
brokerClusterName = RaftCluster #集群名
brokerName=RaftNode00 #broker组名,建议和dLegerGroup名一致
listenPort=30911
namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00
storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00 #dleger组名
dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
## must be unique
dLegerSelfId=n0 #每个dleger组下面的实例ip,保证唯一
sendMessageThreadPoolNums=4 #发送线程数,建议和服务器cpu一致
第二台主机node1的配置(192.168.0.89):
vim ./conf/dledger/broker-n1.conf
内容如下:
brokerClusterName = RaftCluster #集群名
brokerName=RaftNode00 #broker组名,建议和dLegerGroup名一致
listenPort=30911
namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01
storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00 #dleger组名
dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
## must be unique
dLegerSelfId=n1 #每个dleger组下面的实例ip,保证唯一
sendMessageThreadPoolNums=4
第三台主机node2的配置(192.168.0.77):
vim ./conf/dledger/broker-n2.conf
内容如下:
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02
storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911 #注意配置格式
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=4
修改3台broker的jvm大小,默认是8G
在
./bin
目录下,由于我服务器没有8G内存,需修改jvm大小。vim runbroker.sh
每台实例启动broker实例进程
cd /data/rocketmq-4.9.1-raftcluster/rocketmq-all-4.9.1-bin-release/bin #安装路径
#在第一台服务器上启动broker
nohup ./mqbroker -c ../conf/dledger/broker-n0.conf > ./broker.log 2>&1 &
#在第二台服务器上启动broker
nohup ./mqbroker -c ../conf/dledger/broker-n1.conf > ./broker.log 2>&1 &
#在第三台服务器上启动broker
nohup ./mqbroker -c ../conf/dledger/broker-n2.conf > ./broker.log 2>&1 &
验证:
查看输出日志或者用
netstat -tunlp | grep 30911
命令查看端口是否启动用命令行查看dleger集群的状态
sh bin/mqadmin clusterList -n 127.0.0.1:9876
安装rocketmq-console的web管理页面(rocketmq-dashboard)
备注:新版本
rocketmq-console
已经改名叫rocketmq-dashboard
。rocketmq-dashboard下载地址为:https://github.com/apache/rocketmq-dashboard
unzip rocketmq-dashboard-master.zip
cd rocketmq-dashboard-master
mvn clean package -Dmaven.test.skip=true #打包如果失败,可以多尝试几次
#构建成功后,jar包在target目录里面
#启动rocketmq-dashboardd的jar包
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr="192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876" --server.port=8080
访问服务器的192.168.0.218:8080端口,能看到集群信息,如下:
- RocketMQ-on-DLedger Group集群部署完成。
其他
rocketmq的默认日志文件在启动用户的家目录下的logs里面。
如需变更需要修改以下3个文件
- 本教程部署的RocketMQ-on-DLedger Group。只有一个分片,如果服务器数量充足,可以部署多分片。部署方式参考前面的操作步骤。只是部署更多的服务器,修改配置而已。
rocketmq高可用集群部署(RocketMQ-on-DLedger Group)的更多相关文章
- RocketMQ的高可用集群部署
RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...
- hbase高可用集群部署(cdh)
一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...
- (十)RabbitMQ消息队列-高可用集群部署实战
原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...
- RocketMQ(2)---Docker集群部署RocketMQ
RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...
- RabbitMQ的高可用集群部署
RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...
- MySQL MHA 高可用集群部署及故障切换
MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...
- Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)
之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
- Kubernetes容器集群 - harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
随机推荐
- Git使用教程三
2.远程仓库 线上仓库的操作学习以Github为例 2.1完成线上仓库创建 注意:仓库要求在当前账号下唯一 2.2 两种常规使用方式 2.2.1基于http协议 a.创建空目录,名称就称为shop ...
- 程序解决十苹果问题 Java
程序解决十苹果问题 Java 题目:10个苹果,其中有9个重量相同,剩余1个相比其它重量不同(或重或轻,不得而知),使用天平比较三次,找出重量特殊的那一个 import org.junit.Test; ...
- HCNP Routing&Switching之OSPF LSA更新规则和路由汇总
前文我们了解了OSPF外部路由类型以及forwarding address字段的作用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15225673.html: ...
- AWS扩容EC2实例根空间
文章原文 aws 端操作 先在EC2 实例中选中磁盘 然后打开跟设备 修改大小后保存 ec2 端操作 lsblk 查看当前设备的磁盘编号 df -T -H 查看扩容前的空间大小并确定磁盘格式 grow ...
- 羽夏笔记——PE结构(不包含.Net)
写在前面 本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...
- DPDK 无锁环形队列(Ring)详解
DPDK 无锁环形队列(Ring) 此篇文章主要用来学习和记录DPDK中无锁环形队列相关内容,结合了官方文档说明和源码中的实现,供大家交流和学习. Author : Toney Email : vip ...
- Python - poetry(3)配置项详解
config 命令 poetry 通过 config 命令进行配置 也可以直接在 config.toml 文件中进行配置,该文件将在首次运行该命令时自动创建 文件目录 macOS:~/Library/ ...
- Axis <=1.4 RCE 复现
1.环境搭建 在idea 上新建项目,然后用tomcat运行即可 2.漏洞复现 2.1 freemarker.template.utility.Execute 如果项目里面没有freemarker 就 ...
- Maven项目之间关系介绍
Maven项目之间的关系 依赖关系 单纯的项目A中需要项目B中的资源,将项目B打成Jar包被A依赖,此时项目A直接调用项目B中资源即可. 项目A和项目B此时形成最基本的依赖关系. 继承关系 需要场景: ...
- POJ1804——Brainman(水题)
解题思路: 一个乱序序列的 逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数 直接求逆序数 把S[i]和s[i+1~n]的元素逐个比较,如果s[i] > s[k] (k∈[i ...