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