Code Monkey home page Code Monkey logo

cos_migrate_tool_v5's Introduction

迁移工具

功能说明

迁移工具集成了有关COS数据迁移的功能, 目前支持以下四大类迁移

  • 本地数据迁移到COS, 功能同之前的本地同步工具
  • 友商数据迁移到COS, 目前支持aws s3, 阿里云oss, 七牛存储, 又拍云存储
  • 根据url下载列表进行下载迁移
  • COS的bucket数据相互复制, 支持跨账号跨地域的数据复制

运行依赖

  • JDK1.8或以上, 有关JDK的安装请参考JAVA安装与配置
  • linux或windows环境, 推荐linux

打包方式:

如果需要修改源码,重新打包,需要先安装maven并配置环境变量,确保maven可用。

  • 在windows环境下,进入opbin目录,直接双击运行rebuild.bat,新生成的cos_migrate_tool-1.4.8-jar-with-dependencies.jar会复制至dep目录下;
  • 在Linux环境下,进入opbin目录,直接sh rebuild.sh,新生成的cos_migrate_tool-1.4.8-jar-with-dependencies.jar会复制至dep目录下;

使用范例

  1. 配置全部通过配置文件读入 sh start_migrate.sh
  2. 指定部分配置项以命令行为主. sh start_migrate.sh -DmigrateLocal.localPath=/test_data/aaa/ -Dcommon.cosPath=/aaa sh start_migrate.sh -DmigrateAws.prefix=/test_data/bbb/ -Dcommon.cosPath=/bbb

迁移机制

迁移工具是有状态的,已经迁移成功的会记录在db目录下,以KV的形式存储在leveldb文件中. 每次迁移前对要迁移的路径, 先查找下DB中是否存在, 如果存在,且属性和db中存在的一致, 则跳过迁移, 否则进行迁移。这里的属性根据迁移类型的不同而不同,对于本地迁移,会判断mtime。对于友商与bucket复制,会判断源文件的etag和长度是否与db一致。 因此,我们参照的db中是否有过迁移成功的记录,而不是查找COS,如果绕过了迁移工具,通过别的方式(比如coscmd或者控制台)删除修改了文件,那么运行迁移工具由于不会察觉到这种变化,是不会重新迁移的。

其他

请参照COS迁移工具官网文档

cos_migrate_tool_v5's People

Contributors

jackyding2679 avatar kitmanzheng avatar liuyongqing avatar wucheng avatar zephyr2222 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cos_migrate_tool_v5's Issues

jdk1.7上运行报错,1.7的缺少依赖

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/qcloud/cos_migrate_tool/app/App : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

windows下运行报错

Exception in thread "main" java.lang.ExceptionInInitializerError
at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
at org.rocksdb.RocksDB.(RocksDB.java:35)
at org.rocksdb.Options.(Options.java:25)
at com.qcloud.cos_migrate_tool.record.RecordDb.init(RecordDb.java:47)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.initRecord(TaskExecutor.java:97)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.run(TaskExecutor.java:149)
at com.qcloud.cos_migrate_tool.app.App.main(App.java:60)
Caused by: java.lang.UnsupportedOperationException: Cannot determine JNI library name for ARCH='x86' OS='windows 10' name='rocksdb'
at org.rocksdb.util.Environment.getJniLibraryName(Environment.java:78)
at org.rocksdb.NativeLibraryLoader.(NativeLibraryLoader.java:19)
... 7 more

目测和RocksDB有关

建议用go语言重构此工具

建议用go语言重构此工具,无需依赖,编译多平台,使用简单方便。由于java环境问题,在一些windows下的老财务软件环境冲突,会造成此工具本地迁移无法使用。
目前依赖java也增加了部署使用成本。

未同步元数据

从阿里云同步时,阿里云http头为:Content-Type:image/jpeg , 同步后变为:Content-Type:application/octet-stream

使用copy功能时,如果源路径和目标路径一一致,则失败

上述路径,指的完整url,域名+对象文件名。
如果一致,相当于覆盖修改源文件,此时需要x-cos-metadata-directive 设置成 Replaced。
希望工具能把此功能参数加上。

x-cos-metadata-directive

是否拷贝元数据,枚举值:Copy, Replaced,默认值 Copy。假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制;假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 Replaced。

https://cloud.tencent.com/document/product/436/10881

关于增加删除原始数据的功能

因为文件系统价格更高,需要把文件系统的日志等数据迁移到cos归档存储,建议增加删除原始数据的功能,在配置文件中可以配置

Windows下,指定部分配置项的命令行操作无效

start_migrate.bat -DmigrateLocal.localPath=/test_data/aaa/ -Dcommon.cosPath=/aaa/

上面这样的命令,2个配置项不起作用。

得自己另外建一份start_migrate_two.bat,并在java的执行语句中添加配置项,如:
java -Dfile.encoding=UTF-8 -DmigrateLocal.localPath=/test_data/aaa/ -Dcommon.cosPath=/aaa/ -cp "%my_java_cp%" com.qcloud.cos_migrate_tool.app.App

腾讯云cos迁移bug

migrateBucketCopy跨账号迁移使用中发现cos迁移的错误码除了405还有403,确认id和key有相关权限,需要在com.qcloud.cos_migrate_tool.task.MigrateCopyBucketTask#doTask方法中增加403状态码判断,已测试ok,原始错误如下。

exception: com.qcloud.cos.exception.CosServiceException: Failed to query the state of source object (Status Code: 403; Error Code: AccessDenied; Request ID: NWZiMzkxMjBfOTYyMjViNjRfN2UzMF8yZTc2Y2E3); Trace ID: OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTQyYWVlY2QwZTk2MDVmZDQ3MmI2Y2I4ZmI5ZmM4ODFjMjlkNDc5MDI0NDIwYzljZGI5MDNiMTg1N2NmNzMyYzQ=

windows2008下重复开关cos工具造成磁盘占用率持续上升

系统:windows 2008 r2
jdk:1.8
dep:cos_migrate_tool-1.0-jar-with-dependencies.jar
特定配置:deamon=off
问题描述:
定时运行cos同步工具,在%TEMP%,即用户temp缓存文件夹每次运行都会产生一个librocksdbjnixxx.dll文件
image
每5分钟一次7天后磁盘占用上升10GB,占用率超80%告警

aarch64 cpu librocksdbjni.so error

openjdk1.8 openjdk11

run sh

sh start_migrate.sh -DmigrateLocal.localPath=/test_data/aaa/ -Dcommon.cosPath=/aaa

error

cos migrate tool config path:conf/config.ini
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/librocksdbjni14877368951896297594.so: /tmp/librocksdbjni14877368951896297594.so: cannot open shared object file: No such file or directory (Possible cause: can't load AMD 64-bit .so on a AARCH64-bit platform)
at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2432)
at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2489)
at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2689)
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2619)
at java.base/java.lang.Runtime.load0(Runtime.java:765)
at java.base/java.lang.System.load(System.java:1835)
at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:78)
at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:56)
at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
at org.rocksdb.RocksDB.(RocksDB.java:35)
at org.rocksdb.Options.(Options.java:25)
at com.qcloud.cos_migrate_tool.record.RecordDb.init(RecordDb.java:55)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.initRecord(TaskExecutor.java:184)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.run(TaskExecutor.java:236)
at com.qcloud.cos_migrate_tool.app.App.main(App.java:135)

关于增加自动刷新CDN URL功能的建议

本地源迁移至COS的一个功能建议:

因为大多数时候COS都是跟CDN联用的,但是当修改了本地文件内容(不是新建)然后通过此工具上传至COS时,CDN需要很长一段时间才会重新部署更改后的文件,这时就需要手动刷新URL。

根据这个文档,(https://cloud.tencent.com/document/product/228/3946 ),能不能把刷新 URL 作为 config.ini (config.ini 中也设置了刷新URL功能所需的 secretID 和 Signuture)中的一个选项集成进去?

这样会很方便,尤其是当把COS开启静态网站后当做HEXO博客的托管容器时(这么做的人还不少),设置了HEXO生成的public文件夹绝对路径后每次hexo g,直接运行start_migrate.bat,一键上传至COS生效,感觉这样会比较省事。

可能我的建议在描述上有问题,因为是个小白,请多担待。

同步阿里云OSS数据失败

使用工具同步OSS数据时,日志给出以下警告:

2020-07-15 13:37:58 [WARN ] [pool-1-thread-13:11200] [com.aliyun.oss:] [LogUtils.java:70]
[Client]Unable to execute HTTP request: Connection reset
[ErrorCode]: SocketException
[RequestId]: Unknown

是因为阿里云有下载限制吗?等了一段时间之后还是同样的问题。

linux 运行报错ELF file OS ABI invalid

[root@VM_9_8_redhat cos_migrate_tool_v5-1.3.0]# uname -a
Linux VM_9_8_redhat 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@VM_9_8_redhat cos_migrate_tool_v5-1.3.0]# sh start_migrate.sh
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/librocksdbjni2829646965401100715.so: /tmp/librocksdbjni2829646965401100715.so: ELF file OS ABI invalid
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:78)
at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:56)
at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
at org.rocksdb.RocksDB.(RocksDB.java:35)
at org.rocksdb.Options.(Options.java:25)
at com.qcloud.cos_migrate_tool.record.RecordDb.init(RecordDb.java:47)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.initRecord(TaskExecutor.java:97)
at com.qcloud.cos_migrate_tool.task.TaskExecutor.run(TaskExecutor.java:149)
at com.qcloud.cos_migrate_tool.app.App.main(App.java:60)
[root@VM_9_8_redhat cos_migrate_tool_v5-1.3.0]#

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.