数据扩容
扩容挑战
-
基因位数增加:扩容可能会导致基因位增加,导致原来的基因路由规则失效
-
新旧基因兼容:迁移过程中,新写入的数据必须同时按照新规则和旧规则分别写入
两种执行方案
-
暂停所有服务,迁移完数据之后再重启服务
-
服务运行的同时进行数据迁移,此时要用到双写方案
双写与基因升级
结合数据迁移和基因升级,整个过程要求应用程序支持同时向新旧两个分片集群写入数据

详细流程
准备工作
-
部署新集群:搭建好包含新的分片个数的新MySQL集群
-
升级应用代码:开发并发布支持双写的新版本应用代码。代码需要:
-
新的路由逻辑:支持新的分片,数据能按照新的分片规则写入新的基因库。
-
双写逻辑:对于任何写操作(增、删、改),在写入旧分片数据库的同时,也必须写入新的数据库。
-
读逻辑降级:完成数据迁移前,读请求仍然从旧集群读取,以保证数据一致性。
-
数据校验
-
从旧的数据库集群逐个读取数据,对于每条数据,计算新的分片位置,并将数据插入到新的集群中
-
在迁移过程中,旧集群数据一直在被修改,迁移工具还需要记录一个Binlog位置点,全量迁移完成后,继续同步这个点之后的增量数据,知道追平
数据校验
-
编写数据校验工具,对比新旧集群的数据一致性
-
逐条检查核心字段是否一致。
-
修复校验过程中不一致的数据
流量切换
-
灰度读验证:选择一个非核心业务或少量用户,将其流量切换到新集群,检查业务是否正常,数据是否准确
-
全面读切换:灰度验证无误之后,将全部流量切换到新集群,此时,流量仍然保持双写
-
最终验证:观察一段时间后,确定新集群能够承受所有流量后一切正常
-
停写旧集群:关闭旧集群的双写逻辑,只写入新集群,新集群成为主集群
清理监控
-
监控新集群
-
下线旧集群:确认业务稳定后,保留旧集群一段时间后再物理删除,以备回滚
858

被折叠的 条评论
为什么被折叠?



