前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次10TB级别的对象存储数据迁移

记一次10TB级别的对象存储数据迁移

原创
作者头像
辉哥L
修改2022-03-14 11:57:33
1.2K0
修改2022-03-14 11:57:33
举报
文章被收录于专栏:运维项目

背景

抛开业务背景保密不谈,技术背景为提升网络可靠性,需要将存储在对象存储平台A的文件迁移到对象存储平台B上。两个平台的技术差异很小,可以忽略。

数据量

有大约10个Bucket,总计约10TB数据量,文件数量约5万千。

迁移方案

迁移数据流设计

由于带宽和服务器等限制,计划使用一台中转服务器,负责从平台A下载文件到中转服务器,然后再上传到平台B。之所以这么设计,是考虑到了传输失败的可能性,如果设计为从A下载后不保存为文件,直接上传到B,一旦失败,则需要重新从A下载,因数据量太大,就考虑分步执行,可以分步重试,降低带宽压力,同时中转服务器上的文件也可以作为备份使用。

迁移量安排

由于数据量太大,带宽却不够,完成数据迁移需要大约半个月时间,安排停服半个月迁移是完全不可能的,因此考虑全量+增量的迁移方式。迁移前期,全量遍历所有bucket内的文件进行迁移,而在此期间,文件可能发生新增、删除和变更,这就需要在迁移切换之前和之后做增量迁移。

全量迁移

因数据量大,文件多,采用多线程的方案对文件进行迁移,必须记录和校验每个文件的迁移结果,以防遗漏

增量迁移

全量迁移完成后,这段时间发生变化的文件,需要在迁移切换之前和迁移切换之后,进行再次迁移。可以对迁移的文件结果进行记录,如在中转服务器和B上是否已存在该文件,如存在则不处理,不存在则执行迁移。迁移切换前做一次,可以保证迁移切换之后再做一次的耗时最短。迁移切换之后做一次,可以保证所有A的文件都能迁移到B。

优先文件迁移清单

如果业务可以承受短时间少数文件的缺失,并要提前开启服务,可以考虑优先文件同步清单方案。该方案旨在将业务常用,或近期要使用的文件清单找出来,并在迁移切换后优先迁移,这样就可以在全量扫描增量同步的长耗时中,把这部分文件优先迁移过来,快速恢复服务。

文件权限校验和设置

对象存储上的文件,有可能全是公开的也有可能全是私密的,这是两种比较好处理的情况,在迁移的时候直接设置即可。但是一旦研发不能保证权限是否公开或私密时,需要运维对其进行校验,并保证迁移后的权限一致性。

迁移状态记录和校验

可以使用redis对每个文件的迁移状态进行记录,包括迁移是否完成,迁移文件的md5值等校验值。每次迁移之后,需要对redis的所有记录进行比对,确保迁移的数量和内容的一致性。

账号迁移

需要考虑到账号迁移的环节,避免到时候紧急开通检查时间不足,导致权限问题的发生。

账号禁用

迁移完成后需禁用业务使用的账号,保证其不会再从A访问资源,避免迁移遗漏。

回退方案

一旦迁移不顺,或者有其他突发情况导致必须回退,除业务考虑外,对象存储本身无需太多操作,启用账号即可。如果业务已经在B产生了文件变更,需要查出来这部分变更清单,并将这部分文件反向同步到A上去。

研发配合

在研发角度,对象存储迁移,可能需要考虑几个问题:

1,对象存储的地址,是怎么存储到数据库中的?理想情况,endpoint、bucket name作为服务配置存储,修改一处全部生效,path则为每个文件单独存储。那么,实际的endpoint、bucket name、path这些是不是分别存储的?如果endpoint、bucket name存储到每个文件路径中了,迁移后如何处理?是否需要修数?还是修改程序对文件路径的组装方式?需要按实际情况进行评估。

2,是否需要兼容迁移前后的地址,优先从迁移后的地址进行读写,找不到文件则从迁移前的地址读取。这么做可以防止迁移出现完整一致性问题时,影响业务,但是会消耗更多时间人力来完成迁移。

总结

数据量大的数据迁移,除了基本的完整一致性考虑之外,还要更多地考虑时效性,以满足业务需求。抛开技术,执行数据迁移需要和业务方做好沟通,各种风险和安排都通知到位,才能把事情做得漂亮。

题外话

这里吐槽几个对象存储的不好的使用案例,引以为戒。

1,对象存储的配置元信息和业务信息没有分开。比如说,将Endpoint, Bucketname, AccessKeyID, AccessKeySecret直接和Path混合,并存储到数据库中。一旦前四项配置任何一个发生变更,都需要对数据库内的数据进行修正,才能保持数据正确。理想的做法是:前四项配置作为服务配置存储到一个位置,服务读写的时候,将其组装起来使用,一旦发生变更,只需修改一处即可。

2,账户安全防范措施较差,比如将AccessKeyID, AccessKeySecret分享给用户直接使用。应该使用AccessKeyID, AccessKeySecret生成临时的带指纹的文件链接,过期失效,不会泄漏认证信息。或者本来应该私密的文件,被暴露到公网环境中,且没有定期巡检。

3,大文件的上传下载,使用服务后端中转。抛开一些需要中转处理的情况,在做好安全管控的前提下,可以将对象存储的上传下载等文件传输操作,直接交给前端--对象存储服务来交互,减少中间环节,提升传输效率,特别是文件较大的情况。

4,对象存储上创建目录,对象存储的本质是键值对存储,键的常规用法有点像文件路径,值就是文件。一个目录实际上就是一个键是目录字符串,值是目录类型的文件,用处不大,要目录直接上传带该目录路径的文件即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 数据量
  • 迁移方案
    • 迁移数据流设计
      • 迁移量安排
        • 全量迁移
          • 增量迁移
            • 优先文件迁移清单
              • 文件权限校验和设置
                • 迁移状态记录和校验
                  • 账号迁移
                    • 账号禁用
                      • 回退方案
                      • 研发配合
                      • 总结
                      • 题外话
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档