(五) MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图

上一篇:(四) MdbCluster分布式内存数据库——业务消息处理

  

  本节主要讨论在系统扩容期间的数据迁移架构及节点的状态图。我们将通过介绍这两部分,慢慢展开复杂的扩缩容流程。

  下图从左到右,我们增加了ClusterManager进程及容器。ClusterManager进程的作用在于接到前台界面发来的扩缩容指令后,根据指令生成新的slotlist分布图,及其对应的迁移计划。所谓迁移计划: { slot: 1003, from: 1, to: 3 } 表示将编号为1003的slot数据,从节点1迁移到节点3。并将迁移计划发给节点3的MdbRedux。MdbRedux根据迁移计划分别控制节点1和节点3的MdbAgent的状态,以控制迁移过程中slot:1003 数据的可读不可写。并且MdbRedux给本节点的DataMigration发送数据迁移命令,执行slot:1003 数据从1迁移到3的步骤。最后,MdbRedux还要负责更新所有节点的slotlist数据。MdbAgent则给所有的client推送更新。

  

  问题:1、为什么DataMigration没有通过MdbAgent,而直接通过MdbRWNode操作数据。主要是为了性能考虑。迁移过程中涉及批量的数据操作,直接通过MdbRWNode进行可以更快的完成。并且避免挤占MdbAgent的正常业务消息通道,影响迁移过程中的正常业务消息。另外,我们减弱了迁移过程中批量数据操作的部分校验工作。也是为了更快的完成迁移,避免影响在线业务。

  2、为什么MdbRedux和DataMigration没有部署在单独容器,而是每个数据节点都有。关于这点主要考虑并行迁移。执行计划可能包括from:1, to:3; from:2 ,to:4;  这时,ClusterManager就可以同时给节点3,4分别发送迁移计划。两部分迁移可以并行进行。

  

  在MdbCluster的开发过程中,我们发现数据节点的状态管理是至关重要的。不同状态下,数据节点对于外部请求的响应会有不同。一个完整的状态图可以保证系统节点在不同状态下的正确运行。下面就是一对主备节点的扩缩容情况下的状态图。

  如上图所示:

  1. 一对主备节点以OFFLINE的状态启动,启动完成后为ONLINE的状态,此时并为加入集群。

  2. 主节点经过MIGRATING状态,进行扩容操作,变为ACTIVE状态,加入集群,正式作为主节点承接业务消息。备节点则为STANDBY状态,加入集群,从主节点实时同步数据。        

  3. 当主节点出现故障后,备节点立刻转为ACTIVE状态,承接业务消息。

  4. 故障节点转为RECOVERED状态开始恢复过程。恢复过程包括重建数据库,从主节点同步数据。恢复完成后,节点转为STANDBY状态,做为备节点加入集群,从主节点实时同步数据。

  5. 在进行缩容操作时,主节点转为MIGRATING状态,进行数据迁移。备节点从主节点实时同步数据。

  6. 迁移完成后,主备节点均转为ONLINE状态。脱离集群。

  7. 容器退出后,主备节点为OFFLINE状态,以备下次启动。

  8. 在集群中的业务节点初次启动时,则从中间状态进入。

(五) MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图的更多相关文章

  1. (二) MdbCluster分布式内存数据库——分布式架构1

    (二) MdbCluster分布式内存数据库--分布式架构1   分布式架构是MdbCluster的核心关键,业界有很多相关的实现,却很少有文章详细的解释每个架构实现背后的细节和这么做的原因.在Mdb ...

  2. (一) MdbCluster分布式内存数据库——基础架构介绍

    (一) MdbCluster分布式内存数据库--基础架构介绍   这个项目是怎么开始的我已经有些记不清楚了,大概是原来的内存数据库很不好用,一次次地让我们踩坑,我又自以为是地觉得可以做一个更好的出来. ...

  3. (三) MdbCluster分布式内存数据库——节点状态变化及分片调整

    (三) MdbCluster分布式内存数据库--节点状态变化及分片调整   上一篇: (二) MdbCluster分布式内存数据库--分布式架构   昨天我们在测试节点动态扩缩容时,发现了一个小bug ...

  4. Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制

    本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...

  5. 伪分布式hbase数据迁移汇总

    https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...

  6. 数据迁移的应用场景与解决方案Hamal

    本文来自网易云社区 作者:马进 跑男热播,作为兄弟团忠实粉丝,笔者也是一到周五就如打鸡血乐不思蜀. 看着银幕中一众演员搞怪搞笑的浮夸演技,也时常感慨,这样一部看似简单真情流露的真人秀,必然饱含了许许多 ...

  7. Redis源码阅读(五)集群-故障迁移(上)

    Redis源码阅读(五)集群-故障迁移(上) 故障迁移是集群非常重要的功能:直白的说就是在集群中部分节点失效时,能将失效节点负责的键值对迁移到其他节点上,从而保证整个集群系统在部分节点失效后没有丢失数 ...

  8. Elasticsearch:单节点数据迁移

    Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...

  9. 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

    掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...

  10. 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

随机推荐

  1. 使用Ref还是Reactive?

    我喜欢Vue 3的Composition API,它提供了两种方法来为Vue组件添加响应式状态:ref和reactive.当你使用ref时到处使用.value是很麻烦的,但当你用reactive创建的 ...

  2. 音频处理库性能对比:计算mel频谱的速度哪个更快?

    介绍 音频信号处理在各种应用中都发挥着重要的作用,如语音识别.音乐信息检索.语音合成等.其中,Mel频谱是一种常用的频域特征表示方法,用于描述人类听觉系统对频率的敏感程度. 在深度学习音频领域,mel ...

  3. Linux驱动开发环境-Kernel源码安装

    开如学习LDD3这本书. 我是在Fedora18上学习的,但我安装的这个版本,/usr/src/下面没有相应的源代码. 自己从KERNEL网站下载相应版本源码(安装驱动有问题) 于是从kernel的网 ...

  4. 阿里云交互式建模(DSW)的探索和踩坑

    前言 自己的笔记本炼丹还是太吃力了些,风扇嘶吼有点心疼,看到阿里云出了一些免费试用的资源,想着能白嫖一下高端显卡跑一跑自制模型还挺有趣,于是有了下面的一些操作,其实没啥难度的,大胆的按文档来做基本就可 ...

  5. IE不兼容问题 字符串格式化

    Js现在支持高级语法,字符串格式化 alert(`aaaa${content}`); 我们使用一段完整的html来打开测试下: 1 <!DOCTYPE html> 2 <html&g ...

  6. 文心一言 VS chatgpt (7)-- 算法导论2.3 3~4题

    三.使用数学归纳法证明:当n刚好是2的幂时,以下递归式的解是 T(n)=nlgn.若n=2,T(n)=2:若n=2^k,k>1,T(n)=2T(n/2)+n. 文心一言: chatgpt: 首先 ...

  7. 2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的。返回其长度。

    2021-03-30:给定一个整数组成的无序数组arr,值可能正.可能负.可能0.给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的.返回其长度. 福大大 答 ...

  8. .Net8顶级技术:IR边界检查之IR解析(二)

    前言 IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦.但部分基本明了.本篇通过小例子了解下.前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解. 概括 1.前奏 先上C ...

  9. flutter填坑之旅(环境搭建篇)

    自从Google 在 2018 世界移动大会上发布 Flutter 的 Beta 版本,看看官方的介绍Flutter widgets are built using a modern framewor ...

  10. 使用openresty替换线上nginx网关之openresty安装细节

    背景 线上跑了多年的一个网关业务,随着部门的拆分,逐渐有了一个痛点.该网关业务主要处理app端请求,app端发起的请求,采用http协议,post方法,content-type采用applicatio ...