当前位置:首页 » 服务存储 » ceph对象存储分级混合云
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

ceph对象存储分级混合云

发布时间: 2023-03-15 18:24:20

⑴ Linux里面ceph是什么

Linux里面ceph
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

⑵ ceph这款云存储技术怎么样

云存储是在云计算(cloud computing)概念上延伸和发展出来的一个新的概念,是一种新兴的网络存储技术,是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成为一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。简单来说,云存储就是将储存资源放到云上者桐供人存取的一种新兴方案。使用者可以在任何时间、任何地方,透过任何可连网的装置连接到云上方便地存取数据。
数据备份、归档和灾难恢复是云存储可能的三个用途。
云存储可分为以下三类:
1.公共云存储
供应商可以保持每个客户的存储、应用都是独立的,私有的。其中以Dropbox为代表的个人云存储服务是公共云存储发展较为突出的代表,物嫌并国内比较突出的代表的有搜狐企业网盘,网络云盘,乐视云盘[1] ,移动彩云,金山快盘,坚果云,酷盘,115网盘,华为网盘,360云盘,新浪微盘,腾讯微云,cStor云存储等。
2.内部云存储
这种云存储和私有云存储比较类似,唯一的不同点是它仍然位于企业防火墙内部。至2014年可以提供私有云的罩迹平台有:Eucalyptus、3A Cloud、minicloud安全办公私有云、联想网盘等。
3.混合云存储
这种云存储把公共云和私有云/内部云结合在一起。主要用于按客户要求的访问,特别是需要临时配置容量的时候。从公共云上划出一部分容量配置一种私有或内部云可以帮助公司面对迅速增长的负载波动或高峰时很有帮助。尽管如此,混合云存储带来了跨公共云和私有云分配应用的复杂性。

⑶ CentOS 7部署 Ceph分布式存储架构

随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

前三台服务器增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{1,2,3};

规范系统主机名添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 设置分别打开各节点的 /etc/hosts 文件,加入这四个节点ip与名称的对应关系:

在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

第一步:增加 yum配置文件(各个节点都需要增加yum源) vim /etc/yum.repos.d/ceph.repo

或阿里的ceph源

复制配置文件到其它节点和客户端

在ceph1更新软件源并安装ceph-deploy 管理工具

配置文件的默认副本数从3改成2,这样只有两个osd也能达到 active+clean 状态,添加行 osd_pool_default_size = 2

(如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
错误参考: https://blog.csdn.net/yenai2008/article/details/72457463

添加osd节点 (所有osd节点执行)
我们实验准备时已经创建目录/var/local/osd{id}

(用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存储集群的搭建。

其中: <pg_num> = 128 ,
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显着地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

创建好存储池后,你就可以用 fs new 命令创建文件系统了
ceph fs new <fs_name> cephfs_metadata cephfs_data
其中: <fs_name> = cephfs 可自定义

在这里想起没在/etc/fstab配置ceph1、ceph2、ceph3的sdb自动挂载。

ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

清理机器上的ceph相关配置

可以参考内容: http://blog.51cto.com/12270625/1887648

⑷ Ceph之对象存储

RGW 全称为Rados GateWay,是Ceph 对象存储网关,用于向客户端应用程序提供存储界面,提供RestFul API 接口
Ceph对象网关是一个构建在librados之上的对象存储接口,它为应用程序访问Ceph 存储提供了一个RESTFul 风格的网关。Ceph 对象存储支持两种接口:

1.用户: 对象存储应用的使用者,一个用户拥有一个或者多个存储桶。RGW 向您提供的用户账号宝琨了AK(AccessKeyID)和SK(SecretAccessKeyID)。通过使用AK和SK 对称加密的方法来验证某个请求的发送至身份。

参考blog: https://blog.z0ukun.com/?p=2765

⑸ ceph(第一步) 基础架构

ceph 是什么?
ceph 是一种开源存储软件。底层实现了对象存储,并以此为基础对外提供对象存储接口、块存储接口、文渣迹穗件级存储接口。

ceph 结构包含两个部分:

ceph 版本:Nautilus

官网的一张架构图:

对于这张图,一开始没有看懂它想表达什么,后来明白了。如下图:

相关名词解释:

ceph 组件分为两部分:

此部分介绍构成 ceph 集群的基础组件。
其中包含 OSD、Manager、MDS、Monitor。

此部分介绍 ceph 对外提供各种功能的组件。
其中包含:Block Device、Object Storage、Filesystem。

前面两个部分主要介绍了 ceph 的一些组件及对外提供的功能。
这部分主要介绍 ceph 的存储逻辑。

首先,在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(obj)。存储 obj 如下图:

ceph 在对象存储的基础上提供了更加高级的思想。

当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一个 pg 就是一组对象的集合。如下图:

obj 和 pg 之间的映射由 ceph client 计算得出。

讨论 pg 时,不得不提的另外一个名词:pgp。
pgp 决定了 pg 和 osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。

这里还有一个名词需要提一下,在 ceph 中会经常见到 crush 算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。如卜

由于 ceph 集群面对许多的独立项目,因此 ceph 还引入了 ceph pool 的概念用于划分不同的项目。
ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分。

pg 和 ceph pool 的区别:

像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。
缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑。以下缓存池的介绍,均为底层逻辑。
在没有缓存池时,ceph client 直接指向存储池。
在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池。

官方原话:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
个人翻译:
当州旦一个池增加 pg 数量时,这个池中的所有 pg 都会变化。但是原 pg 的实际物理存储位置不会改变。
当一个池增加 pgp 的数量时,pg 的实际物理存储位置会发生改变。

首先,截至目前,没有具体查到资料证明以下观点。(基于一致性hash的猜想)

图中出现了一个新词: vosd ,这个是指虚拟 osd。它的数量等于 pgp 的数量,而 pgp 一般又等于 pg。

pgp 的数量就是 vosd 的数量。

引入 pg 可以实现 pool 概念,以及优化碎片管理(这一点十分不确定)。

引入 pgp(vosd),是为了在增加 osd 时可以让数据更加均衡的分布。

如猜想图:
当我们增加池的 pg 数量时,不会改变 vosd,因此原 pg 与 vosd 之间的映射未变,原 pg 的实际物理位置也不会发生变化。只是会影响同一个池中 obj 的分布。
当我们增加池的 pgp 数量时,相当于改变了 vosd,通过 hash 计算出的部分 pg 与 vosd 之间的映射就要发生改变,从而导致 pg 的实际物理位置发生改变。

与一致性hash不同的地方:
一般情况下,一致性hash只有一层虚拟化层,并且虚拟化层是根据物理硬件而变化的。但是ceph却是一种反着来的意思。

当 ceph 增加一个 osd 时,pg 的物理位置也会发生改变。
在该猜想下:
当增加 osd 时,并不会增加 vosd 的数量,原部分 vosd 会映射到新的 osd 上,因此产生一种部分 pg 的实际物理位置发生变化的情况。

创建池时,会分配固定的 pg,以及设置与 pg 一样大小的 pgp。
注意,一般 pg 数量都设置为 2 的次方。

严格意义上,我们无论为池分配多少个 pg 都没有问题。但有时候 pg num 配置小了会报错,配置大了也会报错。这不是因为这么配置不对,是因为有其它的参数在限制我们随意配置 pg num。

比如:
osd 有两个配置,当每个 osd 的 pg num 过少(默认30)时会告警,当每个 osd 的 pg num 过多(默认300)也会告警。

所以,想要入门使用 ceph,还是需要了解许多基础知识才可以。否则,各种意外。

https://docs.ceph.com/docs/master/architecture/

https://ceph.com/pgcalc/

⑹ 信息以文件形式存储,文件用什么分类分层存放

文件、块和对象是三种以不同的方式来保存、整理和呈现数据的存储格式。这些格式各有各的功能和限制。文件存储会以文件和文件夹的层次结构来整理和呈现数据;块存储会将数据拆分到任意划分且大小相同的卷中; 对象存储会管理数据并将其链接至关联的元数据。

块存储
块存储会将数据拆分成块,并单独存储各个块。每个数据块都有一个唯一标识符,所以存储系统能将较小的数据存放在最方便的位置。这意味着有些数据可以存储在 Linux 环境中,有些则可以存储在 Windows 单元中。

块存储通常会被配置为将数据与用户环境分离,并会将数据分布到可以更好地为其提供服务的多个环境中。然后,当用户请求数据时,底层存储软件会重新组装来自这些环境的数据块,并将它们呈现给用户。它通常会部署在存储区域网络 (SAN) 环境中,而且必须绑定到正常运行的服务器。

由于块存储不依赖于单条数据路径(和文件存储一样),因此可以实现快速检索。每个块都独立存在,且可进行分区,因此可以通过不同的操作系统进行访问,这使得用户可以完全自由地配置数据。它是一种高效可靠的数据存储方式,且易于使用和管理。它适用于要执行大型事务的企业和部署了大型数据库的企业。这意味着,需要存储的数据越多,就越适合使用块存储。

块存储有一些缺点。块存储的成本高昂。它处理元数据的能力有限。

操作对象:磁盘

存储协议:SCSI、iSCSI、FC

接口命令:以SCSI为例,主要有Read/Write/Read Capacity

存储架构:DAS、SAN

文件存储
文件存储也称为文件级存储或基于文件的存储,数据会以单条信息的形式存储在文件夹中。当需要访问该数据时,计算机需要知道相应的查找路径。存储在文件中的数据会根据元数据来进行整理和检索,这些元数据会告诉计算机文件所在的确切位置。

请试想一下塞满文件柜的储藏室。每个文档都会按照某种类型的逻辑层次结构来排放 ——按文件柜、抽屉、文件夹,然后再是纸张。“分层存储”这个术语就是这么来的,而这就是文件存储。它是适用于直接和网络附加存储(NAS)系统的最古老且运用最为广泛的一种数据存储系统;当访问保存在个人计算机上的文件中的文档,就是在使用文件存储。文件存储具有丰富多样的功能,几乎可以存储任何内容。它非常适合用来存储一系列复杂文件,并且有助于用户快速导航。

问题是基于文件的存储系统必须通过添置更多系统来进行横向扩展,而不是通过增添更多容量来进行纵向扩展。

操作对象:文件和文件夹

存储协议:NFS、SAMBA(SMB)、POSIX

接口命令:以NFS为例,文件相关的接口命令包括:READ/WRITE/CREATE/REMOVE/RENAME/LOOKUP/ACCESS 等;文件夹相关的接口命令包括:MKDIR/RMDIR/READDIR 等

存储架构:NAS (【Linux】NAS存储_Jacky_Feng的博客-CSDN博客)
对象存储
对象存储,也称为基于对象的存储,是一种扁平结构,其中的文件被拆分成多个部分并散布在多个硬件间。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存。

对象存储卷会作为模块化单元来工作:每个卷都是一个自包含式存储库,均含有数据、允许在分布式系统上找到对象的唯一标识符以及描述数据的元数据。元数据包括年龄、隐私/安全信息和访问突发事件等详细信息。为了检索数据,存储操作系统会使用元数据和标识符,这样可以更好地分配负载,并允许管理员应用策略来执行更强大的搜索。

对象存储需要一个简单的 HTTP 应用编程接口 (API),以供大多数客户端(各种语言)使用。对象存储经济高效:您只需为已用的内容付费。它可以轻松扩展,因而是公共云存储的理想之选。它是一个非常适用于静态数据的存储系统,其灵活性和扁平性意味着它可以通过扩展来存储极大量的数据。对象具有足够的信息供应用快速查找数据,并且擅长存储非结构化数据。
它的缺点是无法修改对象 ,即必须一次性完整地写入对象。对象存储也不能很好地与传统数据库搭配使用,因为编写对象是一个缓慢的过程,编写应用以使用对象存储 API 并不像使用文件存储那么简单。

操作对象:对象(Object)

存储协议:S3、Swift

接口命令:主要有PUT/GET/DELETE等

存储架构:去中心化框架

对象存储概念
对象存储的数据组成

存储桶(Bucket):存放对象的“容器”,且该“容器”无容量上限。对象以扁平化结构存放在存储桶中,无文件夹和目录的概念,用户可选择将对象存放到单个或多个存储桶中。存储桶的容量大小需要通过累加各个对象的大小得到。

每个存储桶可容纳任意数量的对象,但同一个主账号下存储桶数量最多仅能够创建200个。(???)

对于存储桶,应当以用途为粒度进行划分,确保每个存储桶的用途尽可能单一。例如,针对存放个人文件、发布静态网站、存储备份等用途都应该创建不同的存储桶。此外,不同项目的数据、不同的网站,或者完全私人的文件与工作性质、需要分享的文件,也应该划分不同的存储桶。

对象存储中也没有“文件夹”的概念。对象存储的管理平台为了模仿本地存储的使用习惯,并与本地存储系统互相兼容而模拟了目录结构,背后的原理也仅仅是根据 / 这个字符对 key 进行分隔。为了表示空目录,部分云平台也提供“文件夹”对象,实际上只是 key 以 / 结尾的空存储对象。

存储桶所在地域(Regin)

指对象存储的数据中心所在地域。对象存储允许用户在不同地域创建存储桶,可以选择在离业务最近的地域上创建存储桶,以满足低延迟、低成本以及合规性要求。

Bucket读写权限

Bucket读写权限包括:私有读写、公有读私有写和公有读写。

私有读写
只有该存储桶的创建者及有授权的账号才对该存储桶中的对象有读写权限,其他任何人对该存储桶中的对象都没有读写权限。存储桶访问权限默认为私有读写,推荐使用。
公有读私有写
任何人(包括匿名访问者)都对该存储桶中的对象有读权限,但只有存储桶创建者及有授权的账号才对该存储桶中的对象有写权限。
公有读写
任何人(包括匿名访问者)都对该存储桶中的对象有读权限和写权限,不推荐使用。
对象(Object):对象存储的基本单元,可理解为任何格式类型的数据,例如图片、文档和音视频文件等。

每个对象都由对象键(Key)、对象值(Data)、和对象元数据(Metadata)组成。

对象键(Key):对象键是对象在存储桶中的全局唯一标识(UID),可以理解为文件(名)路径。
key用于检索对象,文件对象的 key 与实际存储路径无关,服务器和用户不需要知道数据的物理地址,通过key就能找到对象。

对象值(Data):即存储对象内容数据,可以理解为文件内容(Object Content)。
对象元数据(Metadata):是一组键值对,可以通俗的理解为文件的属性,例如文件的修改时间、存储类型等。(传统的文件存储,元数据属于文件本身,和文件一起封装存储。而对象存储,元数据独立出来,并不在数据内部封装。)
对象访问地址

对象的访问地址由存储桶访问地址和对象键组成,其结构形式为<存储桶域名>/<对象键> 。

例如:上传对象exampleobject.txt到广州(华南)的存储桶examplebucket-1250000000中,那么exampleobject.txt的访问地址是:examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject.txt。其中examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com为存储桶域名,exampleobject.txt为对象键。

目录和文件夹

对象存储中本身是没有文件夹和目录的概念的,对象存储不会因为上传对象project/a.txt而创建一个project文件夹。为了满足用户使用习惯,对象存储在控制台、COS browser 等图形化工具中模拟了“文件夹”或“目录”的展示方式,具体实现是通过创建一个键值为project/,内容为空的对象,展示方式上模拟了传统文件夹。

对象操作

用户通过控制台、工具、API、SDK等多种方式管理对象。

对象存储架构
对象存储设备(OSD)
OSD由存储介质、处理器、内存以及网络系统等组成,负责管理本地的对象,是对象存储系统的核心。和块设备相比,它们的差异在于提供的访问接口。OSD的主要功能是数据存储和安全访问。

数据存储:OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写。

智能分布:OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。

对象元数据管理:OSD管理存储的对象元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。

元数据服务器(MDS)
MDS控制Client与OSD对象的交互,为客户端提供元数据,主要是文件的逻辑视图(文件与目录的组织关系、每个文件所对应的OSD等)。主要功能如下:

对象存储访问:MDS构造和管理描述每个文件分布的逻辑视图,允许Client直接访问对象。MDS为Client提供访问该文件所含对象的能力,OSD在接收到每个请求时将先验证该能力,然后才可以访问。

文件和目录访问管理:MDS在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。

Client Cache一致性:为了提高Client性能,在对象存储系统设计时通常支持Client方的Cache。由于引入Client方的Cache,带来了Cache一致性问题,MDS支持基于Client的文件Cache,当Cache的文件发生改变时,将通知Client刷新Cache,从而防止Cache不一致引发的问题。

客户端(Client)
对象存储系统提供给用户的也是标准的POSIX文件访问接口。接口具有和通用文件系统相同的访问方式,同时为了提高性能,也具有对数据的Cache功能和文件的条带功能。同时,文件系统必须维护不同客户端上Cache的一致性,保证文件系统的数据一致。

文件系统读访问流程:

① 客户端应用发出读请求;

② 文件系统向元数据服务器发送请求,获取要读取的数据所在的OSD;

③ 直接向每个OSD发送数据读取请求;

④ OSD得到请求以后,判断要读取的Object,并根据此Object要求的认证方式,对客户端进行认证,如果此客户端得到授权,则将Object的数据返回给客户端;

⑤ 文件系统收到OSD返回的数据以后,读操作完成。

对象存储的优缺点
(1)优点:

容量大,高扩展性
对象存储的容量是EB级以上,对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点、集群都可以独立扩容。从理论上来说,某个对象存储系统或单个桶(bucket),并没有总数据容量和对象数量的限制,即服务商就可以不停地往架构里增加资源,这个存储空间就是无限的,也是支持弹性伸缩的。

高安全性,可靠性
对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),实现异地容灾和资源隔离。数据访问方面,所有的桶和对象都有访问控制策略,所有连接都支持SSL加密,访问用户进行身份权限鉴定。

高性能,支持海量用户的并发访问
(2)缺点:

不支持直接在存储上修改
对象存储系统保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。因此,它不适合存储需要频繁擦写的数据。

参考链接:

对象存储,为什么那么火? - 知乎 (hu.com)
对象存储 存储桶概述 - 开发者指南 - 文档中心 - 腾讯云 (tencent.com)
基本概念 (aliyun.com)
文件存储、块存储还是对象存储? (redhat.com)
linux
驻马店市民请关注领取补贴!
巨魔-抽手机公告
广告

对比块存储、文件存储、对象存储
1242阅读·0评论·3点赞
2019年2月27日
ShapeFile的文件格式设计
90阅读·0评论·0点赞
2009年3月20日
应用ceph对象存储(ceph-13.2.10)
72阅读·0评论·0点赞
2022年11月26日
三种存储类型比较-文件、块、对象存储
4.8W阅读·0评论·13点赞
2016年7月26日
常见图片存储格式文件简介
4534阅读·0评论·0点赞
2020年5月4日
s3cmd常用命令
781阅读·0评论·0点赞
2022年11月17日
驻马店发布,你有一台5G手机待领取

00:23
巨摩互动
广告
常见的存储格式
1083阅读·0评论·0点赞
2022年2月15日
文件、对象、块区别
1399阅读·0评论·0点赞
2020年7月13日
对象存储、文件存储、块存储的区别和联系
7330阅读·2评论·5点赞
2021年10月16日
数据分析中常见的存储方式
1537阅读·0评论·0点赞
2021年11月16日
三种存储类型:块存储、文件存储、对象存储
1.5W阅读·3评论·55点赞
2020年11月2日
如何设计二进制文件格式
1940阅读·0评论·1点赞
2020年3月6日
BMP文件存储格式
472阅读·0评论·2点赞
2021年8月2日
hive 的存储格式
1765阅读·0评论·1点赞
2022年6月18日
数据存储格式
446阅读·0评论·0点赞
2022年12月21日
总结:对象存储、块存储、文件存储的区别
6606阅读·0评论·3点赞
2022年4月9日
c语言中文件rw,什么是“块文件”?
386阅读·0评论·0点赞
2021年5月23日
【存储】块存储、文件存储和对象存储的区别?
350阅读·0评论·0点赞
2022年7月22日
块存储、文件存储与对象存储的区别与应用场景
1846阅读·1评论·0点赞
2022年6月5日
数据在内存中的存储方式
272阅读·0评论·0点赞
2022年8月21日
去首页
看看更多热门内容

⑺ 关于ceph rgw storage_class 的使用研究(amazon S3 智能分层 )

为什么要研究这个?
因为rgw 没找到横向扩容的比较好的办法。有些人是在rgw 上层再加一个接入层,在上面加数据记录。比如一个“虚拟大bucket”,对应了下面多个集群的多个 bucket 。
无论哪一种办法,都要增加额外的元数据管理系统。
看到amazon 的这个 storage class 被ceph rgw (Nautilus)支持后
我打算研究一下利用这个新功能做到几件事
1 横向 在bucket 下扩pool
2 通过 bucket 下同时支持多个 pool,提高读写吞吐。
3 利用 生命周期。前置ssd pool 。达到时间后把对象迁移到后面的廉价 COLD pool 比如 大容量sata 。

ceph 官网文档 地址 https://docs.ceph.com/docs/master/radosgw/placement/

这个功能 amazon s3 在 2018年推出

发布于: Nov 26, 2018

S3 智能分层是一种新的 Amazon S3 存储类,专为希望在数据访问模式发生变化时自动优化存储成本而不会影响性能或运营开销的客户而设计。S3 智能分层是第一个云对象存储类,通过在访问模式发生变化时在两个访问层(频繁访问层和不频繁访问层)之间移动数据来实现自动节省成本,非常适用于访问模式未知或不断变化的数据。

ceph 官方在rgw Nautilus 版本中引入

首先说说 palcement 和 storage class 的区别

placement 是指 bucket 的放置属性 ,storage class 是bucket 内每个对象的放置属性。

placement 下面默认有个标准层 STANDARD 他对应的pool 默认default.rgw.buckets.data (这个pool 可修改为你想存放的 pool,)
"STANDARD": {
"data_pool": “default.rgw.buckets.data”

每个 placemetn 都有个 STANDARD
你可以 添加自定义分层 比如 COLD 不只限于一个。可以多个。

上图是我测试的placement 加的2个class。 可以分别对应不同的pool 。
pool 可以根据你的需要新建在不同的设备上 比如 ssd sas sata
根据我们以前的测试结果

bucket ==> placement storage class ==>pool
创建bucket 通过指定 placement 制定了 放置池组
PUT 对象时候 可以制定 storage_class 指定具体的pool

下面说说具体做法 ,我就在默认 的 default-placement操作测试

根据官网命令 To add a new storage class named COLD to the default-placement target, start by adding it to the zonegroup

先在 zonegroup 加入 tag
1)
$ radosgw-admin zonegroup placement add
--rgw-zonegroup default
--placement-id default-placement
--storage-class COLD
2)zone 中加入 具体 pool 官网例子加上了压缩。这个可以根据需要配置是否加上
radosgw-admin zone placement add
--rgw-zone default
--placement-id default-placement
--storage-class COLD
--data-pool default.rgw.cold.data
--compression lz4

结果如下

placement_pools": [
{
"key": "default-placement”,
"val": {
"index_pool": “default.rgw.buckets.index”,
"storage_classes": {

我们用 s3cmd 测试上传
对我的 测试placement 做put 文件测试 (这里我用自定义 的placemet 做测试

指定 -storage-class=TEMPCOLD

s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest1 --storage-class=TEMPCOLD
upload: 'cirros-0.3.5-x86_64-disk.img' -> ' s3://bucket2/clodtest1' [1 of 1]

s3cmd info s3://bucket2/clodtest1
s3://bucket2/clodtest1 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:03:34 GMT
MIME type: application/octet-stream
Storage: TEMPCOLD
MD5 sum:

如果不加参数

s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest3
upload: 'cirros-0.3.5-x86_64-disk.img' -> ' s3://bucket2/clodtest3' [1 of 1]
13267968 of 13267968 100% in 0s 27.25 MB/s done

数据会落在 STANDARD

s3://bucket2/clodtest3 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:06:24 GMT
MIME type: application/octet-stream
Storage: STANDARD

经过测试 读数据不需要知道对象属于哪一个 Storage


=====
官方说明
所有放置目标都有一个STANDARD存储类,默认情况下该存储类适用于新对象。用户可以使用覆盖此默认设置 default_storage_class。

要在非默认存储类中创建对象,请在请求的HTTP标头中提供该存储类名称。S3协议使用 X-Amz-Storage-Class标头,而Swift协议使用 X-Object-Storage-Class标头。

结论:
1
如果需要 提高性能。可以同时在一个placement 下加入多个 Storage 对应多个 pool。 客户端写数据的时候可以均衡指定 storage-class
具体可以参考s3 api .
或者可以在nginx 接入层做 灵活的指定 X-Amz-Storage-Class (对多个 storage-class 做自定义轮询或者打开关闭)
2
如果需要在pool 将近满了。可以新增一个 storage-class。 客户端读写 指定到新的 storage-class。
3
如果需要用ssd 加速。可以 用ssd pool 作为STANDARD
用 廉价 sata 作为 COLD 进行迁移。 具体要研究 Lifecycle 的设置

我这里就没时间做测试了。

目前我测试的 ceph 是 14.2.5. 不是最新。 感觉这个功能还有写莫名其妙的情况。
建议各位有需要的可以做大规模的测试。

⑻ Ceph 架构与原理

Ceph 是一个开源项目,它提供软件定义的、统一的存储解决方案 。Ceph 是一个具有高性能、高度可伸缩性、可大规模扩展并且无单点故障的分布式存储系统 。
Ceph 是软件定义存储解决方案
Ceph 是统一存储解决方案
Ceph 是云存储解决方案

高可用性

高扩展性

特性丰富

Ceph独一无二地统一的系统提供了对象存储、块存储和文件存储功能。Ceph存储集群由几个不同的软件守护进程组成(比较重要的两个是MON和OSD),每个守护进程负责Ceph的一个独特功能并将值添加到相应的组件中。

RADOS是CEPH存储系统的核心,也称为Ceph 存储集群。Ceph的数据访问方法(如RBD,CephFS,RADOSGW,librados)的所有操作都是在RADOS层之上构建的。当Ceph 集群接收到来自客户端的请求时,CRUSH算法首先计算出存储位置,最后将这些对象存储在OSD中,当配置的复制数大于1时,RADOS负责的形式将数据分发到集群内的所有节点,最后将这些对象存储在OSD中。当配置的复制数大于1时,RADOS负责数据的可靠性,它复制对象,创建副本并将它们存储在不同的故障区域中。
RADOS包含两个核心组件: OSD和MON

OSD 是Ceph 存储集群中最重要的一个基础组件,他负责将实际的数据以对象的形式存储在每一个集群节点的物理磁盘中。对于任何读写操作,客户端首先向MON请求集群MAP,然后客户端旧可以直接和OSD进行I/O操作。
一个Ceph 集群包含多个OSD。一个典型的Ceph集群方案会为集群节点上的每个物理磁盘创建一个ODS守护进程,这个是推荐的做法。OSD上的每个对象都有一个主副本和几个辅副本,辅副本分散在其他OSD。一个OSD对于一些对象是主副本,同时对于其他对象可能是辅副本,存放辅副本的OSD主副本OSD控制,如果主副本OSD异常(或者对应的磁盘故障),辅副本OSD可以成为主副本OSD。
OSD是有一个已经存在的Linux文件系统的物理磁盘驱动器和OSD服务组成。Ceph 推荐OSD使用的文件系统是XFS。OSD的所有写都是先存到日志,再到存储.

MON 负责监控整个集群的健康状况。它以守护进程的形式存在,一个MON为每一个组件维护一个独立的MAP,如OSD,MON,PG,CRUSH 和MDS map。这些map 统称为集群的MAP。MON 不为客户端存储和提供数据,它为客户端以及集群内其他节点提供更新集群MAP的服务。客户端和集群内其他节点定期与MON确认自己持有的是否是集群最新的MAP.一个Ceph集群通常包含多个MON节点,但是同一时间只有一个MON。

librados是一个本地的C语言库,通过它应用程序可以直接和RADOS通信,提高性能

Ceph 块存储,简称 RBD,是基于 librados 之上的块存储服务接口。RBD 的驱动程序已经被集成到 Linux 内核(2.6.39 或更高版本)中,也已经被 QEMU/KVM Hypervisor 支持,它们都能够无缝地访问 Ceph 块设备。Linux 内核 RBD(KRBD)通过 librados 映射 Ceph 块设备,然后 RADOS 将 Ceph 块设备的数据对象以分布式的方式存储在集群节点中

RGW,Ceph对象网关,也称做RADOS网关,它是一个代理,可以将HTTP请求转换为RADOS,也可以把RADOS转换为HTTP请求,从而提供restful接口,兼容S3和Swift。Ceph对象网关使用Ceph对象网关守护进程(RGW)与librgw、librados交互。Ceph对象网关支持三类接口:S3、Swift、管理API(通过restful接口管理Ceph集群)。RGW有自己的用户管理体系

Ceph 元数据服务器服务进程,简称 MDS。只有在启用了 Ceph 文件存储(CephFS)的集群中才需要启用 MDS,它负责跟踪文件层次结构,存储和管理 CephFS 的元数据。MDS 的元数据也是以 Obejct 的形式存储在 OSD 上。除此之外,MDS 提供了一个带智能缓存层的共享型连续文件系统,可以大大减少 OSD 读写操作频率。

CephFS在RADOS层之上提供了一个兼容POSIX的文件系统。它使用MDS作为守护进程,负责管理其元数据并将它和其他数据分开。CephFS使用cephfuse模块(FUSE)扩展其在用户空间文件系统方面的支持(就是将CephFS挂载到客户端机器上)。它还允许直接与应用程序交互,使用libcephfs库直接访问RADOS集群。

Ceph管理器软件,可以收集整个集群的所有状态。有仪表板插件

一个对象通常包含绑定在一起的数据和元数据,并且用一个全局唯一的标识符标识。这个唯一的标识符确保在整个存储集群中没有其他对象使用相同的对象ID,保证对象唯一性。基于文件的存储中,文件大小是有限制的,与此不同的是,对象的大小是可以随着大小可变的元数据而变得很大。对象不使用一个目录层次结构或树结构来存储,相反,它存储在一个包含数十亿对象且没有任何复杂性的线性地址空间中。对象可以存储在本地,也可以存放在地理上分开的线性地址空间中,也就是说,在一个连续的存储空间中。任何应用程序都可以基于对象ID通过调用restful API从对象中获取数据。这个URL可以以同样的方式工作在因特网上,一个对象ID作为一个唯一的指针指向对象。这些对象都以复制的方式存储在OSD中,因为能提供高可用性。

对于Ceph集群的一次读写操作,客户端首先联系MON获取一个集群map副本,然后使用对象和池名/ID将数据转换为对象。接着将对象和PG数一起经过散列来生成其在Ceph池中最终存放的那一个PG。然后前面计算好的PG经过CRUSH查找来确定存储或获取数据所需的主OSD的位置。得到准确的OSD ID之后,客户端直接联系这个OSD来存取数据。所有这些计算操作都由客户端来执行,因此它不会影响Ceph集群的性能。一旦数据被写入主OSD,主OSD所在节点将执行CRUSH查找辅助PG和OSD的位置来实现数据复制,进而实现高可用。
  简单地说,首先基于池ID将对象名和集群PG数应用散列函数得到一个PG ID,然后,针对这个PG ID执行CRUSH查找得到主OSD和辅助OSD,最后写入数据。

PG是一组对象地逻辑集合,通过复制它到不同的OSD上来提供存储系统的可靠性。根据Ceph池的复制级别,每个PG的数据会被复制并分发到Ceph集群的多个OSD上。可以将PG看成一个逻辑容器,这个容器包含多个对象,同时这个逻辑容器被映射到多个OSD。
  计算正确的PG数对一个Ceph存储集群来说是至关重要的一步。PG数计算公式如下

Ceph池是一个用来存储对象的逻辑分区,每个池都包含一定数量的PG,进而实现把一定数量的对象映射到集群内部不同OSD上的目的。每一个池都是交叉分布在集群所有节点上的,这样就能提供足够的弹性。池可以通过创建需要的副本数来保障数据的高可用性。
  Ceph的池还支持快照功能,我们可以使用ceph osd pool mksnap命令来给特定的池制作快照。此外,Ceph池还允许我们为对象设置所有者和访问权限。

数据管理始于客户端向Ceph池中写数据。一旦客户端准备写数据到Ceph池中,数据首先写入基于池副本数的主OSD中。主OSD再复制相同的数据到每个辅助OSD中,并等待它们确认写入完成。只要辅助OSD完成数据写入,就会发送一个应答信号给主OSD。最后主OSD再返回一个应答信号给客户端,以确认完成整个写入操作。