Tair数据迁移三步走

作者: 高广超 | 来源:发表于2017-08-29 10:38 被阅读140次
    image.png

    迁移的三个阶段

    在多机房数据迁移中,整个过程分为三个阶段:历史数据迁移阶段、redolog迁移阶段、实时复制阶段。

    1 历史数据迁移

    历史数据的迁移使用一个队列完成,这个队列由多个线程消费。迁移模块保存一个本dataserver的主桶有序序列,存储引擎顺序按桶扫描所有数据(对ldb引擎来讲,是扫描memtable、immutable memtable和所有的SSTable),并将扫描到的数据放到队列里。主线程会同步等待每个桶的数据同步完成,然后在从机房上打上标签,每次同步前都会判断这个标签,避免重启后历史数据重迁。

    2 redolog迁移

    由于在历史数据同步时,client又会有新的写入,新写入的key可能已经被扫描过,所以如果不记录这些操作,这部分数据可能会被丢失。

    对历史数据迁移来讲,桶有三种状态:已迁移、正在迁移、未迁移

    redolog只记录“正在迁移”的桶的新写入请求。对于已迁移的桶的新写入请求,把它放到实时迁移队列,对于未迁移的桶的新写入请求,不做特殊处理,因为等到迁移这些桶时,数据已经落到ldb上。

    image.png

    当一个桶的ldb数据迁移完成时,立即开始迁移新产生的log。迁移log时,也可能会有新的写入,当剩余log很大时,新的写入会追加到log;当剩余log小于一定阈值后,会锁定log,新的写入会被阻塞,直到log迁移完毕后,再将被阻塞的请求放到实时复制队列里。
    redolog的迁移使用多个队列,根据请求key的hash值放到不同的队列里,每个队列只有一个消费线程,这样来保证相同key的时序性。

    3 实时复制

    实时复制也使用多个队列,根据请求key的hash值放到不同的队列里,每个队列只有一个消费线程,来保证相同key的时序性。

    如上所述,当一个桶的历史数据、redolog迁移完毕后,新的请求就会放到实时队列里。


    个人介绍:

    高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能互联网架构。

    本文首发在 高广超的简书博客 转载请注明!

    image.png

    相关文章

      网友评论

        本文标题:Tair数据迁移三步走

        本文链接:https://www.haomeiwen.com/subject/nhcodxtx.html