Ceph RGW对象存储
对象存储概述
对象是对象存储系统中数据存储的基本单位,每个Object是数据和数据属性集的综合体,数据属性可以根据应用的需求进行设置,包括数据分布、服务质量等每个对象自我维护其属性,从而简化了存储系统的管理任务对象的大小可以不同,甚至可以包含整个数据结构,如文件、数据库表项等对象存储系统一般是一类智能设备,它具有自己的存储介质、处理器、内存以及网络系统等,负责管理本地的对象,是对象存储系统的核心
- 对象存储(Object Storage)是无层次结构的数据存储方法,通常用于云计算环境中
- 不同于其他数据存储方法,基于对象的存储不使用目录树
- 数据作为单独的对象进行存储
- 数据并不放置在目录层次结构中,而是存在于平面地址空间内的同一级别
- 应用通过唯一地址来识别每个单独的数据对象
- 每个对象可包含有助于检索的元数据
- 专为使用API在应用级别(而非用户级别)进行访问而设计
基本概念
虽然在设计与实现上有所区别,但大多数对象存储系统对外呈现的核心资源类型大同小异
- Amazon S3:提供了user、bucket和object分别表示用户、存储桶和对象,其中bucket隶属于user,因此user名称即可做为bucket的名称空间,不同用户允许使用相同名称的bucket
-
OpenStack Swift:提供了user、container和object分别对应于用户、存储桶和对象,不过它还额外为user提供了父级组件account,用于表示一个项目或租户,因此一个account中可包含一到多个user,它们可共享使用同一组container,并为container提供名称空间
-
RadosGW:提供了user、subuser、bucket和object,其中的user对应于S3的user,而subuser则对应于Swift的user,不过user和subuser都不支持为bucket提供名称空间,因此,不同用户的存储桶也不允许同名;不过,自Jewel版本起,RadosGW引入了tenant(租户)用于为user和bucket提供名称空间,但它是个可选组件
-
Jewel版本之前,radosgw的所有user位于同一名称空间,它要求所有user的ID必须惟一,并且即便是不同user的bucket也不允许使用相同的bucket ID
各pool的意义
- 当创建RGW时候默认会创建对应的池信息,不需要人为创建
认证与授权方式
S3和Swift使用了不同的认证机制
- 用户账号是认证(Authentication)、授权(Authorization)及存储配额(Quota)功能的载体,RGW依赖它对RESTfulAPI进行请求认证、控制资源(存储桶和对象等)的访问权限并设定可用存储空间上限
- S3主要采用的是基于访问密钥(access key)和私有密钥(secret key)进行认证,RGW兼容其V2和V4两种认证机制,其中V2认证机制支持本地认证、LDAP认证和kerberos认证三种方式,所有未能通过认证的用户统统被视为匿名用户
-
Swift结合Swift私有密钥(swift key)使用令牌(token)认证方式,它支持临时URL认证、本地认证、OpenStack Keystone认证、第三方认证和匿名认证等方式
-
通过身份认证后,RGW针对用户的每次资源操作请求都会进行授权检查,仅那些能够满足授权定义(ACL)的请求会被允许执行
- S3使用bucket acl和object acl分别来控制bucket和object的访问控制权限,一般用于向bucket或object属主之外的其它用户进行授权
- Swift API中的权限控制则分为user访问控制列表和bucket访问控制列表两种,前一种针对user进行设定,而后一定则专用于bucket及内部的object,且只有read和write两种权限
RADOS网关
为了支持通用的云存储功能,Ceph在RADOS集群的基础上提供了RGW(RADOS GateWay)数据抽象和管理层,它是原生兼容S3和SwiftAPI的对象存储服务,支持数据压缩和多站点(Multi-Site)多活机制,并支持NFS协议访问接口等特性。RADOS网关也称为Ceph对象网关、RADOSGW、RGW,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群。它支持S3和Swift API
- radosgw的http/https服务由内建的Civeweb提供,它同时也能支持多种主流的Web服务程序以代理的形式接收用户请求并转发至ceph-radosgw进程,这些Web服务程序包括nginx和haproxy等
-
rgw客户端通过s3或者swift api使用rgw用户进行身份验证,S3和Swift是RESTful风格的API,它们基于http/https协议完成通信和数据交换。然后rgw网关代表用户利用cephx与ceph存储进行身份验证
功能概述
RGW的功能依赖于Ceph对象网关守护进程(ceph-radosgw)实现,它负责向客户端提供RESTAPI接口,并将数据操作请求转换为底层RADOS存储集群的相关操作
- 出于冗余及负载均衡的需要,一个Ceph集群上的ceph-radosgw守护进程通常不止一个,这些支撑同一对象存储服务的守护进程联合起来构成一个zone(区域)用于代表一个独立的存储服务和存储空间
-
在容灾设计的架构中,管理员会基于两个或以上的Ceph集群定义出多个zone,这些zone之间通过同步机制实现冗余功能,并组成一个新的父级逻辑组件zonegroup
企业级部署架构
- 以下图为生产环境常用架构方
rados网关部署步骤
- 手工开启方式
配置Citeweb
- 自0.80版本起,Ceph放弃了基于apache和fastcgi提供radosgw服务的传统而代之以默认嵌入在ceph-radosgw进程中的Citeweb,这种新的实现方式更加轻便和简洁,但直到Ceph 11.0.1版本,Citeweb才开始支持SSL协议
-
Citeweb默认监听于TCP协议的7480端口提供http服务,修改配置需要编辑ceph.conf配置文件,以如下格式进行定义
-
配置https
- 额外添加参数ssl certificate=/PATH/TO/PEM FILE
- 定义port=443s,或者port=80+443s
常用的配置项
参数选项 | 信息描述 |
---|---|
ssl_certificate | 配置默认https的证书位置开启加密访问(生产基本不用,因为会在前加个负载均衡器) |
access_log_ file | 定义访问日志的路径 |
error_log_file | 定义错误日志的路径 |
num_threads | Citeweb以线程模型处理客户端请求,它为每个连接请求分配一个专用线程,因而此参数定义了其支持的最大并发连接数,默认值为50 |
request_timeout_ms | 网络发送与接收操作的超时时长,以ms为单位,默认值为30000,可以在必要时通过增大此值实现长连接的效果 |
- 具体的配置示例
访问测试
curl http://servera
什么是S3存储
S3由Amazon于2006年推出,全称为Simple Storage Service,S3定义了对象存储,是对象存储事实上的标准,从某种意义上说,S3就是对象存储,对象存储就是S3,它对象存储市场的霸主,后续的对象存储都是对S3的模仿
S3的特点
- 跨区域复制
- 事件通知
- 版本控制
- 安全加密
- 访问管理切可编程
rgw中s3的API支持
对象存储在bucket中若要利用S3 API访问对象,需要为RADOS网关配置用户每个用户具有一个access key和一个secret key。access key标识用户,secret key验证用户身份
- S3服务的RESTAPI使用用户账号(user)、存储桶(bucket)和对象(object)三个组件来组织存储的数据对象,对象保存于存储桶中,而存储桶则支持授权给特定账号进行读写及创建/删除等操作
-
Amazon S3 API授权和身份验证模型具有单层设计。一个用户可以有多个access key和secret key,用于在同一帐户中提供不同类型的访问
-
radosgw-admin是用于管理radowgw服务的命令行接口,它有着众多的分别用于不同管理功能的命令,例如user、subuser、key、bucket和object等
S3中的用户管理
管理用户密钥
S3设置配额数
检索用户信息
统计数据
配置DNS实现数据传输
配置泛域名解析
- S3的存储桶是用于存储对象的容器,每个对象都必须储存在一个特定的存储桶中,且每个对象都要直接通过RESTfulAPI基于URL进行访问,URL格式为
http(s)://bucket-name.radowgw-host[:port]/key"
-
例如,对于存储在
rgw01.test.io
上的S3API对象存储系统上eshop存储桶中的名为images/test.ipg
的对象,可通过http://eshop.rgw01.test.io/images/test.jpg
对其进行寻址 -
因此,radosgw的S3API接口的功能强依赖于DNS的泛域名解析服务,它必须能够正常解析任何
<bucket-name>.<radowgw-host>
格式的名称至radosgw主机 -
另外,还需要配置每个radowgw守护进程的rgw dns name为其DNS名称
rados网关访问S3对象
启用S3-api客户端s3cmd
如果基于编程的方式过于复杂切大量重复操作所以S3为了简化操作退出了命令行版本的客户端
- 使用s3cmd命令之前需要事先配置其工作环境,包括指定Access Key和Secret Key,以及S3服务的访问端点和默认的Region(Ceph的新版本中称作zonegroup)等
- s3cmd –configure,配置的结果将保存于
~/.s3cmd.cfg
配置文件中,用户随后可通过编辑此文件修改配置参数,或者再次运行此配置命令为其指定新的配置信息
命令测试
Bucket常用操作
什么是Swift
openstack swift是openstack开源云计算项目开源的对象存储,提供了强大的扩展性、冗余和持久性
Swift特性
- 极高的数据持久性
-
完全对称的系统架构
-
无限的可扩展性
-
无单点故障
Swift-API操作
Swift-API的上下文中,存储桶以container表示,而非S3中的bucket,但二者在功用上类同,都是对象数据的容器,且对象存储在容器中。Openstack Swift API的用户模型与Amazon S3 API稍有不同。若要使用swift api通过rados网关的身份验证,需要为rados网关用户帐户配置子用户。swift有租户概念,rados网关用户对应swift的租户,而子帐号则对应swift的api用户
- Swift的用户账号对应于radosgw中的subuser(子用户),它隶属于某个事先存在的user(用户账号)
- 例如:Python Swiftclient是一个用于与Swift API交互的Python客户端程序,它包含了Python API(swift 模块)和一个命令行工具swift
Swift用户管理
Swift客户端
- swift客户端不像s3客户端一样有本地的配置信息文件,所以没有次操作都要带上账号的认证信息
-
RADOS网关支持Swift v1.0以及OpenStack keystone v2.0身份验证
swift读写练习
使用openstack swift提供对象存储
- 使用openstack swift接口创建一个可访问ceph集群的用户
-
使用openstack swift接口管理对象的存储