ceph 对象存储s3

ceph s3cmd的命令

问题:

  • 1. 使用access_key和secret_key获取的对象url,会缓存在浏览器disk cache中,导致每次第二次访问资源的时候,会报no-cors的错误
  • 2. 浏览器获取数据时,会显示(from disk cache)

针对问题2,调研强缓存

强缓存

强缓存:不会向服务器发送请求,直接从缓存中读取资源,在 chrome 控制台的 Network 选项中可以看到该请求返回 200 的状态码,并且 Size 显示 from disk cache 或 from memory cache。强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。

1.Expires

缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和 Last-modified 结合使用。Expires 是 Web 服务器响应消息头字段,在响应 http 请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

Expires 是 HTTP/1 的产物,受限于本地时间,如果修改了本地时间,可能会造成缓存失效。Expires: Wed, 22 Oct 2018 08:41:00 GMT表示资源会在 Wed, 22 Oct 2018 08:41:00 GMT 后过期,需要再次请求。

2.Cache-Control

在 HTTP/1.1 中,Cache-Control 是最重要的规则,主要用于控制网页缓存。比如当Cache-Control:max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的 5 分钟内再次加载资源,就会命中强缓存。
Cache-Control 可以在请求头或者响应头中设置,并且可以组合使用多种指令:

  • 深入理解浏览器的缓存机制
  • public:所有内容都将被缓存(客户端和代理服务器都可缓存)。具体来说响应可被任何中间节点缓存,如 Browser <-- proxy1 <-- proxy2 <-- Server,中间的 proxy 可以缓存资源,比如下次再请求同一资源 proxy1 直接把自己缓存的东西给 Browser 而不再向 proxy2 要。
  • private:所有内容只有客户端可以缓存,Cache-Control的默认取值。具体来说,表示中间节点不允许缓存,对于 Browser <-- proxy1 <-- proxy2 <-- Server,proxy会老老实实把 Server 返回的数据发送给 proxy1, 自己不缓存任何数据。当下次 Browser 再次请求时 proxy 会做好请求转发而不是自作主张给自己缓存的数据。
  • no-cache:客户端缓存内容,是否使用缓存则需要经过协商缓存来验证决定。表示不使用 Cache-Control 的缓存控制方式做前置验证,而是使用 Etag 或者 Last-Modified 字段来控制缓存。需要注意的是,no-cache 这个名字有一点误导。设置了 no-cache 之后,并不是说浏览器就不再缓存数据,只是浏览器在使用缓存数据时,需要先确认一下数据是否还跟服务器保持一致。
  • no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存

max-age:max-age=xxx (xxx is numeric) 表示缓存内容将在 xxx 秒后失效

s-maxage(单位为 s):同 max-age 作用一样,只在代理服务器中生效(比如 CDN 缓存)。比如当 s-maxage=60 时,在这 60 秒中,即使更新了 CDN 的内容,浏览器也不会进行请求。max-age 用于普通缓存,而 s-maxage 用于代理缓存。s-maxage 的优先级高于 max-age。如果存在 s-maxage,则会覆盖掉 max-age 和 Expires header。

max-stale:能容忍的最大过期时间。max-stale 指令标示了客户端愿意接收一个已经过期了的响应。如果指定了 max-stale 的值,则最大容忍时间为对应的秒数。如果没有指定,那么说明浏览器愿意接收任何 age 的响应(age 表示响应由源站生成或确认的时间与当前时间的差值)。

min-fresh:能够容忍的最小新鲜度。min-fresh 标示了客户端不愿意接受新鲜度不多于当前的 age 加上 min-fresh 设定的时间之和的响应。

深入理解浏览器的缓存机制

从图中我们可以看到,我们可以将多个指令配合起来一起使用,达到多个目的。比如说我们希望资源能被缓存下来,并且是客户端和代理服务器都能缓存,还能设置缓存失效时间等等。

3.Expires 和 Cache-Control 两者对比
其实这两者差别不大,区别就在于 Expires 是 http1.0 的产物,Cache-Control 是 http1.1 的产物,两者同时存在的话,Cache-Control 优先级高于 Expires;在某些不支持 HTTP1.1 的环境下,Expires 就会发挥用处。所以 Expires 其实是过时的产物,现阶段它的存在只是一种兼容性的写法。

强缓存判断是否缓存的依据来自于是否超出某个时间或者某个时间段,而不关心服务器端文件是否已经更新,这可能会导致加载文件不是服务器端最新的内容,那我们如何获知服务器端内容是否已经发生了更新呢?此时我们需要用到协商缓存策略。

针对问题1,

对于缩略图的权限放低,让任意用户获取,这样生成的url就没有Expires参数

设置ceph中对应桶的policy

#cat policy.json
{
        "Statement": [{
                "Effect": "Allow",
                "Principal": "*",
                "Action": ["s3:GetObject"],
                "Resource": "*"
        }]
}
# s3cmd setpolicy policy.json s3://metadatabucket --acl-public //设置策略
# s3cmd delpolicy s3://metadatabucket //删除策略
# s3cmd info s3://metadatabucket //查看策略

其中:

  • Resource参数匹配某一种文件:Resource:["*.jpg","*.png"]
  • Action可以设置较多参数,详情参考:https://docs.ceph.com/docs/master/radosgw/bucketpolicy/

python代码生成url的代码如下:

def get_object_url(bucket_name, object_name):
    try:
        bucket = conn.get_bucket(bucket_name)
        plans_key = bucket.get_key(object_name)
        plans_url = plans_key.generate_url(0, query_auth=False,
                                           force_http=False)
        return plans_url
    except Exception as e:
        print("get {} error:{}".format(object_name, e))
        return False

设置Cors

[[email protected] rootbak]# cat rules.xml
<CORSConfiguration>
  <CORSRule>
    <ID>Allow everything</ID>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <MaxAgeSeconds>30</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>

# s3cmd setcors rules.xml s3://metadatabucket

原文地址:https://www.cnblogs.com/zhangjxblog/p/12168354.html

时间: 2024-11-05 18:42:00

ceph 对象存储s3的相关文章

基于LAMP php7.1搭建owncloud云盘 与ceph对象存储S3借口整合案例

ownCloud简介:      是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主要功能包括文件管理(内建文件分享).音乐.日历.联系人等等,可在PC和服务器上运行.     简单来说就是一个基于Php的自建网盘.基本上是私人使用这样,因为直到现在开发版本也没有暴露注册功能.我这里采用基于php7.1的LAMP环境搭建这个owncloud 下一篇将介绍和ceph对象存储整合案例 一.环境准备,这里的owncloud是10版本,所以需要php5.6以上的LAMP环境,否则会

Ceph对象存储RGW对接企业级网盘OwnCloud三步走

上篇文章我们把Ceph对象存储搭建成功了,但是成功了之后我们怎么用呢?下面我们本文就来讲下Ceph对象存储对接企业私有云网盘OwnCloud. OwnCloud分为企业版和社区版,我们只说社区版,在这里我就不多赘述了. 那么Ceph对接OwnCloud分三步走. 第一:安装Ceph配置RGW对象存储 第二:安装OwnCloud 第三:对接 第一步在上个文章里面已经做了,那么第二步是安装OwnCloud,可以看下我之前的文章进行安装. 如何搭建OwnCloud网盘 主要讲下第三步 要点:网盘节点D

ceph对象存储(rgw)服务、高可用安装配置

ceph对象存储服务.高可用安装配置 简介:    Ceph本质上就是一个rados,利用命令rados就可以访问和使用ceph的对象存储,但作为一个真正产品机的对象存储服务,通常使用的是Restfulapi的方式进行访问和使用.而radosgw其实就是这个作用,安装完radosgw以后,就可以使用api来访问和使用ceph的对象存储服务了.    首先明白一下架构,radosgw其实名副其实,就是rados的一个网关,作用是对外提供对象存储服务.本质上radosgw(其实也是一个命令)和rbd

Ceph对象存储安装部署及验证

今天来玩下Ceph的对象存储,之前一直觉得对象存储对于玩OpenStack的我来说用不到,但随着越来越多的海量文件的需求,不得不促使我们来学习对象存储.所谓活到老学到老,尤其是我们搞IT的,每天都得学习新技术. 首先呢就是部署一套Ceph环境,这里就不再赘述了,网上好多安装文档,都比较清晰了. 重点说下RGW部分 安装完集群之后 ceph-deploy install --rgw devin-ceph1    #因为是测试所以只用一个rgw 然后创建RGW实例 ceph-deploy rgw c

Ceph对象存储介绍与安装

一:概念介绍 Ceph对象网关是建立在librados之上的对象存储接口,可为应用程序提供通往Ceph存储集群的RESTful网关, Ceph对象存储支持两个接口 1.S3兼容:为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口2.Swift兼容:为对象存储功能提供与OpenStack Swift Ceph对象存储使用Ceph对象网关守护进程(radosgw),该守护进程是用于与Ceph存储群集进行交互的HTTP服务器,由于它提供与OpenStack Swift

Ceph 对象存储及客户端配置(三)

一.对象存储介绍 作为文件系统的磁盘,操作系统不能直接访问对象存储.相反,它只能通过应用程序级别的API访问.Ceph是一种分布式对象存储系统,通过Ceph对象网关提供对象存储接口,也称为RADOS网关(RGW)接口,它构建在Ceph RADOS层之上. RGW使用librgw (RADOS Gateway Library)和librados,允许应用程序与Ceph对象存储建立连接. RGW为应用程序提供了一个RESTful S3 / swift兼容的API接口,用于在Ceph集群中以对象的形式

基于redhat7.3 ceph对象存储集群搭建+owncloud S3接口整合生产实践

一.环境准备 安装redhat7.3虚拟机四台 在四台装好的虚拟机上分别加一块100G的硬盘.如图所示: 3.在每个节点上配置主机名 4.集群配置信息如下 admin-node node1 node2 node3 192.168.42.110 192.168.42.111 192.168.42.112 192.168.42.113 deploy.osd*1 mon*1.osd*1. rgw*1.mds*1 mon*1.osd*1 mon*1.osd*1 5.各节点配置yum源 #需要在每个主机上

Ceph对象存储网关安装配置

引言 基于已部署好的Ceph集群,部署一个网关服务器,进行对象存储服务.操作系统CentOS6.5 CEPH0.94.3其实基于librados可以直接进行访问,但是我看了百度,UCLOUD的对象存储,用户在网页上进行文件的上传.下载时,都通过web服务器间接和存储集群打交道,进行了一层隔离,而不是直接和集群进行通信操作.我得理解是便于访问控制以及隔离. 1.依赖包安装 Ceph rados-gateway依赖Apache和FastCGI, 用户的请求先到web服务器,再走rados-gatew

ceph 对象存储 创建api

# -*- coding:utf-8 -*- import boto import boto.s3.connection import paramiko class Accountinfo(): """ 用法详见 http://docs.ceph.org.cn/man/8/radosgw-admin/ """ def __init__(self): self.hostname = '192.168.44.70' self.port = 22 se