存储介绍

认识分布式存储
1
分布式存储系统,是通过网络将数据分散存储在多台独立的设备上。
分布式存储系统的特性
  • 可扩展性:节点扩展后旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况;水平扩展只需将新节点和原有利群连接到同一网络不会对业务造成影响;当节点被添加到集群,集群系统的整体容量和性能也随之线性扩展。
  • 低成本:
  • 高性能
  • 易用、易管理
1
2
分布式存储系统的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。
分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库。
存储分类
  • 本地存储:硬盘,不能在网络上用,ext3、ext4、xfs、ntfs。
  • 网络存储:网络文件系统,共享的都是文件系统。nfs、hdfs、glusterfs(后2个都是分布式网络文件系统)
  • 共享裸设备:块存储,cinder、ceph(可作为块存储、对象存储、分布式网络文件系统)、SAN(光纤交换机存储)
  • 分布式存储:集群
分布式存储分类介绍
  • Hadoop HDFS: 大数据分布式文件系统
1
2
3
4
5
6
7
8
9
10
11
hadoop的存储组件,hdfs是一个高度容错性的系统,能提供高吞吐量的数据访问非常适合大规模数据集上的应用。

优点:
高容错性:数据自动保存多个副本,副本丢失后自动恢复。
良好的数据访问机制:一次写入多次读取,保证数据一致性。
适合大数据文件的存储:TB、PB级数据,扩展能力强。

缺点:
低延迟数据访问困难:难以应付毫秒级以下的应用。
海量小文件存取:占用NameNode大量内存
一个文件只能有一个写入者:仅支持append追加。
  • Openstack的对象存储Swift

mark

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Swift目的使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储可达PB级。Swift是python开发。

特点:
各个存储的节点完全对等,是对称的系统架构。
开发者通过一个RESTful HTTP API与对象存储相关作用。
无单点故障:Swift的元数据存储是完全均匀随机分布的,并且与对象文件存储一样元数据也会存储多份。整个swift集群中没有一个角色是单点的。
不影响性能情况下,集群通过增加外部节点进行扩展。
无限的可扩展性:存储容量的无限扩展;swift性能,QPS 吞吐量等可线性提升。扩容只需简单地新增机器系统会自动完成数据迁移等工作使各存储节点重新达到平衡状态。

用途:
图片、文档存储
长期保存的日志文件
存储媒体库(照片、音乐、视频等)
视频监控文件的存档
  • GlusterFS
1
2
3
4
5
6
7
8
9
10
11
12
GlusterFS是一种全对称的开源分布式文件系统,全对此是指GlusterFS采用弹性哈希算法,没有中心节点所有节点全部平等。GlusterFS配置方便、稳定性好,可轻松到达PB级别容量,数千个节点。

各种卷的分类:
分布卷:存储数据时,将文件随机存储各台glusterfs机器上。
优点:存储数据时。读取速度快
缺点:一个birck坏掉,文件就会丢失
复制卷:存储数据时,所有文件分别存储到每台gluster机器上
优点:对文件进行多次备份。一个brick坏掉文件不会丢失,其他机器的brick上面有备份
缺点:占用资源
条带卷:存数据时,一个文件分开存到每台glusterfs机器上
优点:对大文件读写速度快
缺点:一个brick坏掉文件就会坏掉
  • 公有云对象存储
1
2
3
4
5
6
aws s3; azure bolb; 阿里云 oss;腾讯云 cos;华为云 obs等

场景:
图片和音视频等应用海量存储
网页或移动应用静态、动态资源分离
云端数据处理 配合视频服务

ceph介绍

ceph简介

1
2
3
ceph使用c++语言开发
设计初衷是变成一个可避免单点故障的分布式文件系统,PB级别的扩展能力,开源等。
一个统一的分布式存储系统,提供较好的性能、可靠性和可扩展性。

优势

1
2
3
4
高可扩展:使用普通x86服务器,支持10~1000台服务器,支持TB到EB扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复
高性能:数据分布均衡
可用于对象存储、块设备存储和文件系统存储

ceph架构

mark

1
2
3
4
5
6
7
8
9
10
11
基础存储系统
rados:基础存储系统RADOS,所有存储在ceph系统中的用户数据事实上最终都是由这一层来存储的。ceph的高可靠、高可扩展、高性能、高自动化等特性也是由这一层所提供的。

基础库librados:
librados:这一层功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS进行应用开发。

高层应用接口:
radosgw:对象网关接口(对象存储)
rbd:块存储
cephfs:文件系统存储
其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。

ceph基本组件

mark

  • ceph主要三个组件
1
2
3
4
5
6
7
Osd:用于集群中所有数据与对象的存储,处理集群数据的复制、恢复、回填、再均衡。并向其他osd守护进程发送心跳,然后向Mon提供一些监控信息。当ceph存储集群设定数据有两个副本时(一共存2份)则至少需要2个OSD守护进程即2个osd节点,集群才能达到active+clean状态。

Montor:监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性。clusterMAP描述了对象存储的物理位置,以及一个将设备聚合到物理位置的桶列表。

Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供ceph dashboard(ceph ui)和restful api。manager组件开启高可用时至少2个。

MDS(可选):为ceph文件系统提供元数据计算、缓存同步(也就是ceph块设备和ceph对象存储不使用MDS)。在ceph中元数据也是存储在osd节点中的,mds类似于元数据代理缓存服务器。MDS进程并不是必须的进程,只有需要使用cephFS(文件系统)时,才需要配置MDS节点。
  • ceph结构包含2个部分
1
2
3
ceph client:访问ceph底层服务或组件,对外提供各种接口。比如对象存储接口、块存储接口、文件缓存接口。

ceph node:ceph底层服务提供端,也就是ceph存储集群。

Ceph存储种类及其应用场景

块存储
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
典型设备:磁盘阵列、硬盘
主要是将裸磁盘空间映射给主机使用的。

优点:
通过Raid与LVM等手段,对数据提供了保护。
多块廉价的硬盘组合起来,提高容量。
多块磁盘组合出来的逻辑盘,提升读写效率。

缺点:
采用SAN架构组网,光纤交换机,造价成本高。
主机之间无法共享数据。

使用场景:
docker容器、虚拟机磁盘存储分配
日志存储
文件存储
文件存储
1
2
3
4
5
6
7
8
9
10
11
12
13
典型设备:FTP、NFS服务器
为了克服块存储文件无法共享的问题,所以有了文件存储。
在服务器上架设FTP与NFS服务就是文件存储。

优点:
造价低,随便一台机器就可
方便文件共享

缺点:
读写速率低、传输速度慢

使用场景:
日志存储、有目的结构的文件存储
对象存储

ceph同时提供对象存储、块存储和文件系统存储三种功能,满足不同应用需求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
为什么需要对象存储?
一个文件包含了属性(metadata 元数据,例如该文件的大小、修改时间、存储路径等)以及内容(数据)。

例如FAT32文件系统,存储过程是链表的形式。
对象存储则将元数据独立出来,控制节点叫元数据服务器里面主要负责存储对象的属性,而负责存储数据的分布式服务器叫OSD 主要负责存储文件的数据部分。
例如用户访问先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些OSD。所以当OSD服务器数量越多,这种读写速度的提升就越大。

所以对象存储的出现,很好的结合了块存储于文件存储的优点。

优点:
具备块存储的读写高速
具备文件存储的共享等特性

使用场景:
适合更新变动较少的数据
图片存储、视频存储、备份存储等。
1
2
什么是OSD?
对象存储(object-based storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(object-based storage Device)简称OSD。总体上来讲对象存储综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。

ceph数据的存储过程

mark

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
无论使用哪种存储方式(对象、块、网络挂载),存储的数据都会被切分成对象(objects)。
objects size大小可以由管理员调整,通常为2M或4M。
每个对象都会有一个唯一的OID,由ino(文件的File ID,用于在全局唯一标识每一个文件)和ono(分片的编号)生成。OID的好处是可以唯一标识每个不同的对象,并且存储了对象与文件的从属关系。

但是对象并不会之间存储进OSD中,因为对象的size很小。在一个大规模的集群中可能有几百到几千万个对象,这么多对象光是遍历寻址速度都是很缓慢的。
并且如果将对象直接通过某种固定映射的哈希算法映射到osd上,当这个osd损坏时,对象无法自动迁移至其他osd上面(因为映射函数不允许)。
为了解决这些问题,ceph引入了归置组概念,即PG。

PG是一个逻辑概念,它在数据寻址时类似于数据库中的索引,每个对象都会固定映射进一个PG中,所以当我们要寻找一个对象时,只需要先找到对象所属的PG然后遍历这个PG就可以了,无需遍历所有对象。
而且在数据迁移时,也是以PG作为基本单位进行迁移,ceph不会直接操作对象。

对象如何映射进PG?
首先使用静态hash函数对OID做hash取出特征码,用特征码与PG的数量取模,得到的序号则是PGID。
由于这种设计方式,PG的数量多少直接决定了数据分布的均匀性,所以合理设置的PG数量可以很好的提升ceph集群的性能并使数据均匀分布。

PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上(其实是把PG中的所有对象存储到节点上),第一个OSD节点即为主节点,其余均为从节点。

ceph名词介绍

1
2
3
4
5
6
7
8
9
10
11
Monitor:监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性。
OSD:负责响应客户端请求返回具体数据的进程,一个ceph集群一般有很多个OSD。
MDS:cephFS服务依赖的元数据服务,块存储和对象存储不需要。
object:ceph最底层的存储单元是object对象,每个object包含元数据和原始数据。
PG:placement groups,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实就是为了更好的分配数据和定位数据。
RADOS:ceph集群的精华,用户实现数据分配、Failover等集群操作。
Librados:是Rados提供库,因为Rados是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的。目前提供PHP、JAVA、Python、C和C++支持。
CRUSH:是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
RBD:是ceph对外提供的块设备服务。
RGW:是ceph对外提供的对象存储服务,接口与S3和Swift兼容。
CephFS:ceph文件系统,是ceph对外提供的文件系统服务。
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。