天天看點

三、swift大對象--動态大對象

一、什麼是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"