3

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

 2 years ago
source link: http://www.mrliangqi.com/1564.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

系统基础篇 2017-12-14 0 14

前言:
公司的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。

20171214-151455.png
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:

2017121401.png

# 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超负载的。所以要选择适当的线程数。

2017121402.png

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 的密码部分]

2017121403.png

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

2017121404.png
# 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).
备份过程中一定要及时查看硬盘空间和系统资源的占用情况。

2017121405.png

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

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在上传过程中的存储量情况变化图:

20171214006.png
20171214007.png
20171214008.png
20171214010.png
20171214011.png
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK