阿里云内存数据库Tair新一代集群无感数据迁移

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文将阐述社区开源版本集群数据迁移的技术,阿里云Tair for Redis集群早期对社区迁移数据的增强改进以及演进到新一代基于Slot复制的无感数据迁移原理。

众所周知,Redis是一款广受欢迎的内存数据库,广泛应用在多种业务场景中。开源Redis提供了分布式的Redis集群方案,可用于提升内存容量存储和扩展高速性能。集群架构必不可免涉及到数据节点分片的弹性扩缩容、分片间的数据迁移。而Redis社区版集群的数据迁移能力却一直以来是开发者、运维者们多有诟病的地方。

社区Redis集群版迁移数据有诸多不足,Tair推出的新一代以Slot复制为原理的无感迁移数据架构,已在阿里云上提供长期稳定的服务。

Tair是阿里云国产自研的云原生内存数据库,在完全兼容Redis的基础上,提供了丰富的数据模型和企业级能力来帮助客户构建实时在线场景。其中兼容Redis这块的能力,我们称之为Tair for Redis。同时,Tair与新型存储介质——持久内存的高效结合,相比内存,成本降低30%以上,并能做到数据持久化和提供近似于内存的性能。目前,Tair已广泛应用于政务、金融、制造、医疗和泛互联网等各行业客户,满足客户的高速查询和计算场景。

本文将阐述社区开源版本集群数据迁移的技术,阿里云Tair for Redis集群早期对社区迁移数据的增强改进以及演进到新一代基于Slot复制的无感数据迁移原理。

1. 开源Redis Cluster的数据迁移技术

开源Redis Cluster(7.0)采用的是无中心控制节点的分布式架构。节点间通过gossip协议传递集群拓扑结构等元信息,集群拓扑结构以Slot单位作为数据的最小集合,各个节点独自归属一部分的Slot。数据迁移即是在节点间移动Slot。

开源Redis Cluster以Per Key的方式迁移Slot。Per Key是指在迁移过程中通过遍历迁移部分key的方式完成单个Slot的迁移。

Per Key迁移的流程

具体的流程:

  1. 在目的分片上设置importing状态。
  2. 在源分片上设置migrating状态。
  3. 从源分片上获取到被迁移的Slot的key列表。
  4. 给源分片发送migrate命令,带上需要被迁移的部分key列表。migrate命令是一个同步阻塞命令,触发源分片将key发送给目标分片restore后,源分片上将key删除。如此反复直至源分片上被迁移的Slot的key列表为空。
  5. 通过setslot命令将被迁移的Slot归属于目标节点。

Per Key迁移的痛点

这套流程带来的问题也很明显:

  • migrate命令执行过程中因同步阻塞的特性,所以无法再处理其他业务请求。迁移大key则会造成长时间的阻塞,进一步放大服务的可用性问题。
  • 如果在源分片访问的key不存在,则会被重定向到目标分片,多一次路由转发。
  • 多key命令请求在重定向到目标分片后,如果目标分片上有key不存在,目标分片将返回TryAgain错误给客户端,此次请求失败。
  • 在迁移过程中,单个Slot的数据分散在两个分片上,如果迁移出现异常,将无法平稳回滚整个迁移流程。

早期阿里云Tair for Redis集群也针对Per Key数据迁移技术做了增强改进。

2. Tair for Redis集群早期Per Key数据迁移增强技术

Tair for Redis Per Key数据迁移增强改进主要集中在改进同步阻塞、改进大key迁移阻塞、缩短迁移交互时长,以此提升迁移速度从而降低业务的有损感知影响。具体的改进点以下阐述。

同步流程改成异步化

源节点在执行原生的migrate命令时,进行以下三个操作:

  1. dump key,序列化打包key的payload。
  2. 将打包好的payload通过restore的命令发送给目标节点。
  3. 收到目标节点回复后删除key。

三个操作在一个同步阻塞的命令中执行,因此造成执行期间其他业务请求较长时间不可访问。

Tair for Redis则借助自研的内核迁移状态机将这三个步骤拆解成三个异步流程,减少同步阻塞的时长。

大key拆分成chunk迁移

如果Per Key迁移到大key,dump key、传输payload、restore key三个阶段耗时都会相应增长,即便异步化也不能降低单个操作的耗时影响。

Tair  for Redis迁移前先判断被迁移的key是否属于大key,大key则被分解成chunk,按chunk为单位完成dump key、传输payload、restore key三个阶段,每个阶段的耗时减少,可有效减少对其他key的访问阻塞影响,但整体延长了对该大key的迁移耗时。

尚未解决的痛点

这些优化改进并不能解决掉全部的痛点问题,依然存在的痛点有:

  • 贯穿迁移过程中的moved和ask重定向路由语义。
  • 带有空key的多key请求,返回客户端TryAgain错误。
  • 无法一键稳定回滚。

在持续的探索和演进后,阿里云Tair for Redis集群推出了基于Slot复制的新一代数据迁移技术。

3. Tair for Redis集群基于Slot复制的无感数据迁移技术

Redis主备通过数据复制的方式进行数据同步。Tair for Redis在借鉴主备复制的技术基础上,内核衍生出了Slot复制技术(Slot Mig),概括的说即是在两个节点间通过复制一部分Slot进行数据同步,并且加上中心控制器(CS)精准动态控制毫秒级别的Slot Wait禁写技术,在集群拓扑结构切换时通过moved语义让客户端请求重定向到新的数据节点上,从而做到对业务读写请求无损,迁移过程对用户业务无感知。

Slot Mig迁移的流程

具体的流程:

  1. CS对目标分片发起数据迁移命令slotRepl。
  2. 目标节点对源节点发起slotPsync命令。
  3. 源节点生成被迁移的Slot的存量快照数据。
  4. 目标节点接收被迁移的Slot的存量快照数据。
  5. 源节点同步给目标节点被迁移的Slot的增量数据。
  6. CS动态评估增量同步差值,控制在毫秒级别的差值范围内向源节点发起slotReplWait禁写被迁移的Slot。如禁写时长超过阈值,将自动触发回滚禁写状态,恢复业务正常可写状态。
  7. CS等待同步完成后切换集群拓扑结构。客户端旧请求根据moved语义被重定向到新的集群拓扑节点。
  8. 删除源节点的已迁移完成的Slot数据。

Slot Mig迁移的优势

如上所述,整个迁移过程的优势:

  • 无只读错误,客户端链接无闪断。
  • 只在切换集群拓扑结构后对旧链接请求返回moved语义。
  • 大key、多key请求无影响。
  • 单个Slot的数据不再分散在两个节点上,流程可一键回滚恢复。

4. 对比总结

文末总结下阿里云Tair for Redis集群新一代无感数据迁移和社区开源版Redis集群数据迁移的特性对比。

阿里云Tair for Redis集群Slot Mig

社区开源Redis集群(7.0)Per Key

迁移过程中命中被迁移Slot的业务请求状态

出现两种状态:

  1. 切换集群拓扑结构前可正常访问
  2. 切换集群拓扑结构后根据moved语义重定向到目标节点,无ask语义

出现三种状态:

  1. key在源节点上不存在时根据moved以及ask语义重定向到目标节点
  2. 带有空key的多key请求,返回客户端TryAgain错误
  3. 正在执行migrate命令,其他请求被block住

迁移过程是否出现只读错误

迁移过程中是否出现禁写

毫秒级别的Slot禁写

分两种情况禁写:

  1. 多key写请求中有空key
  2. 被migrate命令阻塞住

迁移过程中客户端链接是否有闪断

迁移未结束是否可以回滚

阿里云Tair for Redis集群的无感数据迁移技术已服务于阿里云上的变配功能(扩缩容节点),欢迎大家购买体验。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
14天前
|
NoSQL Cloud Native Linux
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair
|
4月前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
3月前
|
SQL 关系型数据库 MySQL
如何快速在表级别做同构或者异构数据库之间的数据迁移/备份
【8月更文挑战第17天】本文介绍在同构与异构数据库间快速迁移/备份表级数据的方法。同构迁移可利用数据库自带工具(如MySQL的`mysqldump`)或管理软件(如phpMyAdmin);异构迁移则推荐使用ETL工具(如Pentaho Data Integration)或数据库复制工具(如SymmetricDS),亦可通过编程方式实现。实施前需测试以确保数据完整准确,并注意处理兼容性问题。
102 4
|
19天前
|
存储 机器学习/深度学习 应用服务中间件
阿里云倚天云服务器实例:计算型c8y、通用型g8y、内存型r8y实例介绍
阿里云倚天云服务器是基于阿里云自研的倚天710 ARM架构CPU打造的高性能计算产品系列,它依托先进的第四代神龙架构,旨在为用户提供稳定可预期的超高效能体验。倚天云服务器在存储、网络性能及计算稳定性方面实现了显著提升,主要得益于其芯片级的快速路径加速技术。本文将深度解析阿里云倚天云服务器的计算型c8y、通用型g8y、内存型r8y实例,探讨其优势及适用场景,以供选择参考。
|
5月前
|
弹性计算 安全 前端开发
阿里云服务器ECS通用型、计算型和内存型详细介绍和性能参数表
阿里云ECS实例有计算型(c)、通用型(g)和内存型(r)三种,主要区别在于CPU和内存比例。计算型CPU内存比1:2,如2核4G;通用型为1:4,如2核8G;内存型为1:8,如2核16G。随着技术迭代,有第五代至第八代产品,如c7、g5、r8a等。每代实例在CPU型号和主频上相同,但性能有所提升。实例性能参数包括网络带宽、收发包能力、连接数等。具体应用场景如计算型适合高网络包收发、通用型适合企业级应用,内存型适合内存数据库等。详细信息可参阅阿里云ECS页面。
304 0
|
21天前
|
弹性计算 关系型数据库 数据安全/隐私保护
阿里云国际版如何配置Windows服务器的虚拟内存
阿里云国际版如何配置Windows服务器的虚拟内存
|
3月前
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型r8i、通用算力u1、r7、AMD内存r8a、高主频内存hfr8i价格和性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2元起,4核32G从572.4元起,8核64G则从1144.8元起。公网带宽1Mbps预付费为23元/月,系统盘如ESSD PL1按量计费0.0021元/小时/GiB。具体价格与折扣请参考阿里云官网。
|
4月前
|
开发框架 Oracle 关系型数据库
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
|
4月前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置怎么选?ECS实例规格有啥区别?
阿里云服务器配置选择需考虑ECS实例规格、CPU内存、公网带宽与系统盘。个人开发者或中小企业推荐轻量应用服务器或ECS经济型e实例(2核2G3M带宽,99元/年),适合搭建低流量网站。企业用户应选择企业级独享型如通用算力型u1、计算型c7或通用型g7实例,至少2核4G内存起,推荐5M公网带宽以平衡成本与性能。系统盘推荐ESSD云盘以获得更好的性能。更多详情及链接参见原文。
99 3
|
4月前
|
存储 缓存 安全
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别
当我们在通过阿里云的各种活动选择云服务器实例规格的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。目前阿里云的活动中,主要的实例规格可分为经济型、通用算力型、计算型、通用型、内存型,对于很多初次接触阿里云服务器的用户来说,了解他们之间的差别就是比较重要的了,下面小编来为大家简单介绍下它们之间的区别。
阿里云服务器实例规格选择参考:经济型、通用算力型、计算型、通用型、内存型区别