0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Ceph对象存储的混合云机制的深度解读

存储界 来源:未知 作者:李倩 2018-04-29 15:12 次阅读

1.背景

毫无疑问,乘着云计算发展的东风,Ceph已经是当今最火热的软件定义存储开源项目。如下图所示,它在同一底层平台之上可以对外提供三种存储接口,分别是文件存储、对象存储以及块存储,本文主要关注的是对象存储即radosgw。

基于Ceph可方便快捷地搭建安全性好、可用性高、扩展性好的私有化存储平台。私有化存储平台虽然以其安全性的优势受到越来越多的关注,但私有化存储平台也存在诸多弊端。 例如在如下场景中,某跨国公司需要在国外访问本地的业务数据,我们该如何支持这种远距离的数据访问需求呢。如果仅仅是在私有化环境下,无非以下两种解决方案:

直接跨地域去访问本地数据中心中的数据,毫无疑问,这种解决方案会带来较高的访问延迟。

在国外自建数据中心,不断将本地的数据异步复制到远程数据中心,这种解决方案的缺点是成本太高。

在这种场景下,单纯的私有云存储平台并不能很好的解决的上面的问题。但是,通过采用混合云解决方案却能较好地满足上述需求。对于前文所述远距离数据访问的场景,我们完全能借助公有云在远程的数据中心节点作为存储点,将本地数据中心的数据异步复制到公有云,再通过终端直接访问公有云中的数据,这种方式在综合成本和快捷性方面具备较大优势,适合这种远距离的数据访问需求。

2.发展现状:RGW Cloud Sync发展历程

基于Ceph对象存储的混合云机制是对Ceph生态的良好补充, 基于此,社区将在Mimic这个版本上发布RGW Cloud Sync特性,初步支持将RGW中的数据导出到支持s3协议的公有云对象存储平台,比如我们测试中使用的腾讯云COS,同Mulsite中的其他插件一样,RGW Cloud Sync这个特性也是做成了一个全新的同步插件(目前称之为aws sync module),能兼容支持S3协议。RGW Cloud Sync特性的整体发展历程如下:

Suse公司贡献了初始版本,这个版本仅支持简单上传;

Red Hat在这个初始版本之上实现了完整语义的支持,比如multipart上传、删除等,考虑到同步大文件的时候可能会造成内存爆炸的问题,还实现了流式上传。

对于Ceph社区即将在M版本发布的这个公有云同步特性,进行了实际落地测试使用,并根据其中存在的问题进行了反馈及开发。在实际测试过程中,我们搭建了如下所示的运行环境:

其中,Cloud Zone内部包含一个公有云同步插件,它被配置为只读zone,用以将Rgw Zone中写入的数据跨地域同步至腾讯云公有云对象存储平台COS之上。顺利实现将数据从RGW中同步备份至公有云平台,并且支持自由定制来实现将数据导入至不同云端路径,同时我们还完善了同步状态显示功能,能较快监测到同步过程中发生的错误以及当前落后的数据等。

3.核心机制

Multisite

RGW Cloud Sync这个特性本质上是基于Multisite之上的一个全新的同步插件(aws sync module)。首先来看Multisite的一些核心机制。Multisite是RGW中数据远程备份的一种解决方案,本质上来说它是一种基于日志的异步复制策略,下图为一个Multisite的示意图。

Multisite中主要有以下基本概念:

Zone:存在于一个独立的Ceph集群,由一组rgw提供服务,对应一组后台的pool;

Zonegroup:包含至少一个Zone,Zone之间同步数据和元数据;

Realm:一个独立的命名空间,包含至少一个Zonegroup,Zonegroup之间同步元数据。

下面来看Multisite中的一些工作机制,分别是Data Sync、Async Framework、Sync Plugin这三部分。其中Data Sync部分主要分析Multisite中的数据同步流程,Async Framework部分会介绍Multisite中的协程框架,Sync Plugin部分会介绍Multisite中的一些同步插件。

Data Sync

Data Sync用以将一个Zonegroup内的数据进行备份,一个Zone内写入的数据会最终同步到Zonegroup内所有Zone上,一个完整的Data Sync流程包含如下三步:

Init:将远程的source zone与local zone建立日志分片对应关系,即将远程的datalog映射到本地,后续通过datalog就知道有没有数据需要更新;

Build Full Sync Map:获取远程bucket的元信息并建立映射关系来记录bucket的同步状态,如果配置multisite的时候source zone是没有数据的,则这步会直接跳过;

Data Sync:开始object数据的同步,通过RGW api来获取source zone的datalog并消费对应的bilog来同步数据。

下面以一个bucket中数据的增量同步来阐述Data Sync的工作机制。了解RGW的人都应该知道,一个bucket实例至少包含一个bucket shard,Data Sync是以bucket shard为单位来同步的,每个bucket shard有一个datalog shard 及bilog shard与之对应。

在建立完对应关系及进行完全量同步之后,本地Zone会记录Sourcezone每个datalog 分片对应的sync_marker。此后local zone会定期将sync_marker与远程datalog的max_marker比对,若仍有数据未同步,则通过rgw消费datalog entry,datalog entry中记录了对应的bucket shard,消费bucket shard对应的bilog则可进行数据同步。如下面这个图所示,远程的datalog是以 gw_data_chang_log_entry这样一种格式来存储日志的,我们可发现,每条datalog entry中包含rgw_data_change这样一个域,而rgw_data_change中包括的key这个域则是bucket shard的名字,之后就可以找到与之对应的bilog shard,从而消费bilog来进行增量同步。而全量同步其实就是没有开始这个sync_marker,直接从头开始消费datalog来进行数据同步。

Async Framework

RGW中使用的异步执行框架是基于boost::asio::coroutine这个库来开发的,它是一个stackless coroutine,和常见的协程技术不同,Async Framework没有使用ucontext技术来保存当前堆栈信息来支持协程,而是使用宏的技巧来达到类似效果,它通过 reenter/yield/fork 几个伪关键字(宏)来实现协程。RGWCoroutine是RGW中定义的关于协程的抽象类,它本身也是boost::asio::coroutine 的子类,它是用于描述一个任务流的,包含一个待实现的隐式状态机。RGWCoroutine可以call其他RGWCoroutine,也可以spawn一个并行的RGWCoroutine。

RGWCoroutine 类会包含一个 RGWCoroutinesStack成员,使用call调用其他RGWCoroutine的时候会将其对应的任务流都存储在堆栈上,直到所有任务流完成之后控制权才会回到调用者处。然而,spawn一个新的RGWCoroutine时候会生成一个新的任务栈来存储任务流,它不会阻塞当前正在执行的任务流。当一个协程需要执行一个异步IO操作的时候,它会标记自身为阻塞状态,而这个IO事件会在任务管理器处注册,一旦IO完成后任务管理器会解锁当前堆栈,从而恢复这个协程的控制。下图为一个简单的协程使用例子,实现了一个有预定周期的请求处理器

Sync Plugin

前文所述的数据同步过程是将数据从一个ceph zone同步到另一ceph zone,我们完全可以将过程抽象出来,使数据同步变得更加通用,方便添加不同的sync module来实现将数据迁移到不同的目的地。因为上层消费datalog的逻辑都是一致的,只有最后一步上层数据到目的地这步是不一样的,因此我们只需实现数据同步和删除的相关接口就可实现不同的同步插件,每个插件在RGW中都被称为一个sync module,目前Ceph中有以下四个sync module:

rgw:默认sync module,用以在ceph zone之间同步数据

log:用于获取object的扩展属性并进行打印

elasticsearch:用于将数据的元信息同步至ES以支持一些搜索请求

aws:Mimic版本发布,用于导出RGW中的数据到支持S3协议的对象存储平台 4

RGW Cloud Sync

Streaming process

前文讲到Suse公司贡献了RGW Cloud Sync的初始版本,如下图所示,它的一个同步流程逻辑上来说主要分为三步,第一通过aws sync module通过http connection将远程的object拉取过来装载至内存中,之后将这个object put到云端,之后云端会返回一个put result。

对于小文件来说,这个流程是没问题的,但是如果这个object比较大的情况,全部load到内存中就有问题了,因此Red Hat在此基础之上支持了Streaming process。本质上是使用了一个新的协程,这里称之为pipe CR,它采用类似管道的机制,同时保持两个http connection,一个用于拉取远程object,一个用于上传object,且这两个过程是并行的,这样可以有效防止内存爆炸,具体如下图所示。

Multipart upload

Multipart upload是在Streaming process基础之上用以支持大文件的分片上传。它的整体流程如下:

Json config

公有云存储环境相对来说比较复杂,需要更加复杂的配置来支持aws sync module的使用,因此Red Hat在这个插件上支持了json config。

相对其他插件来说主要增加了三个配置项,分别是host_style, acl_mapping,target_path,其中host_style是配置域名的使用格式,acl_mapping 是配置acl信息的同步方式,target_path是配置元数据在目的处的存放点。如下图所示为一个实际使用的配置,它表示配置了aws zone,采用path-style这种域名格式,target_path是rgw加其所在zonegroup的名字并加上它的user_id,之后是它的bucket名字,最终这个object在云端的路径就是target_path加上object名字。

5.关于RGW Cloud Sync方面的后续工作主要有以下四项:

同步状态显示的优化,比如显示落后的datalog、bucket、object等,同时将一些同步过程中发生的错误上报至Monitor;

数据的反向同步,即支持将公有云的数据同步至RGW;

支持将RGW的数据导入更多的公有云平台,而不是仅仅支持S3协议的平台;

在此基础之上以RGW为桥梁来实现不同云平台之间的数据同步。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 云计算
    +关注

    关注

    38

    文章

    7351

    浏览量

    135721
  • 存储
    +关注

    关注

    12

    文章

    3859

    浏览量

    84668

原文标题:深度解读基于Ceph对象存储的混合云机制

文章出处:【微信号:cunchujie,微信公众号:存储界】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解码2017双11:全球狂欢新记录背后的阿里存储

    混合存储战略的重中之重。混合阵列让您可以像本地存储
    发表于 01-03 10:47

    阿里与WPS深度合作,开放数据处理生态

    摘要: 在3月28日举行的2018云栖大会-深圳峰会上,阿里与金山办公达成深度合作,WPS在线预览与格式转换能力落地阿里。标志着阿里存储
    发表于 04-18 14:11

    基于全HDD aarch64服务器的Ceph性能调优实践总结

    1 简介作为一个统一的分布式存储系统,Ceph为应用程序提供了对象,块和文件系统接口。考虑到TCO,我们搭建了一个全HDD的Ceph集群(每个节点11个HDD + 1个SSD),它在
    发表于 07-05 14:26

    Ceph是什么?Ceph的统一存储方案简析

    Ceph仅从软件层面就提供了对象、块和文件存储对象存储要比块或者文件更加适应现在的混合的非结
    发表于 10-08 15:40

    什么是对象存储

    可以通过 RESTful API 进行访问,这使得它与许多应用程序和服务集成变得更加容易。对象存储的好处在于,它可以非常容易地扩展,支持海量数据,并且可以使分布式环境下运行,raksmart机房服务提供
    发表于 03-10 14:42

    OC的消息转发机制深度解读

    相信大家对Object-C的消息传递机制并不陌生(如果不熟悉,我后续会再写一篇关于消息传递机制的文章),今天我来讲解另外一个重要的问题,就是对象在收到无法解读的消息之后会发生什么情况。
    发表于 09-25 17:33 0次下载

    对象存储是什么?块存储又是什么?

    对象存储”或“基于对象存储”一词是由它的名称派生出来的,因为它将数据和元数据封装到对象中。元数据本质上是描述其他数据的数据,或者在基于
    发表于 07-03 12:37 1.9w次阅读

    如何利用Intel的傲腾技术和CPU提升Ceph性能

    Ceph是最常见的块和对象存储后端解决方案,现在新版本也加入了文件的支持。作为一款开源的分布式存储软件解决方案,由于其功能丰富,社区活跃,它在公有云和私有云环境中有着广泛的应用。
    的头像 发表于 06-29 10:49 4746次阅读
    如何利用Intel的傲腾技术和CPU提升<b class='flag-5'>Ceph</b>性能

    深度解读基于Ceph对象存储混合机制

    基于Ceph可方便快捷地搭建安全性好、可用性高、扩展性好的私有化存储平台。私有化存储平台虽然以其安全性的优势受到越来越多的关注,但私有化存储平台也存在诸多弊端。
    发表于 07-08 16:11 1163次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>解读</b>基于<b class='flag-5'>Ceph</b><b class='flag-5'>对象</b><b class='flag-5'>存储</b>的<b class='flag-5'>混合</b>云<b class='flag-5'>机制</b>

    Ceph分布式存储系统性能优化研究综述

    Ceph是一个统一的分布式存储系统,可同时提供块、文件和对象3种接口的存储服务。与传统的分布式存储系统不同,它采用了无中心节点的元数据管理方
    发表于 04-13 13:58 5次下载
    <b class='flag-5'>Ceph</b>分布式<b class='flag-5'>存储</b>系统性能优化研究综述

    一个去中心化的分布式存储系统Ceph概述

    Ceph 是一个去中心化的分布式存储系统, 提供较好的性能、可靠性和可扩展性。
    发表于 09-02 10:11 1559次阅读

    对象存储是什么 对象存储的优势

    在以前的存储市场中,占据主导地位的是DAS/NAS/SAN这三种框架。很多的用户在这三种之中相互权衡,最终选择适合自己的方案来进行存储。但随着时代的不断发展,越来越多的人开始接触到了对象存储
    的头像 发表于 10-16 17:48 3600次阅读

    什么是对象存储

    与传统的文件存储不同,对象存储将数据存储为单个对象,每个对象具有唯一标识符(Object ID)
    的头像 发表于 03-10 14:41 925次阅读

    SDNLAB技术分享:Ceph在云英的实践

    RBD,对象存储RADOSGW和CephFS三种,基本覆盖了绝大部分企业对存储的需求,所以越来越多企业加入到使用Ceph的行列。在国内也有越来越多的个人和企业参与到
    发表于 06-16 09:32 259次阅读
    SDNLAB技术分享:<b class='flag-5'>Ceph</b>在云英的实践

    Ceph分布式存储简介&amp;Ceph数据恢复流程

    Ceph存储可分为块存储对象存储和文件存储Ceph
    的头像 发表于 09-26 15:41 441次阅读