对象存储,通常指 S3 (Simple Storage Service) 服务,由AWS提供公有云服务,而 Ceph 也可以提供兼容 S3 协议的对象存储服务,使用起来跟 AWS 的 S3 体验几乎一样。
使用S3服务形如登陆一个主机只需要两大要素:
User
一个 User 可以通过自己的 aksk 进行"登录" 对象存储服务,然后就可以看到自己的 Bucket。
Bucket
S3 中的一个重要概念,即存储桶。
类比登录到 Windows 系统后,你可以看到你的各个磁盘,比如:“C: D: E:”,即C盘,D盘,E盘,用于存储用户的数据,那么 Bucket 概念就类似磁盘,用于存储各个 Object。
桶名全局唯一,即小明建了名为tstack
的桶之后,其他任何用户都不能创建名为tstack
的桶,否则会创建失败。
Object
S3 中的另一个重要概念,即对象,保存于 Bucket 内。也就是我们上传保存的文件。
Object 就类似于磁盘下的各个文件,隶属于一个 Bucket。
ACL
最后一个必须得解释的重要概念,即控制权限。
ACL可以设置到桶、对象一级,即每个桶,甚至每个文件都可以设置不一样的访问权限。默认情况下,每个人建的桶和里面的文件只有自己可见,如果想要把一个桶设置为所有人都可见,可以给桶设置 public-read权限,比如我们有一个桶专门用于存放yum源的rpm包,这个桶就需要这个权限。同样,文件也可以设置单独的公/私有读/写权限,这里不再赘述。
那么 S3 (简单的对象存储服务)的概念就介绍完了。
一句话介绍就是我们每个人都有很多的Bucket,每个Bucket下面可以保存很多的文件。那么下面开始介绍如何使用我们 TStack 自己 S3 服务。
Windows 下我们使用的是 S3Brower 这个客户端,点击链接可以下载安装。(注意需要访问公司内部环境)[ http://tstack-s3.oa.com/s3-usage/s3browser-7-6-9.exe ]
这里重温下对象存储的三个概念,这里有一个名为 s3-usage
的桶,桶里面保存着一个名为 s3browser-7-6-9.exe
的对象,并且这个对象的访问权限为 public-read,因此其他用户可以无需该用户的 aksk 就可以访问下载这个对象。
下面,我将S3Browser的操作步骤制成了GIF,方便大家浏览(手机横过来看会比较清楚)。
由于 S3Browser 只支持 Windows ,我们想要在类 Unix 系统下适用 S3 服务,可以使用工具 s3cmd。安装方法:
### Mac
brew install s3cmd
### Linux
yum install s3cmd
配置s3cfg
这里我已经编写好配置文件,路径位于 [ http://tstack-s3.oa.com/s3-usage/s3cfg.conf ],内容如下:
[default]
access_key = tstack
secret_key = tstack
host_base = tstack-s3.oa.com
host_bucket = tstack-s3.oa.com
bucket_location = US
check_ssl_certificate = False
check_ssl_hostname = False
signature_v2 = True
use_https = False
只需要将其下载到需要使用s3cmd
的机器即可:
curl http://tstack-s3.oa.com/s3-usage/s3cfg.conf -o ~/.s3cfg
下面同样使用GIF方式展示一下 s3cmd
的简单用法:
.s3cfg
,并查看所有的桶 s3cmd ls
,列出桶s3-usage
桶内的对象。s3cmd mb s3://BUCKET_NAME
s3cmd put
。s3cmd get
。
s3cmd sync
。 s3cmd put
。s3cmd setacl
。 更多的操作请参考 s3cmd -h
!
s3fs-fuse 是一个开源项目 [https://github.com/s3fs-fuse/s3fs-fuse]。通过将一个桶挂载到一个目录,然后通过读写挂载目录来实现对象的上传下载,将桶以fuse的形式暴露给终端客户,极大方便了我们的使用,并且也十分稳定。
CentOS 安装 s3fs-fuse :
curl https://codeload.github.com/s3fs-fuse/s3fs-fuse/zip/master -o s3fs-fuse-master.zip
yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel unzip
unzip s3fs-fuse-master.zip
cd s3fs-fuse-master
./autogen.sh
./configure
make
sudo make install
Mac 安装 s3fs-fuse :
brew cask install osxfuse
brew install s3fs
将桶挂载到指定目录
echo " tstack:tstack " > ~/.passwd_s3fs
chmod 600 ~/.passwd_s3fs
s3fs {BUCKET} {PATH_TO_MOUNT} -o sigv2 -o use_path_request_style -o passwd_file=~/.passwd_s3fs -o url=http://tstack-s3.oa.com -o uid=`id -u` -d
假设我们将 s3-usage
这个 {BUCKET} 挂载到 /mnt
这个 {PATH_TO_MOUNT} 目录下,则:
s3fs s3-usage /mnt -o sigv2 -o use_path_request_style -o passwd_file=~/.passwd_s3fs -o url=http://tstack-s3.oa.com -o uid=`id -u` -d
挂载成功后,我们就可以将一个桶当做文件系统挂载到宿主机上使用了,使用方法类似 NFS 等,下图是 Mac 系统挂载 s3fs 后的截图。我们可以很方便的将一个桶当做一个云盘挂载到我们自己机器上,并且是支持多挂载共享读写的。