今天来玩下Ceph的对象存储,在开始之前呢,先扯会闲篇,我觉得生活中处处是非结构化数据,最简单的举例,下面两个行业,一个是直播,一个是摄影。
现在直播行业这么火,不夸张的说甚至每天都会产生一个直播软件。不单单是视频流媒体行业,还有现在非常流行的云摄影,什么是云摄影呢?相信经常参会的朋友应该知道,有些现场拍的照片立马就可以发出来,很是方便,相信以后肯定会火起来。有些细心的朋友应该会看到每张照片都会有水印标示就是V.Photos,这是个什么鬼?
下面简单扒一扒这家公司
V.Photos是一家云摄影服务平台,成立于2015年,主要致力于为B端商业用户提供智能便捷的商业摄影和照片同步归档管理的专业级方案。
八卦到此结束,biabiabiabia…..
除了,流媒体、照片摄影行业之外,还有医疗、银行、卫星等行业,都将产生很多很多的非结构化数据。所以看到了对象存储有如此之大的潜力,促使我们不得不学习下对象存储。所谓活到老学到老,尤其是我们搞IT的,每天都得学习新技术。
下面我们来看看Ceph对象存储如何部署
首先呢就是部署一套Ceph环境,这里就不再赘述了,网上好多安装文档,都比较清晰了。
重点说下RGW部分
安装完集群之后
1
|
ceph-deploy
install
--rgw devin-ceph1
#因为是测试所以只用一个rgw
|
然后创建RGW实例
1
|
ceph-deploy rgw create devin-ceph1
|
那么这时候就OK了,成功后会提示你访问7480端口
1
|
http:
//10
.0.100.201:7480
|
你会看到如下内容:
1
2
3
4
5
6
7
|
<ListAllMyBucketsResult xmlns=
"http://s3.amazonaws.com/doc/2006-03-01/"
>
<Owner>
<ID>anonymous<
/ID
>
<DisplayName/>
<
/Owner
>
<Buckets/>
<
/ListAllMyBucketsResult
>
|
由于RGW默认采用的是Civetweb,默认端口是7480那有人会说了,那我可不可以修改RGW端口啊。答案肯定是可以的。
修改Ceph配置文件进行修改。下面看看我的配置文件
1
2
3
4
5
6
7
|
[client.rgw.devin-ceph1]
host = devin-ceph1
rgw_enable_ops_log =
true
rgw_frontends =
"civetweb port=80"
rgw dns name = s3.devin.com
rgw socket path =
/var/run/ceph-client
.radosgw.sock
keyring =
/etc/ceph/ceph
.client.radosgw.keyring
|
可以看到我的端口设置成80了。
修改完配置文件之后同步到个节点然后重启rgw服务
1
2
3
|
ceph-deploy --overwrite-conf config push devin-ceph1 devin-ceph2 devin-ceph3
systemctl restart ceph-radosgw.target
|
那么到此RGW安装完成了,那么RGW怎么使用呢?或者说怎么证明我的RGW是好的?
可能会有人说:你笨啊,刚才都能访问页面了,就证明成功了呗。
可能又会有人说:光访问个页面管P用啊,要能用才行。
别急,下面我们来说下两种方式来玩,一种是S3cmd方式
首先安装S3cmd
1
|
yum –y
install
s3cmd
|
安装完之后运行s3cmd --configure进行初始化配置(说白了就是生成个配置文件)
然后会提示你输入access key和secret key,没玩过ASW相关产品的童鞋可能会说,这俩key是干嘛的。用行话来说呢简称AK和SK。所谓key嘛就是用来认证和验证的。我们来看看如何生成。
你要用工具连接RGW那么首先得有用户吧,那来创建个用户
1
|
radosgw-admin user create —uid=devin —display-name=“Devin” —email=devin@example.com
|
创建完之后会有AK和SK的信息,记得复制下待会还要用。
那么复制完之后在进行s3cmd –configure配置
配置完之后就可以开始玩了。附赠s3cmd常用命令
1
2
3
4
5
6
7
|
s3cmd
ls
#查看可用的bucket
s3cmd mb s3:
//devin_bucket
#创建bucket,且bucket名字是唯一的,不能重复
s3cmd
ls
s3:
//devin_bucket
#列出bucket内容
s3cmd put devin.txt s3:
//devin_bucket
#上传本地file到指定的bucket
s3cmd put --acl-public devin.txt s3:
//devin_bucket
#上传本地file到指定的bucket,并开启file的匿名访问权限
s3cmd get s3:
//devin_bucket/devin
.txt
#下载file到本地
|
可能在玩的时候会遇到问题,那么怎么排错呢?
可以在s3cmd的命令后面加上-d 也就是开启debug然后排错。
遇到最多的问题就是解析问题。那么如何解决解析的问题呢?
可以查看下这篇文章《教你如何配置轻量级DNS》。
然后还有一种方式,就是python-boto方式
首先安装python-boto
1
|
yum
install
python-boto
|
然后创建个python脚本
1
|
vi
s3test.py
|
内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import
boto.s3.connection
access_key
=
'Y2S78LKZ1ROD0MGIDUBC'
secret_key
=
'LyGCgoydLI2MGA7C0PtynyfBa3aKODNYQ0sHDMtP'
conn
=
boto.connect_s3(
aws_access_key_id
=
access_key,
aws_secret_access_key
=
secret_key,
host
=
's3.devin.com'
, port
=
80
,
is_secure
=
False
, calling_format
=
boto.s3.connection.OrdinaryCallingFormat(),
)
bucket
=
conn.create_bucket(
'devin-bucket'
)
for
bucket
in
conn.get_all_buckets():
print
"{name} {created}"
.
format
(
name
=
bucket.name,
created
=
bucket.creation_date,
)
|
这里要注意修改的地方就是AK和SK还有host域名
完事之后就是执行下脚本
1
|
python s3test.py
|
脚本大概意思就是说导入boto s3模块然后借用AK、SK来进行验证创建一个名为devin-bucket的bucket,创建完成之后并打印出来结果。
OK,本文Ceph对象存储到此就讲述结束了下篇文章来讲述如何对接OwnCloud网盘应用。
【本文由“Ceph中国社区”发布,2017年8月15日】
本文转自Devin 51CTO博客,原文链接:http://blog.51cto.com/devingeng/1945048