Swift 大文件问题

大文件问题

官方在线文档:http://docs.openstack.org/developer/swift/overview_large_objects.html

 

传输超过5G的大文件时,需要使用-S参数,指定将大文件分块存储,-S 指明了分块的大小。例如:swift –V 2.0 –A http://localhost:5000/v2.0-U admin:admin -K adminpasswd upload test-container –S 1073741824 big_file

 

这个命令将文件big_file分块传输,块的大小为1073741824字节,也就是1G。假如big_file大小为10G,那么客户端(这里指python-swiftclient)会将文件切分为10块,而且可以并行上传这些分块。

 

问题一:从上面的命令中可以看出,提供认证的keystone服务和swift部署在了同样一台服务器上,在upload阶段,swift的account server会与keystone交互,大文件分块并行上传时,本地服务器带宽几乎被占满,很容易造成account server与keystone服务器交互发生超时,使得大文件上传失败。(proxy日志中可看出)

解决思路:部署时将keystone和swift分开,keystone和swift的proxyserver之上都加一层负载均衡。

 

 

问题二:swift的data目录下,有一个tmp目录,用来临时保存上传的文件。问题一中的认证超时会造成若干文件块上传失败,失败后swift并不会将tmp目录清空,与这次未成功的上传相关的临时文件没有被删除,这可能导致服务器存储空间的大量浪费。

解决思路:改进swift object server

你可能感兴趣的:(Swift 大文件问题)