一、什么是swift的大对象

    简单的说就是单个文件大于5G,就属于大对象,单个文件大于5G按照普通方式上传swift就会报错(Your request is too large)。

 注:除了报错以外单独上传一个比如4G的文件需要的时间比较长,那么怎么让上传的速度增加呢?这就需要用到swift的大对象功能。

例子:

--造一个不到4.9G的文件 /opt/4G.txt

dd if=/dev/zero of=/opt/4G.txt bs=1M count=5000


--上传一个4.9G的文件耗时95秒

swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload bigContainer  /opt/4G.txt  --object-name 4G.txt


--查看物理位置

swift-get-nodes -a /etc/swift/object.ring.gz AUTH_admin bigContainer    4G.txt

-----------------------------------


--造一个5.1G的文件 /opt/5G.txt

dd if=/dev/zero of=/opt/5G.txt bs=1M count=5130


--上传一个5G的文件

swift -A http://127.0.0.1:8080/auth/v1.0 -U admin:admin -K admin upload bigContainer  /opt/5G.txt  --object-name 5G.txt

报错: Your request is too large.

注:上面的例子可以看出文件小于5G可以正常上传,但是大于5G就会报错。

二、如何向swift上传大于5G的文件?

  使用swift的大对象功能,大对象功能又分为动态大对象和静态大对象两种,可以根据需求选择使用。

三、动态大对象

(1) 动态大对象  swift CLI 分段上传下载

--使用段的概念上传大文件

--官网说明:

swift upload test_container -S 1073741824 large_file



--例子:

swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang upload -S 1073741824 ycContainer  /opt/5G.txt  --object-name 5G.txt

注:-S的意思是把文件切割成1073741824(1G)大小的分片上传文件。            

                                                      

--查看容器列表

swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list

ycContainer

ycContainer_segments


--查看ycContainer容器

swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list  ycContainer

5G.txt


--查看ycContainer_segments容器

[root@node02 1]# swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang list  ycContainer_segments

5G.txt/1591261394.734867/5379194880/1073741824/00000000

5G.txt/1591261394.734867/5379194880/1073741824/00000001

5G.txt/1591261394.734867/5379194880/1073741824/00000002

5G.txt/1591261394.734867/5379194880/1073741824/00000003

5G.txt/1591261394.734867/5379194880/1073741824/00000004

5G.txt/1591261394.734867/5379194880/1073741824/00000005

 

--下载对象5G.txt到/opt/1路径下

swift -A http://127.0.0.1:8080/auth/v1.0 -U yc:mao -K yang download ycContainer 5G.txt --output /opt/1/5G.txt

(2)动态大对象 curl 进行分段上传、合并下载


 

所有对象段都必须位于同一容器中,并具有通用的对象名称前缀,并按应将其连接的顺序排序。对象名称按UTF-8字节字符串的字典顺序排序。它们不必与清单文件位于相同的容器中


curl http://127.0.0.1:8080/auth/v1.0 -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin'


curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/1.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/c.txt --data-binary '1'

curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/2.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/a.txt --data-binary '1'

curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"  -T /opt/3.txt  http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/b.txt --data-binary '1'

 

curl -X PUT -H  "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67" -H 'X-Object-Manifest: containerCURL/myobject/'  http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject  --data-binary ''


 

curl -D- -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject


查看

curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL -X GET -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"

curl http://127.0.0.1:8080/v1/AUTH_admin/containerManifest -X GET -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"


删除

curl http://127.0.0.1:8080/v1/AUTH_admin/containerManifest/myobject    -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    

curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/a.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    

curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/b.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"    

curl http://127.0.0.1:8080/v1/AUTH_admin/containerCURL/myobject/c.txt  -X DELETE -H "X-Auth_Token: AUTH_tk2cf9efe9efe64881ad058d047d907b67"