<p id="main-toc"><strong>目录</strong></p>
讯享网
一、分布式存储类型
1、块存储
2、文件存储
3、对象存储
二、ceph概述
1、ceph简介
2、ceph的优势
3、ceph架构
1)RADOS 基础存储系统(Reliab1e,Autonomic,Distributed object store
2)LIBRADOS 基础库
3)高层应用接口
4)应用层
4、ceph核心组件
5、OSD存储方式
1)方式一:Filestore
2)方式二:Bluestore
6、Bluestore的主要功能
7、ceph存储过程
三、ceph的部署
资源池 Pool 管理
1、创建一个 Pool 资源池
2、删除Pool资源池
(例如硬盘,一般是一个存储被一个服务器挂载使用,适用于容器或虚拟机存储卷分配、日志存储、文件存储) 就是一个裸设备,用于提供没有被组织过的存储空间,底层以分块的方式来存储数据
(例如NFS,解决块存储无法共享问题,可以一个存储被多个服务器同时挂载,适用于目录结构的存储、日志存储) 是一种数据的组织存放接口,一般是建立在块级别的存储结构之上,以文件形式来存储数据,而文件的元数据和实际数据是分开存储的
(例如OSS,一个存储可以被多服务同时访问,具备块存储的高速读写能力,也具备文件存储共享的特性,适用图片存储、视频存储) 基于API接口提供的文件存储,每一个文件都是一个对象,且文件大小各不相同的,文件的元数据和实际数据是存放在一起的
Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。
Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储。 粗略估计,我国70%—80%的云平台都将Ceph作为底层的存储平台,由此可见Ceph俨然成为了开源云平台的标配。目前国内使用Ceph搭建分布式存储系统较为成功的企业有华为、阿里、中兴、华三、浪潮、中国移动、网易、乐视、360、星辰天合存储、杉岩数据等。
- 高扩展性:去中心化,支持使用普通X86服务器,支持上千个存储节点的规模,支持TB到EB级的扩展。
- 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
- 高性能:摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。
- 功能强大:Ceph是个大一统的存储系统,集块存储接口(RBD)、文件存储接口(CephFS)、对象存储接口(RadosGW)于一身,因而适用于不同的应用场景。
可以将Ceph系统分为如下四个层次:
1)RADOS 基础存储系统(Reliab1e,Autonomic,Distributed object store
即可靠的、自动化的、分布式的对象存储) RADOS是Ceph最底层的功能模块,是一个无限可扩容的对象存储服务,能将文件拆解成无数个对象(碎片)存放在硬盘中,大大提高了数据的稳定性。它主要由OSD和Monitor两个组件组成,OSD和Monitor都可以部署在多台服务器中,这就是ceph分布式的由来,高扩展性的由来。
2)LIBRADOS 基础库
Librados提供了与RADOS进行交互的方式,并向上层应用提供Ceph服务的API接口,因此上层的RBD、RGW和CephFS都是通过Librados访问的,目前提供PHP、Ruby、Java、Python、Go、C和C++支持,以便直接基于RADOS(而不是整个Ceph)进行客户端应用开发。
3)高层应用接口
包括三个部分
- 对象存储接口 RGW(RADOS Gateway) 网关接口,基于Librados开发的对象存储系统,提供S3和Swift兼容的RESTful API接口。
- 块存储接口 RBD(Reliable Block Device) 基于Librados提供块设备接口,主要用于Host/VM。
- 文件存储接口 CephFS(Ceph File System) Ceph文件系统,提供了一个符合POSIX标准的文件系统,它使用Ceph存储集群在文件系统上存储用户数据。基于Librados提供的分布式文件系统接口。
4)应用层
基于高层接口或者基础库Librados开发出来的各种APP,或者Host、VM等诸多客户端

Ceph中,一切皆对象
Ceph是一个对象式存储系统,它把每一个待管理的数据流(如文件等数据)切分为一到多个固定大小(默认4兆)的对象数据(Object),并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。
1)OSD(Object Storage Daemon,守护进程ceph-osd)
作用:负责存储数据,一般一个磁盘对应一个OSD,负责响应客户端的读写请求
主要功能:存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。
通常至少需要3个OSD来实现冗余和高可用性。
2)PG(Placement Group 归置组)
PG 是一个虚拟的概念而已,物理上不真实存在。
它在数据寻址时类似于数据库中的索引:Ceph 先将每个对象数据通过HASH算法固定映射到一个 PG 中,然后将 PG 通过 CRUSH 算法映射到 OSD。
3)Pool
Pool 是存储对象的逻辑分区,它起到 namespace 的作用。
每个 Pool 包含一定数量(可配置)的 PG。
Pool 可以做故障隔离域,根据不同的用户场景统一进行隔离。
讯享网
#Pool、PG 和 OSD 的关系:
一个Pool里有很多个PG;
一个PG里包含一堆对象,一个对象只能属于一个PG;
PG有主从之分,一个PG分布在不同的OSD上(针对多副本类型)
4)Monitor(守护进程ceph-mon)
作用:保存OSD的元数据,维护展示集群状态的各种图表, 管理集群客户端认证与授权
负责维护集群状态的映射视图(Cluster Map:OSD Map、Monitor Map、PG Map 和 CRUSH Map),维护展示集群状态的各种图表, 管理集群客户端认证与授权。
一个Ceph集群通常至少需要 3 或 5 个(奇数个)Monitor 节点才能实现冗余和高可用性,它们通过 Paxos 协议实现节点间的同步数据。
5)Manager(守护进程ceph-mgr)
作用:负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。
6)MDS(Metadata Server,守护进程ceph-mds)
是 CephFS 服务依赖的元数据服务。
负责保存文件系统的元数据,管理目录结构。
对象存储和块设备存储不需要元数据服务;如果不使用 CephFS 可以不安装。
1)方式一:Filestore
FileStore是在Ceph中存储对象的一个遗留方法。
它依赖于一个标准文件系统(只能是XFS),并结合一个键/值数据库(传统上是LevelDB,现在BlueStore是RocksDB),用于保存和管理元数据。
FileStore经过了良好的测试,在生产中得到了广泛的应用。
然而,由于它的总体设计和对传统文件系统的依赖,使得它在性能上存在许多不足。
2)方式二:Bluestore
BlueStore是一个特殊用途的存储后端,专门为OSD工作负载管理磁盘上的数据而设计。

BlueStore 的设计是基于十年来支持和管理 Filestore 的经验。
BlueStore 相较于 Filestore,具有更好的读写性能和安全性。
1)BlueStore直接管理存储设备,即直接使用原始块设备或分区管理磁盘上的数据。
这样就避免了抽象层的介入(例如本地文件系统,如XFS),因为抽象层会限制性能或增加复杂性。
2)BlueStore使用RocksDB进行元数据管理。
RocksDB的键/值数据库是嵌入式的,以便管理内部元数据,包括将对象名称映射到磁盘上的块位置。
3)写入BlueStore的所有数据和元数据都受一个或多个校验和的保护。
未经验证,不会从磁盘读取或返回给用户任何数据或元数据。
4)支持内联压缩。数据在写入磁盘之前可以选择性地进行压缩。
5)支持多设备元数据分层。
BlueStore允许将其内部日志(WAL预写日志)写入单独的高速设备(如SSD、NVMe或NVDIMM),以提高性能。
如果有大量更快的可用存储,则可以将内部元数据存储在更快的设备上。
6)支持高效的写时复制。
RBD和CephFS快照依赖于在BlueStore中有效实现的即写即复制克隆机制。
这将为常规快照和擦除编码池(依赖克隆实现高效的两阶段提交)带来高效的I/O。

1)首先,将文件切片分成大小为4M的一个或多个数据对象,每个数据对象都对应一个oid
2)其次,通过hash算法对oid计算,得到一个数值,在使用这个数值除以PG总数的取得数据对象得pgid
3)最后,在对数据对象使用CRUSH算法,得到PG对应得OSD得ID,如果有多副本,则是主从得OSD得ID
部署环境:
1、环境准备(五台机器都做)
2、安装常用软件的依赖包(五台机器都做)
讯享网

3、在 admin 管理节点配置 ssh 免密登录所有节点



4、配置时间同步(除了client之外的节点)
讯享网




5、配置 Ceph yum源(所有节点)


6、执行完上面所有的操作之后重启所有主机(可选)
讯享网
7、部署 Ceph 集群(所有服务器)


8、在管理节点为其它节点安装 Ceph 软件包
讯享网

9、给node所有节点另外添加一张网卡,并配置为192.168.100.0网段的IP(node01,node02,node03节点都要配置)


10、生成初始配置(admin节点)
讯享网


11、在管理节点初始化 mon 节点




12、在管理节点查看 Ceph 集群状态
讯享网


13、部署能够管理 Ceph 集群的节点(可选)



14、在每个mon节点上添加三块硬盘,且不要分区,直接使用

15、部署 osd 存储节点(node01,node02,node03)
讯享网

因为,我添加的硬盘属于新盘,所以该步骤不用做
16、添加 osd 节点(admin上操作)
讯享网



17、部署 mgr 节点(admin上操作)



18、开启监控模块(在node01,node02,node03上开启)
讯享网


19、浏览器访问
讯享网


上面我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRUSH 算法映射到不同的 OSD 上;同时 Pool 可以设置副本 size 大小,默认副本数量为 3。
Ceph 客户端向 monitor 请求集群的状态,并向 Pool 中写入数据,数据根据 PGs 的数量,通过 CRUSH 算法将其映射到不同的 OSD 节点上,实现数据的存储。 这里我们可以把 Pool 理解为存储 Object 数据的逻辑单元;当然,当前集群没有资源池,因此需要进行定义。
1、创建一个 Pool 资源池
其名字为 mypool,PGs 数量设置为 64,设置 PGs 的同时还需要设置 PGP(通常PGs和PGP的值是相同的)



2、删除Pool资源池
讯享网









版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/204045.html