rocketmq 如何保证高可用_RocketMq容灾、高可用方案

一、实现分布式集群多副本的三种方式

1.1 M/S模式

即Master/Slaver模式。该模式在过去使用的最多,RocketMq之前也是使用这样的主从模式来实现的。主从模式分为同步模式和异步模式,区别是在同步模式下只有主从复制完毕才会返回给客户端;而在异步模式中,主从的复制是异步的,不用等待即可返回。

同步模式

同步模式特点:高延迟、低吞吐、无数据丢失(发生故障时)、自动故障转移、强一致性

异步模式

异步模式特点:低延迟、高吞吐、少量数据丢失(主挂掉时)、平均修复时间较长、最终一致性

1.2 基于zookeeper服务

image.png

和M/S模式相比zookeeper模式是自动选举的主节点,不过rocketMq暂时不支持zookeeper,且基于ZooKeeper的服务也带来一个比较严重的问题:依赖加重。因为运维ZooKeeper是一件很复杂的事情。

1.3 基于raft

Raft

相比zookeeper,raft自身就可以实现选举,raft通过投票的方式实现自身选举leader。去除额外依赖。目前RocketMq 4.5.0已经支持

二、Dledger介绍(摘自github)

GitHub地址:https://github.com/openmessaging/openmessaging-storage-dledger/blob/master/docs/cn/introduction_dledger.md#dledger-%E7%9A%84%E5%AE%9E%E7%8E%B0

Dledger是一个基于Raft的 Commitlog 存储 Library。DLedger 定位是一个工业级的 Java Library,可以友好地嵌入各类 Java 系统中,满足其高可用、高可靠、强一致的需求。Dledger是基于日志实现的,只拥有日志的写入和读出接口,且对顺序读出和随机读出做了优化。

DLedger 的实现大体可以分为以下两个部分: 1.选举 Leader 2.复制日志

image.png

2.1 Dledger在RocketMq的实现

image.png

实现方式:

DLedgerCommitlog 用来代替现有的 Commitlog 存储实际消息内容,它通过包装一个 DLedgerServer 来实现复制;

依靠 DLedger 的直接存取日志的特点,消费消息时,直接从 DLedger 读取日志内容作为消息返回给客户端;

依靠 DLedger 的 Raft 选举功能,通过 RoleChangeHandler 把角色变更透传给 RocketMQ 的Broker,从而达到主备自动切换的目标

三、 RocketMq-Dledger集群搭建

一下主要介绍如何部署自动容灾切换的 RocketMQ-on-DLedger Group。

RocketMQ-on-DLedger Group 是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。

RocketMQ-on-DLedger Group 能自动容灾切换,并保证数据一致。

RocketMQ-on-DLedger Group 是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。

3.1 源码构建

3.1.1构建Dledger

git clone https://github.com/openmessaging/openmessaging-storage-dledger.git

cd openmessaging-storage-dledger

mvn clean install -DskipTests

3.1.2 构建RocketMq

git clone https://github.com/apache/rocketmq.git

cd rocketmq

git checkout -b store_with_dledger origin/store_with_dledger

mvn -Prelease-all -DskipTests clean install -U

3.2编写配置

每个 RocketMQ-on-DLedger Group 至少准备三台机器(本文假设为 3)。

编写 3 个配置文件,建议参考 conf/dledger 目录下的配置文件样例。

关键配置介绍:

name

含义

举例

enableDLegerCommitLog

是否启动 DLedger

true

dLegerGroup

DLedger Raft Group的名字,建议和 brokerName 保持一致

RaftNode00

dLegerPeers

DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致

n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913

dLegerSelfId

节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一

n0

sendMessageThreadPoolNums

发送线程个数,建议配置成 Cpu 核数

16

这里贴出 conf/dledger/broker-n0.conf 的配置举例。

brokerClusterName = RaftCluster

brokerName=RaftNode00

listenPort=30911

namesrvAddr=127.0.0.1:9876

storePathRootDir=/tmp/rmqstore/node00

storePathCommitLog=/tmp/rmqstore/node00/commitlog

enableDLegerCommitLog=true

dLegerGroup=RaftNode00

dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913

## must be unique

dLegerSelfId=n0

sendMessageThreadPoolNums=16

3.3 启动Broker

nohup sh bin/mqbroker -c conf/dledger/xxx-n0.conf &

nohup sh bin/mqbroker -c conf/dledger/xxx-n1.conf &

nohup sh bin/mqbroker -c conf/dledger/xxx-n2.conf &

四、容灾、高可用方案推荐

目前RocketMq主要有两种选择

1.M/S

2.Dledger模式

两种的优缺点:

Master/Slave

优点:实现简单

缺点:不能自动控制节点切换,一旦出了问题,需要人为介入。

Dledger

优点:可以自己协调,并且去除依赖。

缺点: 只有RocketMq 4.5.0支持

经过上文的分析。推荐使用Dledger

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

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

相关文章

Debian 9 strech 安装 ROS lunar

1. 配置源 按照我以前的博客配置或者按照wiki上的配置。 2. sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list3. sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:…

谈Find指令

Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系…

数据库原理归档——对于数据库原理最全的总结

恭喜你来到新天地! 以下的笔记是我复习了三次总结出来的,属于一个归档。目前还在对以往的知识做一个更加详细地总结,所以仍在更新中。这份笔记对于新手入门数据库来说十分友好,语言通俗易懂。在数据库中,还涉及到很多…

k8s部署tomcat及web应用_部署 Spring Boot 应用到 K8S 教程

点击上方 Java后端,选择 设为星标优质文章,及时送达作者:qingmuqingmu.io/2020/04/08/Spring-Boot-Operator-User-Guide/前言在Kubernetes中部署spring boot应用整体上来说是一件比较繁琐的事情,而Spring Boot Operator则能带给你…

Web性能优化分析

如果你的网站在1000ms内加载完成,那么会有平均一个用户停留下来。2014年,平均网页的大小是1.9MB。看下图了解更多统计信息。 直击现场 《HTML开发MacOSApp教程》 http://pan.baidu.com/s/1jG1Q58M 网站的核心内容需要在1000ms内呈现出来。如果失败了&a…

Ionic 自定义组件中使用 Ionic 官方组件

问题起因&#xff1a; 在项目目录中使用 ionic g component SearchBar 加入一个新的自定义组件并在 html 中插入代码&#xff1a; 1 <div> 2 <ion-searchbar 3 [(ngModel)]"myInput" 4 showCancelButton"true" 5 placeholder"…

scp构造端口_指定端口号的scp

指定端口号的scp我正在尝试将文件从远程服务器scp到我的本地计算机。 只有80端口可以访问。我试过了&#xff1a;scp -p 80 usernamewww.myserver.com:/root/file.txt .但得到了这个错误&#xff1a;cp: 80: No such file or directory如何在scp命令中指定端口号&#xff1f;On…

闭包/Block当成函数参数实现回调

2019独角兽企业重金招聘Python工程师标准>>> Swift // MARK:// MARK: 获取数据/// 获取数据class func toolLoadData(completion:(finish: String) -> ()? ,content: String) {self .nextStepRequest({ (finish) -> ()? in// 接收到数据 调用 block 传递数据…

利用find同时查找多种类型文件

find . -name "*.c" -o -name "*.cpp" -o -name "*.h" 就可以列出当前目录下面所有的c,cpp,h文件转载于:https://www.cnblogs.com/baizx/p/4438905.html

JS动态插入HTML后不能执行后续JQUERY操作

通过js追加的html 发现 不能点击 执行函数 普通绑定事件&#xff1a;$(.btn1).click(function(){}绑定 事件委托 解决方法&#xff1a; $("body").delegate(".class","click",function(){}); on绑定事件&#xff1a;$(document).on(click,.btn2,…

linux重装eclipse_Linux环境安装Eclipse工具开发

2、上传到虚拟机进行解压缩操作&#xff1a;[hadoopslaver1 package]$ tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /home/hadoop/soft/3、配置Maven的环境变量&#xff1a;[hadoopslaver1 soft]$ sudo vim /etc/profileexport MAVEN_HOME/home/hadoop/soft/apache-maven-3.5.…

js中如何判断一个DOM对象是否存在?

<div id"div1"></div> if(!!document.getElementById("div1"))转载于:https://www.cnblogs.com/AmayaWang/p/5528320.html

使用labview读取一副位图,并进行BCG校准(或修改其BCG)程序解析

进行图像处理第一步肯定就是要读取一副图片&#xff0c;然后再进行图像的BCG校准。 首先讲解一下用到的函数第一个函数为IMAQ Create&#xff0c;位于 视觉与运动--Vision Utilities---Image Management---IMAQ create 函数如图&#xff0c;对于如何看函数功能&#xff0c;还是…

实现生成小学四则运算练习题

实现小学四则运算练习题 1.题目要求 本次作业要求两个人合作完成&#xff0c;驾驶员和导航员角色自定&#xff0c;鼓励大家在工作期间角色随时互换&#xff0c;这里会布置两个题目&#xff0c;请各组成员根据自己的爱好任选一题。 题目1&#xff1a; 我们在刚开始上课的时候介绍…

交换机组播风暴_广播风暴的成因以及解决办法有哪些?

广播风暴就是因为以太网中出现了明环或暗环&#xff0c;引起广播包被指数涨速递增&#xff0c;整个网络流量被广播包占据&#xff0c;其他的转发业务不能进行。以太交换机对广播包的处理&#xff0c;是不管从哪个端口收到广播包&#xff0c;都完整地复制一份转发到其他端口(除接…

inotify用法简介及结合rsync实现主机间的文件实时同步

一、inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统&#xff08;API&#xff09;&#xff0c;它提供了一种监控文件系统&#xff08;基于inode的&#xff09;事件的机制&#xff0c;可以监控文件系统的变化如文件修改、新增、删除等&#xff0c;并…

[转] 64位windows下添加postgreSQL odbc数据源

系统环境&#xff1a;windows7 64位 postgreSQL9.0&#xff08;64bit)ps&#xff1a;安装postgreSQL时确定安装了odbc驱动。问题&#xff1a;点击“开始-》控制面板-》管理工具-》数据源&#xff08;ODBC&#xff09;-》用户DSN-》添加”&#xff0c;未出现postgreSQL关联选项。…

Mysql ---Sqlserver数据迁移到Mysql(Mysql建表迁移数据)

1 试用了MysqlWorkBench的数据迁移功能 以为能实现&#xff1a;建立跟Sqlserver一样的表结构和视图的功能&#xff0c;sqlserver的数据迁移到mysql 实际上发现&#xff1a;即使勾选了表和视图&#xff0c;实际上却只能建立表结构。 视图结构&#xff0c;表数据&#xff0c;都没…

vscode 默认初始化_Visual Studio Code(vscode)使用介绍

[TOC]vscode 安装软件直接在vscode官网&#xff08;https://code.visualstudio.com/&#xff09;下载安装。建议将下图红框中勾选&#xff0c;安装完成后可通过鼠标右键打开vscode。安装界面使用介绍插件安装安装完成后&#xff0c;左侧栏可以看到不同模块&#xff0c;一开始包…

梯度下降法分析

梯度下降法存在的问题 梯度下降法的基本思想是函数沿着其梯度方向增加最快&#xff0c;反之&#xff0c;沿着其梯度反方向减小最快。在前面的线性回归和逻辑回归中&#xff0c;都采用了梯度下降法来求解。梯度下降的迭代公式为&#xff1a; \(\begin{aligned} \theta_j\theta_j…