阿里云OSS迁移工具ossimport实战心得

前言

        由于业务的增长,传统的基于磁盘的文件存储需要迁移到阿里云OSS对象存储中。我们的业务主要是涉及GPS轨迹小文件,大致有1TB,文件数量5千万。在使用阿里云ossimport工具的过程中有些基本概念不明确,导致了一些操作失误,特写下本文记录实战过程中的一些问题。

环境

  • Ubuntu(阿里云ECS)
  • 数据盘1TB,5千万个文件,数据层级最大6层
  • 业务持续读写数据盘
  • ossimport使用local模式,单机部署通过内网传输,使用方法请参考官方文档

问题汇总

ossimport具体怎么用?

        首先肯定是下载ossimport到主机中,然后unzip解压,然后修改conf中的配置文件。我们实战过程中仅修改了以下配置,请酌情参考:

  • srcPrefix:要上传的文件夹全路径
  • destAccessKey:OSS密钥
  • destSecretKey:OSS密钥
  • destDomain:OSS上传域名,可在控制台中查看,如果内网能通建议使用内网(免流量费)
  • destBucket:目的bucket,只填名称,不是路径
  • destPrefix:OSS中的路径,不要以“/”开头,不然会报错
  • taskObjectCountLimit:子任务最大的文件个数,见下文
  • workerTaskThreadNum:在sys.properties中,见下文

        需要明白srcPrefix和destPrefix的关系,比如本地路径:/data/files/gps/1.gps,如果srcPrefix配置为:/data/files/,destPrefix配置为:files/,那么OSS中文件访问路径则为:files/gps/1.gps。

        配置完成后直接使用./import.sh即可开始上传,如果之前上传过则会提示是否放弃之前的日志文件,输入y即可。

线程数怎么配置?

        在conf/sys.properties里面可以通过workerTaskThreadNum配置线程数。线程数建议根据机器硬件资源酌情配置,可以使用默认配置尝试运行查看具体的CPU和内存消耗。我们8核32G的机器配置的是100个线程,实际CPU消耗45%左右,内存上升不明显。在我看来应该是和文件大小和数量有关系,所以可以先在某一个文件夹测试后再做决定。

子任务最大的文件个数怎么配置?

        在conf/local_job.cfg里面可以通过taskObjectCountLimit配置子任务最大的文件个数。此参数十分重要,决定了上传的速度。建议设置为1000-10000之间,由文件数量决定。比如共10万个文件,线程数为100,此参数设置为1000时则会跑满100个线程,即速度最快;如果设置为10000,则只会使用10个线程,相比之下速度差距是很大的。当然并不是越小越好,线程切换和初始化都是需要时间的,我们文件数量太大,实际使用的值是10000。当然我的理解不一定准确,是在本次迁移时得出的经验总结,欢迎指正。

迁移过程中怎么查看进度?

        在执行./import.sh后会打印开始上传,上传任务是在后台进行的,可以直接使用ctrl+c退出,不影响后台上传任务。如果不退出,程序会每30s打印一次job状态,输出内容如下:

---------------- job stat ------------------
JobName:local_test
JobState:Running
PendingTasks:0
DispatchedTasks:160
RunningTasks:100
SucceedTasks:300
FailedTasks:0
ScanFinished:true
TotalFileCount:4594039
TotalFileSize:165240197722
FailedFileCount:0
RunningTasks Progress:
26D7FFA590E79C6DB605C7620A137AF7_1689756034461:358418080/358418080 10000/10000
FE87826B81BD5C4FAAAB1D46C6C784A7_1689755926530:423527527/423527527 10000/10000
C1C8E718F992115F570C9DD93F8EBC98_1689756070177:364428333/364428333 10000/10000
BD5789F28B1579AC72F5E36D14E8503E_1689756175042:374358890/374358890 10000/10000
...省略若干...

       其中需要关注的内容如下:

  • DispatchedTasks:已分配的任务数量,会根据已扫描的文件数量、线程数、子任务文件数进行自动创建任务
  • RunningTasks:正在运行中的任务,包含上传和检查
  • SucceedTasks:成功的任务数,结合已分配的数量可以大致知晓目前进度
  • FailedTasks:失败的任务
  • ScanFinished:是否扫描完成所有文件
  • TotalFileCount:已扫描的文件数量
  • TotalFileSize:已扫描的文件大小(B)
  • FailedFileCount:失败的文件数量

任务全都显示1000/1000,但是不进行下一个任务?

        先说结论:耐心等待即可,不要做任何操作。我最开始也是看到任务一直卡住,明明显示任务中的文件都上传完成了,但是迟迟不开始下一任务进程,但是还结束整个进程重试了很多次,每次都会遇到这种情况。后面在log中查看import.log发现在上传完成后还会有一个check的过程,check过程中未输出任何日志,所以看起来是卡死了,其实程序在对已上传的文件进行校验,所以只需等待即可。

上传过程中的计费项有哪些?

  • 流量费用:上传到OSS端免流量费,但是从云服务器出网需要流量,如果云服务器和OSS在同一VPC下可以通过内网直接上传,此时流量全免费
  • PUT请求费用:上传一个文件计一次PUT请求,阿里云收费0.01/万次
  • GET请求费用:验证文件是否存在和统计OSS文件数量时会收费,阿里云收费0.01/万次,ossimport可能还会由一些其它的必要请求,不过整体成本还算可控

        一点小建议,不要中断ossimport任务,让ossimport一次性上传完成可以节省很多GET费用,我们一开始中断了多次,导致了很多无效的GET请求,不过还好收费不算高。

上传过程中的注意事项?

  • 在扫描的过程中如果已被程序记录的文件被业务系统删除了会导致该文件失败,当然还有其它的情况,我们只遇到了这一种。如果有失败的文件,上传后会询问是否重传失败的文件,可以根据error.log中的错误类型决定是否重传
  • 上传过程中如果业务系统有写操作,则不能保证新增的数据被上传,需要自行适配增量数据的重传逻辑。我们是记录一个上传开始的时间,只要在该时间之后写过的文件都重新覆盖上传一遍

上传成功后业务怎么迁移到OSS中?

        每个业务系统落地方案都不禁相同,我这里大致描述一下我们的迁移步骤。

  1. 迁移本地文件到OSS,此时有业务产生的增量数据在本地未上传
  2. 修改业务代码适配OSS相关文件操作
  3. 重启业务服务,所有访问重定向到OSS,所有新增数据业务直接上传OSS,此时上传阶段的增量数据无法访问,业务会受影响
  4. 上传迁移期间的增量数据到OSS,业务恢复,迁移完成

        上述流程最大的问题是迁移时的增量数据会有一段时间访问不到,如果增量数据过多则会导致业务影响范围扩大,所以应当在业务低峰进行服务重启。当然也有无缝解决方案,阿里云OSS提供了回源配置,在OSS中找不到文件时会到源站下载转发,具体可以查看官方文档。我们业务低峰可保证增量数据在10分钟内上传完毕,且业务端对于增量数据的请求并不多,所以未进行回源的实践。

如果看完有收获可以来个三连,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试 Linux 环境下模拟延时和丢包实现

在性能测试过程中,我们还需要模拟网络异常的情况下,是否会出现一些异常数据。最常见的就是写库操作,比如说我们下单的场景,如果出现网络异常的时候是否会出现数据对不上这种情况。 如我们JMeter发送成功的请求数量和最终数据库表…

linux之Ubuntu系列(五)用户管理、查看用户信息 终端命令

创建用户 、删除用户、修改其他用户密码的终端命令都需要通过 sudo 执行 创建用户 设置密码 删除用户 sudo useradd -m -g 组名 新建用户名 添加新用户 -m:自动建立用户 家目录 -g:指定用户所在的组。否则会建立一个和用户同名的组 设置新增用户的密码&…

Git源代码管理方案

背景 现阶段的Git源代码管理上有一些漏洞,导致在每次上线发布的时间长、出问题,对整体产品的进度有一定的影响。 作用 新的Git源代码管理方案有以下作用: 多功能并行开发时,测试人员可以根据需求任务分配测试自己的功能&#…

Ceph 分布式存储之应用

一、创建 CephFS 文件系统 MDS 接口 1、服务端操作 1)在管理节点创建 mds 服务 [rootadmin ceph]# cd /etc/ceph [rootadmin ceph]# ceph-deploy mds create node01 node02 node03 [ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.c…

.Net5 mvc项目UseBrowserLink插件功能失效的原因

前期基于.Net Framework创建的Web项目,使用了BrowserLink插件协助前端开发,功能一直都比较稳定,后来项目迁到.Net5 ,发现BrowserLink 已经失去了从浏览器定位到项目源代码的功能,希望在后面的版本还能继续支持此版本&a…

Velocity如何对变量中的引号特殊字符进行转义

简介 Velocity是一个基于Java的模板引擎,与Freemarker类似。相较于Freemarker更轻量,但带来的问题就是功能不如Freemarker强大,所以实际项目中可能会更倾向于用Freemarker,这里不作过多介绍了,本文主要记录一下在使用…

国内流行的数据可视化软件工具

在信息爆炸的时代,越来越多的数据堆积如山。但是,这些密集的数据没有重点且可读性较差。因此,我们需要数据可视化来帮助数据易于理解和接受。相比之下,可视化更直观、更有意义,使用适当的数据可视化工具来可视化数据非…

golang整合kafka

kafka 基本概念 消息队列 1、什么是消息队列 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue&…

SDN系统方法 | 1. 概述

随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…

基于FT232HL的USB2.0转ARINC429板卡

基于FT232HL的USB2.0转ARINC429板卡 1 概述 《USB2.0转ARINC429板卡》采用底板子板,层叠安装的结构;使用同样的底板,变换不同功能的子板实现不同的功能版本。 a) 降低硬件设计复杂度:新板卡设计只需要设计子板,子板的…

MySQL中这14个小玩意,让人眼前一亮!!!

前言 我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中…

《动手学深度学习》(pytorch版本)中`d2lzh_pytorch`包问题

《动手学深度学习》(pytorch版本)中d2lzh_pytorch包问题

机器视觉检测系统不稳定因素分析

机器视觉的研究始于20世纪50年代二维图像的模式识别,它起初被设计用来代替人眼从事检测识别的工作,可以大大提高检测的工作效率以及降低人眼疲劳带来的检测结果的不一致性。机器视觉检测发展至今,在许多方面已经发展到可以完成人眼难以完成的工作,如高精度的测量以及对特定…

倍福TwinCAT运动控制学习资料

学习倍福控制器和EtherCAT协议的时候,TwinCAT3是非常有必须要学习的。TwinCAT软件其功能强大,可以写plc程序,可以写图形化界面,可以观察波形等等。初次学习时参考TwinCAT3 入门教程和TwinCAT 3运动控制教程,把TwinCAT …

【深度学习】张量的广播专题

一、说明 张量广播(tensor broadcasting)是一种将低维张量自动转化为高维张量的技术,使得张量之间可以进行基于元素的运算(如加、减、乘等)。在进行张量广播时,会将维度数较少的张量沿着长度为1的轴进行复制…

YOLOv5图像和视频对象生成边界框的目标检测实践(GPU版本PyTorch错误处理)

识别图像和视频里面的对象,在计算机视觉中是一个很重要的应用,比如无人驾驶,这个就需要实时的检测到周边环境的各种对象,并及时做出处理。目标检测在以往的文章中有重点讲解过几种,其中Faster R-CNN的源码解读&#xf…

7.kafka+ELK连接

文章目录 kafkaELK连接部署Kafkakafka操作命令kafka架构深入FilebeatKafkaELK连接 kafkaELK连接 部署Kafka ###关闭防火墙systemctl stop firewalld systemctl disable firewalldsetenforce 0vim /etc/selinux/configSELINUXdisabled###下载安装包官方下载地址:ht…

Vue自定义指令

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。 自定义指令函数式v-big: &l…

java设计模式之 - 建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它通过将对象的构建过程分离出来,使得同样的构建过程可以创建不同的表示形式。 简单来说,建造者模式允许你按步骤创建复杂的对象,同时将对象的构建与其表…