用ossutil来同步Ecs数据到Oss的object

前言:
公司的Ecs的数据盘即将爆之至.公司想省点钱。想把数据全部存储到oss。这样就不用在ecs本地存储同样的数据了,于是就开始着手想办法把ecs的数据同步到oss,开始想到的办法是通过外网地址遍历服务器上的每个文件,这样oss就会把访问过的文件同步到oss,由于文件量太大。文件总数:1,806,552,文件大小:425G… 全部遍历恐怕时间太久,再加上外网访问..也是耗费太多系统带宽。接着就开始找相关资料,联系过阿里客服,客服说只能把oss的数据挂在到本地不支持ecs同步到oss。…碎了。最后去阿里云论坛尝试了多款工具… ossimport2 &@%^*#^^@*( 本文只围绕osscmd和ossutil展开讲解)
OssUtil快速同步Ecs数据到Oss:[400G的数据83分钟搞定.]


大纲
-Oss常用工具介绍
-服务器和Oss上文件情况
-OssUtil OssCmd的安装
-OssCmd的使用及案例说明
-OssUtil的使用及案例说明
-总结和建议
1.Oss工具介绍
下面是比较常用的工具,OssBrowser主要用于同步后方便文件进行管理,类似Windows文件管理器,本文将使用OssCmd来实现从Ecs将数据同步到Oss对应的Bucket。


2.服务器上的upload文件夹情况
# ls -lR | grep "^-" | wc -l
# ls -lR | wc -l 递归统计目录下的文件个数

uploads 总大小为425G,文件的总数为:1,797,803个
#du –h
/data/wwwroot/cshixi/Public/uploads/Android 41M
/data/wwwroot/cshixi/Public/uploads/Appliance 1.7M
/data/wwwroot/cshixi/Public/uploads/attachment 108G
/data/wwwroot/cshixi/Public/uploads/banner 3.8M
/data/wwwroot/cshixi/Public/uploads/cert 19M
/data/wwwroot/cshixi/Public/uploads/dasai 24K
/data/wwwroot/cshixi/Public/uploads/files 187G
/data/wwwroot/cshixi/Public/uploads/help 7.7M
/data/wwwroot/cshixi/Public/uploads/images 129G
/data/wwwroot/cshixi/Public/uploads/medal 4.7M
/data/wwwroot/cshixi/Public/uploads/other 6.7M
/data/wwwroot/cshixi/Public/uploads/videos 1.6G
Oss上的upload文件夹情况:
Upload总大小为:417.11GB,文件总数为:1,799,367
统计Oss的bucket中一个object下的文件个数:
#ossutil64 ls oss://ibodao-file/Public/uploads/ -s -e oss-cn-hangzhou-internal.aliyuncs.com -i LTAIB86CAAG9JLav -k G8GaiudF0usChi7nsgLVrP7j8MEfvs |wc –l

oss://ibodao-file/Public/uploads/Android
oss://ibodao-file/Public/uploads/Appliance
oss://ibodao-file/Public/uploads/attachment
oss://ibodao-file/Public/uploads/banner
oss://ibodao-file/Public/uploads/cert
oss://ibodao-file/Public/uploads/dasai
oss://ibodao-file/Public/uploads/files 437542个文件
oss://ibodao-file/Public/uploads/help
oss://ibodao-file/Public/uploads/images 763610个文件
oss://ibodao-file/Public/uploads/medal
oss://ibodao-file/Public/uploads/other
oss://ibodao-file/Public/uploads/videos
3.工具安装
3.1)工具下载地址:链接:https://pan.baidu.com/s/1i4MDEjN 密码:atbv
(我把工具都下载好之后,重新整理了下。Ossutil直接放入了Osscmd包里面,所以使用的时候只需要给工具执行权限即可~)
oss-browser直接去git找对应系统的版本下载即可。
https://github.com/aliyun/oss-browser
关于oss-browser的登陆。直接使用Access Key登陆即可!
3.2)安装步骤:
#cd /home/Ossutil_Osscmd //下载解压后进去目录
#python setup.py install //安装osscmd工具
#chmod +x ossutil //赋予执行权限
#chmod +x osscmd //赋予执行权限
#ln –s /home/Ossutil_Osscmd/ossutil /usr/bin //让ossutil命令全局生效
#ln –s /home/Ossutil_Osscmd/osscmd l /usr/bin //让osscmd命令全局生效
4.OssCmd的使用及案例说明
osscmd:是基于Python SDK的,需要python版本2.5-2.7之间。
OssCmd使用说明:
http://note.youdao.com/noteshare?id=51315a95f24b5146e9da38d54385b17d
配置osscmd使用的默认host,ID和KEY。默认的host为oss.aliyuncs.com 如果需要访问oss-internal.aliyuncs.com可以加上--host=oss-internal.aliyuncs.com。 sts_token为非必需参数,当填写sts_token参数时,工具则以STS的方式进行鉴权。
4.1)Osscmd示例:
示例1:查看所有的Bucket:

# osscmd gs --id=Lejk2jde2dkedoi --key=G8DH2EKDHJDfvs --host=oss-cn-****.aliyuncs.com   [--id --key 为access key 的密码部分]
CreateTime BucketLocation BucketName
2017-05-13 11:46:00 oss-cn-hangzhou binfennanjun
2017-02-28 09:10:50 oss-cn-hangzhou I****-bbs
2017-02-22 11:53:33 oss-cn-hangzhou I****-file
2017-02-24 15:32:56 oss-cn-hangzhou i******o-ftp

Bucket Number is: 4
0.028(s) elapsed
4.2)示例2: 保存id.key.host
osscmd config --id=Lejk2jde2dkedoi --key=G8DH2EKDHJDfvs --host=oss-cn-**************.aliyuncs.com [--id --key 为access key 的密码部分]
4.3)示例3: 查看Bucket中的Object信息
# osscmd list oss://i***ao-ftp/ --id=Lejk2jde2dkedoi --key=G8DH2EKDHJDfvs --host=oss-cn-**************.aliyuncs.com [--id --key 为access key 的密码部分] 
4.4)示例4:从Oss的Bucket中下载文件
#osscmd get oss://***-ftp/nginx/nginx反代配置.txt nginx反代配置.txt --id=Lejk2jde2dkedoi --key=G8DH2EKDHJDfvs --host=oss-cn-**************.aliyuncs.com  [--id --key 为access key 的密码部分]
*重点*上传Ecs上的目录到Oss的对应目录:
使用OssCmd的上传目录参数uploadfromdir
命令说明:
uploadfromdir localdir oss://bucket/[prefix] --check_point=check_point_file --replace=false --check_md5=false --thread_num=5
操作案例:
同步424G uploads/目录。需要进入到对应的目录,在执行操作。
#nohup osscmd uploadfromdir uploads oss://i****o-file/Public/uploads --check_point=check_point_file --replace=false --check_md5=false --thread_num=5 config --id=Lejk2jde2dkedoi --key=G8DH2EKDHJDfvs —host=oss-cn-*******-internal.aliyuncs.com > ossfiles.log 2>&1 & [--id --key 为access key 的密码部分]
案例命令解说:
nohup是不挂断在后端允许。可以使用jobs来查看进程在后台的状态。
最后>/ossfile.log是以日志的形式输出到ossfile.log到文件,并将标准错误输出再被重定向到log文件。该参数需要注意的地方,建议指定host,这样就可以走内网进行传输。阿里云内网传输免流量费。
uploads //目录是需要上传的目录名称
--thread_num=5 //配置线程数 (*线程数一定要根据服务器的配置进行调整*)
--replace=false //False表示不启用
--check_md5=false //是否做cmd请求头校验。False表示不启用
--id=xxxx //--id=accessid
--key=xxxx //--key=accesskey
--host=xxxx //该段填写endpoint(格式是一段xx.hangzhou.aliyun.com)
注意:由于check_point_file文件中记录的是上传的所有文件的。所以当上传文件特别多的时候,check_point_file会特别巨大。
下图,再执行上传的过程中可以看到osscmd所使用的python进程一直是cpu超负载的。所以要选择适当的线程数。

5.OssUtil的使用及案例说明
ossutil:是基于Go SDK的。Ossutil 比osscmd的速度快效率高,是osscmd的升级版本算,所以推荐使用。支持大文件分片(--bigfile-threshold),和增量上传。(--snapshot-path)
OssUtil使用说明:
http://note.youdao.com/noteshare?id=3d9aecb439fba471d4d3d06774ce0357
5.1)同步images目录案例
#ossutil64 cp -r -f /data/wwwroot/cshixi/Public/uploads/images oss://i*******ao-file/Public/uploads/images -j 6 -i Lejk2jde2dkedoi -k G8DH2EKDHJDfvs -e oss-cn-*******-internal.aliyuncs.com  [-I-k 为access key 的密码部分]

#ossutil64 cp -r -f /data/wwwroot/cshixi/Public/uploads/files oss://i*******ao-file/Public/uploads/files/ -j 6 -i Lejk2jde2dkedoi -k G8DH2EKDHJDfvs -e oss-cn-*******-internal.aliyuncs.com --snapshot-path=/file [-I-k 为access key 的密码部分]
snapshot功能是增量上传的快照功能,默认会在指定的路径文件夹中生成一些文件,如下图: 其中包含,日志,锁文件和索引文件。
# ls /file/
01. log CURRENT LOCK LOG MANIFEST-000000
5.1)备份upload整个目录(目录下的文件大小共425G,所以我这块也使用了备份快照和日志记录)
# ossutil64 cp -r -f /data/wwwroot/cshixi/Public/uploads/ oss://i*******o-file/Public/uploads/ -j 6 -i Lejk2jde2dkedoi -k G8DH2EKDHJDfvs -e oss-cn-*******-internal.aliyuncs.com --snapshot-path=/uploadsnapshot >/upload.log & [-I-k 为access key 的密码部分]

查看上传过程中的日志情况。


# tail -f upload.log
Scanned num: 1489035, size: 382,829,317,671. Dealed num: 3722(upload 3528 files, 194 directories), OK size: 501,777,041.
Total num: 1804637, size: 448,358,796,925. Dealed num: 4852(upload 4604 files, 247 directories), OK size: 850,554,184, Progress: 0%
Total num: 1804637, size: 448,358,796,925. Dealed num: 70544(upload 67682 files, 2862 directories), OK size: 9,626,769,653, Progress: 2%
Total num: 1804637, size: 448,358,796,925. Dealed num: 956279(upload 952196 files, 4083 directories), OK size: 274,753,034,799, Progress: 61%
Total num: 1804637, size: 448,358,796,925. Dealed num: 1039320(upload 1035175 files, 4145 directories), OK size: 311,470,081,636, Progress: 69%

Total num: 1804637, size: 448,358,796,925. Dealed num: 1805032(upload 1800348 files, 4684 directories), OK size: 448,414,058,100, Progress: 100%

8239.128424(s) elapsed Succeed: Total num: 1804637, size: 448,358,796,925. OK num: 1805033(upload 1800349 files, 4684 directories).
备份过程中一定要及时查看硬盘空间和系统资源的占用情况。

在执行的话就会使用索引文件进行增量上传~

Succeed: Total num: 1805875, size: 448,675,517,126. OK num: 1805875(upload 9 files, 2 directories, skip 1805864 files), Skip size: 448,673,475,670. 12.164479(s) elapsed

6.总结和建议

琢磨了几天,主要是先对几款工具进行对比,分析各自的优点,然后再选择适合自己的工具,开始的时候ossimport2,看了之后还是比较适合大环境比如:数据大于30TB的情况优选。支持单机分布式。接着用了osscmd来同步,发现速度还是跟不上,后来调整了进程,发现还是依旧不行。最后尝试使用ossutil.在使用ossutil的时候,一些参数的使用方法还是不一样的。中间需要结合起来用。后来就看了ossutil的帮助文档.. 如果参数部分不是很明白的建议多看help文档.!!!

最后来几张Oss在上传过程中的存储量情况变化图:


发表评论

登录 后发表评论.