• 数据库平滑迁移方案与实践分享


    背景:
         在一个数据库中存在A表与B表,但AB两个表按目前架构边界划分的话,是属于两个组织下的两个系统,导致相互之间有稳定性风险。为增强系统稳定性,进行存储分离。准备将B表的所有数据,迁移到新库中。

    可能存在的问题:
    1、由于原来的AB表在一个数据库中,代码中可以用事务控制两个表,迁移后不支持本地事务,如何解决?
    2、原来是一个数据源,现在分为两个数据源,如何解决?
    3、由于这两个表,是核心链路的核心数据,迁移过程无法停机迁移,如何保证安全稳定的不停机平滑迁移?
    4、迁移过程如何保证数据一致?

    迁移准备工作:
    1、表准备
    2、事务支持需要找相关人员确认,应对事务解耦后的方案
    3、数据源梳理

    集群迁移方案:
    一、整体方案
    DBA线上创建新数据库,同步原数据库数据; 
    1、全量同步方案: 源库导出数据进行全量初始化,dba通过多线程抽取源数据进行插入
    2、增量同步方案: 记录全量时刻的binlog位点,通过binlog进行数据增量同步  增量数据进行数据一致性校验,通过工具进行数据校验;
    3、系统中配置多个数据源,涉及到的表具有开关;可进行双写、指定写新库/老库,指定读主库/新库
    4、代码上线 ,上线后写老库,读老库;不做任何变更
    5、增量数据此时已经开启;
    6、选取流量低峰期打开双写开关,观察写新库是否存在报错,且对整体的tps是否有影响;大约5min左右
    7、关闭增量数据同步,观察30min,无异常报错,且数据正常写入,只保留双写。 此时数据校验进行新增数据校验;如果产生问题,进行开关回切,增量binlog继续打开
    8、观察业务有无异常,跑一周时间,观察数据是否有告警
    9、切换读新库,跑一周时间
    10、无异常,选取流量低峰期进行 大数据切换读新库备份机、binlog切换读新库备份机,此时会有一小段时间的重复数据产生,下游数据需要自己保证幂等性。
    11、关闭老库写操作
    12、跑一段时间,无问题,完全走新库
    二、具体流程图

    注意点:
    原数据库的binlog事件,需要提前接入;binlog监听维度的切换是在代码上线之前即可监听,外围需要保证幂等性;
    大数据是否有抽取数据,需要确认;切换完成后,需要抽取新的库数据;  大数据进行抽数需要进行lion变更;
    确认update是否会进行覆盖,可能存在覆盖,但是两者应该最终一致
    迁移过程可控,问题可发现;老库写入确保无问题
    binlog数据消费可能早于新库写入,因此切换读流量前需要进行binlog切换
    乐观锁多版本更新,系统异常可感知,业务异常不可感知,乐观锁更新双写情况下保证最终一致性
    查询业务流量做比对

    风险点: 
    由于连接修改在mapper层面,防止有mapper.method方法覆盖不全导致的写数据丢失
    需要增加比对数据任务,进行数据比对
    需要增加同步数据任务,防止切换过程数据丢失,进行数据弥补
    数据比对、数据修复脚本、告警:

    通过脚本(增量数据比对)
    job手工比对(存量数据的比对)
    修复数据job(指定表,指定更新时间范围)—相当于后门

  • 相关阅读:
    架构师之路(4)详解面向对象 王泽宾 (转)
    输出螺旋矩阵(一)
    输出螺旋矩阵(三)
    excel sheet中数据的快速复制
    计算数组的维数
    不绑定记录集获取datagrid某行某列的内容
    API判断数组是否为空
    将某网页的某框架内容显示在WEBBROWSER中
    输出螺旋矩阵(二)
    快速删除一个包含文件和子文件夹的文件夹
  • 原文地址:https://www.cnblogs.com/whgk/p/15567122.html
Copyright © 2020-2023  润新知