(五) MdbCluster分布式内存数据库——数据迁移架构及节点扩缩容状态图
(五) 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分布式内存数据库——数据迁移架构及节点扩缩容状态图的更多相关文章
- (二) MdbCluster分布式内存数据库——分布式架构1
(二) MdbCluster分布式内存数据库--分布式架构1 分布式架构是MdbCluster的核心关键,业界有很多相关的实现,却很少有文章详细的解释每个架构实现背后的细节和这么做的原因.在Mdb ...
- (一) MdbCluster分布式内存数据库——基础架构介绍
(一) MdbCluster分布式内存数据库--基础架构介绍 这个项目是怎么开始的我已经有些记不清楚了,大概是原来的内存数据库很不好用,一次次地让我们踩坑,我又自以为是地觉得可以做一个更好的出来. ...
- (三) MdbCluster分布式内存数据库——节点状态变化及分片调整
(三) MdbCluster分布式内存数据库--节点状态变化及分片调整 上一篇: (二) MdbCluster分布式内存数据库--分布式架构 昨天我们在测试节点动态扩缩容时,发现了一个小bug ...
- Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制
本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...
- 伪分布式hbase数据迁移汇总
https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...
- 数据迁移的应用场景与解决方案Hamal
本文来自网易云社区 作者:马进 跑男热播,作为兄弟团忠实粉丝,笔者也是一到周五就如打鸡血乐不思蜀. 看着银幕中一众演员搞怪搞笑的浮夸演技,也时常感慨,这样一部看似简单真情流露的真人秀,必然饱含了许许多 ...
- Redis源码阅读(五)集群-故障迁移(上)
Redis源码阅读(五)集群-故障迁移(上) 故障迁移是集群非常重要的功能:直白的说就是在集群中部分节点失效时,能将失效节点负责的键值对迁移到其他节点上,从而保证整个集群系统在部分节点失效后没有丢失数 ...
- Elasticsearch:单节点数据迁移
Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发
掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...
随机推荐
- 可视化大屏:mapbox+vue全攻略
如题图,mapbox是一个支持真3D地形展示的webGIS框架,与常用的Leaflet.Cesium和Openlayers并称四大框架,本文将介绍mapbox-gl js 在 vue 中的用法. 为什 ...
- VS 查看引用的DLL/Nuget包源码时,无法看到注释
一.问题描述 在下面的截图中,我们发现,源码有添加一段注释. 然后通过Nuget包引用,在VS中用Reshaper反编译时,发现没有注释: 原来,DLL是默认不带注释的.即你生成一个DLL,给另一个项 ...
- API 扫盲贴,8分钟快速搞懂 API 框架
API(应用程序编程接口)是一种传递信息和指令的工具,它通过不同的功能和协议等手段,允许不同的软件或系统之间进行通信和交互.作为程序员或开发人员,API 是你日常工作中必不可少的组成部分.在本文中,我 ...
- vue全家桶进阶之路27:Vue.js 3.0的下载和安装
使用脚手架vue-cli创建vue3项目,创建前需要准备以下: 1.node.js环境 见:https://www.cnblogs.com/beichengshiqiao/p/17251233.htm ...
- Django 14天从小白到进阶- Day1 Django 初识
来自作者:金角大王 本节内容 Http原理介绍 自行开发一个Web框架 WSGI介绍 Django介绍 MVC/MTV Django安装 创建项目与APP 开发第一个页面 为什么学Django? Go ...
- ARM DMA Controller PL330 使用经验分享
总体简介 DMAC提供一个AXI主接口来执行DMA传输,并提供两个APB从接口来控制其操作.DMAC采用TrustZone技术,其中一个APB接口运行在secure状态,另一个运行在非secure状态 ...
- mysql基础_视图
介绍 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中.行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的. 优 ...
- [MAUI]在.NET MAUI中复刻苹果Cover Flow
@ 目录 原理 3D旋转 平行变换 创建3D变换控件 绘制封面图片 应用3D旋转 应用平行变换 绘制倒影 创建绑定属性 创建绑定数据 创建布局 计算位置 计算3D旋转 创建动效 项目地址 Cover ...
- WPF入门教程系列二十七 ——DataGrid使用示例MVVM模式(4)
WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...
- Ascend C sqrt算子实战
摘要:编写一个Ascend C的sqrt算子,并通过内核调用方式在cpu和npu模式下进行验证. 本文分享自华为云社区<[2023 · CANN训练营第一季]--Ascend C sqrt算子实 ...