(五) 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就是将原来单一 ...
随机推荐
- Hystrix 如何在不引入 Archaius 的前提下实现动态配置更新
Hystrix 简介 Hystrix 是 Netflix 开源的一个限流熔断降级组件,防止依赖服务发生错误后,将调用方的服务拖垮.这里对 Hystrix 本身不做过多介绍. Hystrix 目前处于维 ...
- vivo 推送系统的容灾建设与实践
作者:vivo 互联网服务器团队 - Yu Quan 本文介绍了推送系统容灾建设和关键技术方案,以及实践过程中的思考与挑战. 一.推送系统介绍 vivo推送平台是vivo公司向开发者提供的消息推送服务 ...
- 文心一言 VS chatgpt (3)-- 算法导论2.1
一.以图 2-2 为模型,说明INSERTION-SORT 在数组 A=(31,41,59,26,41,58)上的执行过程. 文心一言: 以图 2-2 为模型,说明INSERTION-SORT 在数组 ...
- 2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记
2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记 ...
- 2022-12-21:uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?
2022-12-21:uifd/ui-for-docker是docker的web可视化工具.请问部署在k3s中,yaml文件如何写? 答案2022-12-21: yaml如下: apiVersion: ...
- 2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉。请问如何操作?
2021-01-19:mysql中,一张表里有3亿数据,未分表,其中一个字段是企业类型,企业类型是一般企业和个体户,个体户的数据量差不多占50%,根据条件把个体户的行都删掉.请问如何操作?福哥答案20 ...
- Django-账号用户密码修改
Django账号密码修改命令: python manage.py changepassword python manage.py changepassword 实操分析: 第一次修改失败是因为违反了密 ...
- 沉痛悼念 pip search 一路走好
不知道最近大家有没有发现在使用 pip search 的时候,总是出现一个 XMLRPC 的报错. $ pip search xlrdERROR: XMLRPC request failed [cod ...
- uniapp主题切换功能的第二种实现方式(scss变量+require)
在上一篇 "uniapp主题切换功能的第一种实现方式(scss变量+vuex)" 中介绍了第一种如何切换主题,但我们总结出一些不好的地方,例如扩展性不强,维护起来也困难等等,那么接 ...
- 智能合约HardHat框架环境的搭建
1.首先创建一个npm项目 PS C:\Users\lcds\blockchainprojects> mkdir hardhatcontract PS C:\Users\lcds\blockch ...