有人问我,你是如何做到统一存储的?我微微一笑,大声告诉他:Ceph在手,天下我有。

Ceph是一个统一的分布式存储系统,旨在实现出色的性能,可靠性和可扩展性。认了OpenStack做大哥之后更是一发不可收拾,受到大家广泛的关注。当然这都是因为它能提供多样可靠稳定的存储服务。

Ceph支持三种调用模式,这三种方式可以一同进行使用:

  1. 对象存储(Object):有原生的API,而且也兼容Swift和S3的API
  2. 块存储(Block):支持精简配置、快照、克隆
  3. 文件系统挂载(File):Posix接口,支持快照

是不是心间突生豪气,Ceph在手,当存尽天下所有AVI?

还记得上篇我们划重点的四个问题吗?在Ceph中是怎样去实现以实现可扩展、高性能、可靠性的呢?

  1. 原始存储格式 or 特殊存储格式,通过什么格式存储才能方便的管理数据,保证数据的迁移和安全。

  2. 大文件 or 小文件,文件系统适合大文件还是小文件存储,如何提供I/O效率。

  3. 数据高可用 or 空间利用率,通过复制副本技术提高数据可用性必然会降低空间利用率,应该如何取舍。

  4. 是否有元数据服务,元数据服务是保存存储数据元数据信息的服务,读写数据都需要连接元数据服务器保证一致性。存在元数据服务势必会存在单点问题和性能瓶颈问题。

我们先来看一下Ceph的基础架构图:

RADOS:位于Ceph的最下层,Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储。Ceph所有的存储功能都是基于RADOS实现,在RADOS中一个Object的大小(通常为2MB或4MB),以便实现底层存储的组织管理。所以Ceph底层也是将文件分割成多个小文件的方式进行存储的。

librados:这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS(而不是整个Ceph)进行应用开发。目前提供PHP、Ruby、Java、Python、C和C++支持,通用性很重要。

RADOS GW(RADOS Gateway):提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。

RBD(Reliable Block Device):提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume

Ceph FS:是一个POSIX兼容的分布式文件系统

上层这三个模块都位于Ceph的应用接口层,其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。

通过上面对Ceph架构的简单介绍我们可以知道Ceph也是以特殊存储格式进行存储的,将文件切分成2M~4M的Object存储到RADOS中,对于小文件和大文件都支持。

Ceph有两个很重要的守护进程:OSDs and Monitors。

OSD(Object Storage Device):负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD,支持自动备份和恢复。

Monitor:一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos协议(Zookeeper也是通过Paxos实现一致性)同步数据,用来保存OSD的元数据。

由此可见Ceph也需要元数据服务,但是实现了去中心化(划重点,需要理解OSD和Monitor的功能,如果对HBase了解的话,我觉得可以类比一下Zookeeper和HRegionServer的关系)。

Ceph特性

CRUSH(Controlled Replication Under Scalable Hashing)算法,实现去中心化,没有单点故障(下篇会讲到)

统一的存储架构,提供不同的存储解决方案

支持副本和EC两种数据冗余方式

自我管理,自我修复

专为云基础架构和新兴工作负载而设计

横向扩展、动态伸缩、冗余容灾、负载平衡等

少年,Ceph了解一下?

参考:
Ceph官方文档

欢迎关注我:叁金大数据(不稳定持续更新~~~)

Ceph在手,天下我有的更多相关文章

  1. [LeetCode] Palindrome Partitioning II 拆分回文串之二

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  2. Pyqt在QListWidget中添加右键菜单

    Pyqt 的资料奇少, 攻破难点之后, 就在这里记一下笔记. QListWidget 是继承 QWidget 的, 所以 QListWidget 是有右键菜单的, 从文档上可以找到 QWidget 上 ...

  3. js-day05-JSON-jQuery初体验

    JSON数据格式 JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快)JSON是JavaSc ...

  4. Mysql高级查询 内连接和外连接详解

    一.内连接(INNER JOIN) 1.等值连接 概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录. 语法: SELECT 列 FRO ...

  5. App工程结构

    在经过千辛万苦各种填坑终于安装好了Android Studio之后,在其自带的模拟器上成功运行了第一个APP(hello world),通过这个APP首先研究了一下APP基本的工程结构,从而使后面的开 ...

  6. 至少你要了解RSS

    本文概要: 1.RSS是什么,有什么作用? 2.是不是所有的网站都有RSS功能? 3.没有RSS功能的网站如何订阅? 4.RSS是否已经过时? 5.推荐一些热门的RSS订阅地址 1.RSS是什么,有什 ...

  7. 老板让只懂Java基本语法的我,基于AQS实现一个锁

    10 点整,我到了公司,又成为全组最后一个到的员工. 正准备刷刷手机摸摸鱼,看见老板神秘兮兮地走了过来. 老板:闪客呀,你写个工具,基于 AQS 实现一个锁,给咱们组其他开发用 我:哦好的 老板:你多 ...

  8. ArrayPool 源码解读之 byte[] 也能池化?

    一:背景 1. 讲故事 最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数 ...

  9. C# ArrayPool 源码解读之 byte[] 池化

    一:背景 1. 讲故事最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数组 ...

随机推荐

  1. [bzoj2229][Zjoi2011]最小割_网络流_最小割树

    最小割 bzoj-2229 Zjoi-2011 题目大意:题目链接. 注释:略. 想法: 在这里给出最小割树的定义. 最小割树啊,就是这样一棵树.一个图的最小割树满足这棵树上任意两点之间的最小值就是原 ...

  2. openstack setup demo Enviroment

    Enviroment 本文包含以下部分. Host networking Network Time Protocol (NTP) OpenStack packages SQL database NoS ...

  3. IOS程序崩溃报告管理解决方案(Crashlytics 在2014-09-24)

    预研Crashlytics  在2014-09-241:实现原理在原理上,Crashlytics通过以下2步完成崩溃日志的上传和分析:(1)提供应用SDK,你需要在应用启动时调用其SDK来设置你的应用 ...

  4. Python学习系列之面向对象

    概述 一.Python编程方式 面向过程编程:根据业务逻辑从上到下磊代码 面向函数编程:将某功能代码封装到函数中,将来直接调用即可,无需重新写 面向对象编程:对函数进行分类.封装 二.面向过程编程 w ...

  5. hadoop 文件操作

    Create a directory in HDFS - mkdir The hadoop mkdir command is for creating directories in the hdfs. ...

  6. C++ - 库函数优先级队列(priority_queue)输出最小值 代码

    库函数优先级队列(priority_queue)输出最小值 代码 本文地址: http://blog.csdn.net/caroline_wendy 库函数优先级队列(priority_queue)的 ...

  7. Android架构的简单探讨(一)

    在CSDN上看到这样一篇译文,虽然最终的解决方案要按照自己特定的项目去设计,但该文还是引起了很多自己的共鸣,原文猛戳这里. 这是他提出的基于Messaging的MVC框架: 其中包含的设计思想在于:哪 ...

  8. IEDA-maven引用本地jia包

    简单说下为啥用maven引用本地jar包:当在pom文件中配置需要引用了jar的坐标,但是maven引用不了(原因未知情况下),这种情况下就需要找开发提供相关依赖的的jar文件打成一个jar包发送过来 ...

  9. [DLX反复覆盖] poj 1084 Square Destroyer

    题意: n*n的矩形阵(n<=5),由2*n*(n+1)根火柴构成,那么当中会有非常多诸如边长为1,为2...为n的正方形,如今能够拿走一些火柴,那么就会有一些正方形被破坏掉. 求在已经拿走一些 ...

  10. 深入浅出Hibernate(二)多对一关系映射

    学习Hibernate是为了更方便的操作数据库,在数据库中的关系模型中存在多对一的关系,比方下图所看到的的员工和部门之间的关系,那么这样的关系在Hibernate中怎样映射呢?让我用一个小Demo来具 ...