对象存储,通常指 S3 (Simple Storage Service) 服务,由AWS提供公有云服务,而 Ceph 也可以提供兼容 S3 协议的对象存储服务,使用起来跟 AWS 的 S3 体验几乎一样。
环境介绍
- 访问域名: tstack-s3.oa.com
- 后端物理环境: [ 64G/8Core/11TB*4/10GE*2 ] * 5台
- Ceph 版本: Jewel 10.2.7
- RGW 网关: 1个/台,共5个,HAProxy+KeepAlived 实现负载均衡。
- 测试秘钥:
- access_key: tstack
- secret_key: tstack
- 集群副本数: 2
S3 概念简介
使用S3服务形如登陆一个主机只需要两大要素:
- 一台主机: 即上面的域名, tstack-s3.oa.com
- "账户/密码": 即上面的 access_key, secret_key 。后面简称 aksk。
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 服务。
使用 S3 服务
Windows 下使用方法
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,添加账号。
-
- 创建 Bucket,并设置为公有读属性。
-
-
上传文件。
-
- 下载文件。
-
- 设置访问权限。
-
- 拖拽上传大文件。
-
Mac/Linux 下使用方法
s3cmd 方式
由于 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
。 -
- 上传大文件( 6~10MB/s ):
s3cmd put
。 -
- 设置文件的ACL:
s3cmd setacl
。 -
更多的操作请参考 s3cmd -h
!
s3fs-fuse 方式
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 后的截图。我们可以很方便的将一个桶当做一个云盘挂载到我们自己机器上,并且是支持多挂载共享读写的。