块存储与分布式存储

块存储,简单来说就是提供了块设备存储的接口。通过向内核注册块设备信息,在Linux中通过lsblk可以得到当前主机上块设备信息列表。

本文包括了单机块存储介绍、分布式存储技术Ceph介绍,云中的块存储Cinder,以及华为软件定义的存储解决方案。

单机块存储

一个硬盘是一个块设备,内核检测到硬盘然后在/dev/下会看到/dev/sda/。因为需要利用一个硬盘来得到不同的分区来做不同的事,通过fdisk工具得到/dev/sda1, /dev/sda2等,这种方式通过直接写入分区表来规定和切分硬盘,是最死板的分区方式。

分布式块存储

在面对极具弹性的存储需求和性能要求下,单机或者独立的SAN越来越不能满足企业的需要。如同数据库系统一样,块存储在scale up的瓶颈下也面临着scale out的需要。

分布式块存储系统具有以下特性:

分布式块存储可以为任何物理机或者虚拟机提供持久化的块存储设备; 分布式块存储系统管理块设备的创建、删除和attach/detach;

分布式块存储支持强大的快照功能,快照可以用来恢复或者创建新的块设备; 分布式存储系统能够提供不同IO性能要求的块设备。

现下主流的分布式块存储有Ceph、AMS ESB、阿里云磁盘与sheepdog等。

1 Ceph

1.1 Ceph概述

Ceph目前是OpenStack支持的开源块存储实现系统(即Cinder项目backend driver之一) 。Ceph是一种统一的、分布式的存储系统。“统一的”意味着Ceph可以一套存储系统同时提供对象存储、块存储和文件系统存储三种功能,以便在满足不同应用需求的前提下简化部署

和运维。“分布式”在Ceph系统中则意味着真正的无中心结构和没有理论上限的系统规模可扩展性。

Ceph具有很好的性能、可靠性和可扩展性。其核心设计思想,概括为八个字—“无需查表,算算就好”。

1.2 Ceph系统的层次结构

自下向上,可以将Ceph系统分为四个层次:

基础存储系统RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储);

基础库LIBRADOS;

高层应用接口:包括了三个部分:RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System)。

RADOS由两个组件组成:一种是数量很多、负责完成数据存储和维护功能的OSD( Object Storage Device)。另一种则是若干个负责完成系统状态检测和维护的Monitor。OSD和monitor之间相互传输节点状态信息,共同得出系统的总体工作状态,并形成一个全局系统状态记录数据结构,即所谓的cluster map。这个数据结构与RADOS提供的特定算法相配合,便实现Ceph“无需查表,算算就好”的核心机制以及若干优秀特性。

OSD可以被抽象为两个组成部分,即系统部分和守护进程(OSD deamon)部分。OSD的系统部分本质上就是一台安装了操作系统和文件系统的计算机,其硬件部分至少包括一个单核的处理器、一定数量的内存、一块硬盘以及一张网卡。在上述系统平台上,每个OSD

拥有一个自己的OSD deamon。这个deamon负责完成OSD的所有逻辑功能,包括与monitor和其他OSD(事实上是其他OSD的deamon)通信以维护更新系统状态,与其他OSD共同完成数据的存储和维护,与client通信完成各种数据对象操作等等。

1.3 Ceph中的数据寻址

用户存储数据时的数据路由过程如下图所示:

首先明确几个概念:

File ——用户需要存储或者访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。

Ojbect——RADOS所看到的“对象”。Object与上面提到的file的区别是,object的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。

PG(Placement Group)——顾名思义,PG的用途是对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。在实践当中,n至少为2,如果用于生产环境,则至少为3。一个OSD上的PG则可达到数百个。事实上,PG数量的设置牵扯到数据分布的均匀性问题。

OSD——即object storage device。 数据路由的过程需要经过几次寻址:

? File -> object映射。这次映射的目的是,将用户要操作的file,映射为RADOS能够处理的object。其映射十分简单,本质上就是按照object的最大size对file进行切分。这种切分的好处有二:一是让大小不限的file变成最大size一致、可以被RADOS高效管理的object;

二是让对单一file实施的串行处理变为对多个object实施的并行化处理。

? Object -> PG映射。在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。计算公式: hash(oid) & mask ->pgid。根据RADOS的设计,给定PG的总数为m(m应该为2的整数幂),则mask的值为m-1。因此,哈希值计算和按位与操作的整体结果事实上是从所有m个PG中近似均匀地随机选择一个。基于这一机制,当有大量object和大量PG时,RADOS能够保证object和PG之间的近似均匀映射。

? PG -> OSD映射。第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD。如图所示,RADOS采用一个名为CRUSH的算法,将pgid代入其中,然后得到一组共n个OSD。这n个OSD即共同负责存储和维护一个PG中的所有object。前已述及,n的数值可以根据实际应用中对于可靠性的需求而配置,在生产环境下通常为3。具体到每个OSD,则由其上运行的OSD deamon负责执行映射到本地的object在本地文件系统中的存储、访问、元数据维护等操作。和“object->OSD”映射中采用的哈希算法不同,CRUSH算法的结果不是绝对不变的,而是受到当前系统的状态(cluster map)和存储配置策略的影响。故而当系统中的OSD状态、数量发生变化时,Cluster map发生变化,映射的结果也就发生了变化。

1.4 写数据的流程

当某个client需要向Ceph集群写入一个file时,首先需要在本地完成寻址流程,将file变为一个object,然后找出存储该object的一组三个OSD。

找出三个OSD后,client将直接和Primary OSD通信,发起写入操作。

Primary OSD收到请求后,分别向Secondary OSD和Tertiary OSD发起写入操作。当Secondary OSD和Tertiary OSD各自完成写入操作后,将分别向Primary OSD发送确认信息;

当Primary OSD确信其他两个OSD的写入完成后,则自己。也完成数据写入,并向client确认object写入操作完成。

1.5 集群维护

由若干个monitor共同负责整个Ceph集群中所有OSD状态的发现与记录,并且共同形成cluster map的master版本,然后扩散至全体OSD以及client。OSD使用cluster map进行数据的维护,而client使用cluster map进行数据的寻址。

monitor并不主动轮询各个OSD的当前状态。正相反,OSD需要向monitor上报状态信息。常见的上报有两种情况:一是新的OSD被加入集群,二是某个OSD发现自身或者其他OSD发生异常。在收到这些上报信息后,monitor将更新cluster map信息并加以扩散。

? 新增一个OSD时

首先根据配置信息与monitor通信,monitor将其加入cluster map,并设置为up且out状态,再将最新版本的cluster map发给这个新OSD。收到monitor发过来的cluster map之后,这个新OSD计算出自己所承载的PG以及和自己承载同一个PG的其他OSD。然后与这些OSD取得联系。如果这个PG目前处于降级状态(即承载该PG的OSD个数少于正常值),则其他OSD将把这个PG内的所有对象和元数据赋值给新OSD。数据复制完成后,新OSD被置为up且in状态,cluster map也更新。

? 自动化故障恢复

当其中一个OSD发生故障时,如果其PG目前一切正常,则这个新OSD将替换掉故障OSD(PG内将重新选出Primary OSD),并承担其数据。在数据复制完成后,新OSD被置为up且in状态,而被替换的OSD将推出该PG。而cluster map内容也将据此更新。

? 自动化的故障探测过程

如果一个OSD发现和自己共同承担一个PG的另一个OSD无法联通,则会将这一情况上报monitor。此外,如果一个OSD deamon发现自身工作状态异常,也将把异常情况主动上报给monitor。此时,monitor将把出现问题的OSD的状态设置为down且in。如果超过

cinder与ceph的区别_分布式存储基础、Ceph、cinder及华为软件定义的存储方案 -相关推荐

  1. cinder与ceph的区别_配置cinder-volume服务使用ceph作为后端存储

    在ceph监视器上执行 CINDER_PASSWD='cinder1234!' controllerHost='controller' RABBIT_PASSWD='0penstackRMQ' 1.创 ...

  2. 与ceph的区别_Ceph分布式存储高性能设计

    随着数据量的不断增长,如何以高效的方式存储数据量成为IT界的一个挑战.许多传统存储解决方案不能满足日益增长的需求,业界迫切需要一种新的方法来管理现今的数据,为用户控制访问时间,缩减管理成本. 软件定义 ...

  3. 中点和中值滤波的区别_滤波器基础知识简介

    从图1中可以看到,滤波器广泛应用在接收机中的射频.中频以及基带部分.虽然对这数字技术的发展,采用数字滤波器有取代基带部分甚至中频部分的模拟滤波器,但射频部分的滤波器任然不可替代.因此,滤波器是射频系统 ...

  4. 噪音声压和声功率的区别_声学基础知识(三):声压、声功率和声强的联系与区别-下...

    上期主要介绍了三个声学术语:声压,声功率和声强之间的区别,本次课堂继续介绍其主要联系. 二.三者联系 在某些特定的情况下,声压.声功率和声强是能够联系在一起的. 1.声压和声强的关系 在自由场中,声强 ...

  5. dump文件_零基础编程——Python文件、JSON数据存储

    摘要 书接前文: 01-<零基础编程--起步并搭建Python环境> 02-<零基础编程--变量与数据类型> 03-<零基础编程--Python循环.函数.类> 教 ...

  6. ceph与hdfs的比较_分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?

    过去两年,我的主要工作都在Hadoop这个技术栈中,而最近有幸接触到了Ceph.我觉得这是一件很幸运的事,让我有机会体验另一种大型分布式存储解决方案,可以对比出HDFS与Ceph这两种几乎完全不同的存 ...

  7. 【ceph】什么是Ceph?------(MinIO和ceph的区别|GFS(GlusterFS)、MFS、Ceph、Lustre|文档)...

    目录 什么是Ceph? 简介 什么是块存储.文件存储和对象存储以及区别? Ceph存储架构 Ceph数据的存储 Ceph开发如何入门 部署实例 MinIO和ceph ceph和GFS(GlusterF ...

  8. 【ceph】什么是Ceph?------(MinIO和ceph的区别|GFS(GlusterFS)、MFS、Ceph、Lustre|文档)

    目录 什么是Ceph? 简介 什么是块存储.文件存储和对象存储以及区别? Ceph存储架构 Ceph数据的存储 Ceph开发如何入门 部署实例 MinIO和ceph ceph和GFS(GlusterF ...

  9. 解析Ceph和OceanStor 9000分布式存储

    原文作者:ICT架构师技术交流(Hardy) 原文链接:http://www.wtoutiao.com/p/111SobK.html Ceph是呼声很高的开源分布式的SDS产品存储系统.同时提供对象存 ...

最新文章

  1. python基础-模块导入
  2. 公路建厂最短路径问题
  3. Visual Studio使用技巧,创建自己的代码片段
  4. Android Camera 系统架构源码分析
  5. mysql profiling表_mysql8 参考手册-INFORMATION_SCHEMA PROFILING表
  6. iTerm2 使用笔记
  7. POJ - 3304 Segments(简单几何)
  8. python socket tcp远控_Python3实现ICMP远控后门(中)之“嗅探”黑科技
  9. swift语言和python区别_Swift为什么能成为编程语言中的黑马?
  10. KMP算法(待优化)--2015年7月25日14:04:25V1.0版
  11. HBase完全分布式搭建
  12. ubuntu 中wget (下载)命令用法
  13. 小米手机每次安装应用都需要属于小米账号密码
  14. 4个团队领导必备的技能和素质
  15. 王者荣耀上官婉儿的语录
  16. Windows10 LSTC 2021输入法无法使用的问题
  17. java实现word文件转图片,支持分页
  18. 最新:基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化评估及论文写作技巧
  19. 2021年起重机司机(限桥式起重机)考试试题及起重机司机(限桥式起重机)操作证考试
  20. Python for循环遍历字典(dict)的方法

热门文章

  1. 学科网站建设的尝试与思考
  2. SPI总线(一):基本原理篇
  3. Linux进程间通信三 System V 信号量简介与示例
  4. 关于Android中XML解析方式
  5. kafka 同步提交 异步_腾讯游戏工程师分享:简单理解 Kafka 的消息可靠性策略
  6. java读取dcm影像文件_使用dcmtk库读取.dcm文件并获取信息+使用OpenCV显示图像
  7. python定义字典列表_[Python基础]五、列表、元组和字典
  8. pandas to_json转换时强制中文而不是unicode
  9. 按键驱动的思路分析和代码实现
  10. 图像识别python cnn_MINIST深度学习识别:python全连接神经网络和pytorch LeNet CNN网络训练实现及比较(一)...