Ceph-介绍
Ceph架构简介及使用场景介绍

一、Ceph简介
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
二、Ceph特点
1.高性能
- 采用CRUSH算法,数据分布均衡,并行度高
- 容灾:本地、异地
- 能够支持上千个存储节点的规模,支持TB到PB级的数据
2.高可用
- 副本数可以灵活控制
- 多种故障场景自动进行修复自愈
- 没有单点故障,自动管理
3.高扩展性
随着节点增加,性能线性增长
4.特性丰富
支持三种存储接口:对象存储,块设备存储,文件存储
三、Ceph架构

RADOS:对象存储系统(稳定可靠、分布式存储层、复制、支持差错码EC算法)
LIBRDOS:访问RADOS,提供API接口,分别为:RGW、RBD、CEPH FS
RGW:对象存储接口Swift和S3、如:百度网盘、openstack云平台
RBD:块存储接口,如:物理机、虚拟机
CEPH FS:文件系统接口,如:NFS、SMB
四、Ceph组件

mon:监控整个集群的状态,记录映射表关系,找到文件的存储位置;至少需要3个mon。
osd:用来存放数据,一个硬盘对应一个osd
mds:适用于Cephfs

Ceph的核心组件包括Client客户端、MON监控服务、MDS元数据服务、OSD存储服务,各组件功能如下:
Client客户端:负责存储协议的接入,节点负载均衡。
MON监控服务:负责监控整个集群,维护集群的健康状态,维护展示集群状态的各种图表,如OSD Map、Monitor Map、PG Map和CRUSH Map。
MDS元数据服务:负责保存文件系统的元数据,管理目录结构。
OSD存储服务:主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查等。一般情况下一块硬盘对应一个OSD。
五、Ceph数据的存储过程
Ceph采用crush算法,在大规模集群下,实现数据的快速、准确存放,同时能够在硬件故障或扩展硬件设备时,做到尽可能小的数据迁移,其原理如下:
1.当用户要将数据存储到Ceph集群时,数据先被分割成多个object,(每个object一个object id,大小可设置,默认是4MB),object是Ceph存储的最小存储单元。
2.由于object的数量很多,为了有效减少了Object到OSD的索引表、降低元数据的复杂度,使得写入和读取更加灵活,引入了pg(Placement Group ):PG用来管理object,每个object通过Hash,映射到某个pg中,一个pg可以包含多个object。
3.Pg再通过CRUSH计算,映射到osd中。如果是三副本的,则每个pg都会映射到三个osd,保证了数据的冗余。


- 首先文件被切片分为多个Objects并以oid标记,通过hash算法和mask掩码得到PGid
- 引入PG逻辑概念(为了防止oid存储时混乱不好搜索,可以理解为文件夹),并用crush算法生成pgid,通过副本的机制把oid均匀分布给OSD中存储。
- 副本数至少2-3个

pg_num计算值为:
注意:
最终pg_num的计算结果取接近计算值的2次幂,以提高CRUSH算法效率,减少CPU、内存的消耗。例如:计算值为200时,取256作为结果。pgp_num的值应设置为与pg_num一致。
参数解释:
Target PGs per OSD:预估每个OSD的PG数,一般取100计算。当预估以后集群OSD数不会增加时,取100计算;当预估以后集群OSD数会增加一倍时,取200计算。
OSD :集群OSD数量。
%Data:预估该pool占该OSD集群总容量的近似百分比。
Size:该pool的副本数。
| OSD数目 | 1-5 | 5-10 | 10-50 | >50 |
|---|---|---|---|---|
| PG数目 | 建议128 | 建议512 | 建议4096 | 使用Pgcalc工具 |
创建pool时需要确定其PG的数目,在pool被创建后也可以调整该数字,PG值有以下影响因素:
数据的持久性:假如pool的size为 3,表明每个PG会将数据存放在3个OSD上。当一个OSD down了后,一定间隔后将开始recovery过程,recovery和需要被恢复的数据的数量有关系,如果该 OSD 上的 PG 过多,则花的时间将越长,风险将越大。
在recovery结束前有部分PG的数据将只有两个副本,如果此时再有一个OSD down了,那么将有一部分PG的数据只有一个副本。recovery 过程继续,如果再出现第三个OSD down了,那么可能会出现部分数据丢失。
可见,每个OSD上的PG数目不宜过大,否则会降低数据的持久性。这也就要求在添加OSD后,PG的数目在需要的时候也需要相应增加。
数据的均匀分布性:CRUSH算法会伪随机地保证PG被选中来存放客户端的数据,它还会尽可能地保证所有的PG均匀分布在所有的OSD上。
比方说,有10个OSD,但是只有一个size为3的pool,它只有一个PG,那么10个 OSD 中将只有三个OSD被用到。但是CURSH算法在计算的时候不会考虑到OSD上已有数据的大小。
比方说,100万个4K对象共4G均匀地分布在10个OSD上的1000个PG内,那么每个OSD上大概有400M 数据。再加进来一个400M的对象,那么有三块OSD上将有400M + 400M = 800M的数据,而其它七块OSD上只有400M数据。
资源消耗:PG作为一个逻辑实体,它需要消耗一定的资源,包括内存、CPU和带宽。太多PG的话,则占用资源会过多。
清理时间:Ceph的清理工作是以PG为单位进行的。如果一个PG内的数据太多,则其清理时间会很长。
Ceph-介绍的更多相关文章
- Ceph介绍
1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...
- 分布式存储ceph介绍(1)
一.Ceph简介: Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司的云环 ...
- Ceph介绍及原理架构分享
https://www.jianshu.com/p/cc3ece850433 1. Ceph架构简介及使用场景介绍 1.1 Ceph简介 Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能. ...
- ceph介绍和安装
目录 1.Ceph简介 2.Ceph的特点 3.Ceph的缺点 4.架构与组件 4.1.组件介绍 4.2.存储过程 5.部署 5.1 设置主机名.配置时间同步 5.2 配置添加清华源 5.3 初始化c ...
- 分布式文件系统ceph介绍
ceph哲学思想 1. 每个组件必须支持扩展 2.不存在单点故障 3.解决方案必须是基于软件的.开源的.适应能力强 4.任何可能的一切必须自我管理 存在的意义:帮助企业摆脱昂贵的专属硬件 ceph目标 ...
- Ceph 介绍及原理架构
- Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题
本文由 Ceph 中国社区 -QiYu 翻译 英文出处:Using Ceph with MySQL 欢迎加入CCTG Over the last year, the Ceph world drew m ...
- 海量小文件存储与Ceph实践
海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...
- Ubuntu CEPH快速安装
一.CEPH简介 不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Cep ...
- ceph架构简介
ceph架构简介 在测试OpenStack的后端存储时,看到了ceph作为后端存储时的各种优势 ,于是查询资料,总结了这篇ceph架构的博客,介绍了ceph的架构和ceph的核心组件.ceph整体十分 ...
随机推荐
- 【重学C++】02 脱离指针陷阱:深入浅出 C++ 智能指针
文章首发 [重学C++]02 脱离指针陷阱:深入浅出 C++ 智能指针 前言 大家好,今天是[重学C++]系列的第二讲,我们来聊聊C++的智能指针. 为什么需要智能指针 在上一讲<01 C++如 ...
- 使用android studio发布android与flutter混合开发项目
一.生成androd签名证书 Android studio的Build > Grenerate Signed Bundle 选择apk 点击Create New 录入对应的签名信息:点击确定 对 ...
- Windows 10 v2022-L.1345 神州网信政府版
Windows 10 v2022-L.1345 神州网信政府版 Windows 10 神州网信政府版(以下简称CMGE)V2022-L是在 Windows 10 21H2的基础上,根据中国有关法律.法 ...
- 为什么 HashMap 会死循环?
HashMap 死循环发生在 JDK 1.8 之前的版本中,它是指在并发环境下,因为多个线程同时进行 put 操作,导致链表形成环形数据结构,一旦形成环形数据结构,在 get(key) 的时候就会产生 ...
- C++别名的使用
c++中的别名使用,类似引用,在别名中,"&"的意思不再是取地址,而是建立一个指针,直接指向数据.这是一个小例子: #include <iostream> us ...
- 【实战分享】使用 Go 重构流式日志网关
项目背景 分享之前,先来简单介绍下该项目在流式日志处理链路中所处的位置. 流式日志网关的主要功能是提供 HTTP 接口,接收 CDN 边缘节点上报的各类日志(访问日志/报错日志/计费日志等),将日志作 ...
- LeetCode 周赛 350(2023/06/18)01 背包变型题
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 往期回顾:LeetCode 单周赛第 348 场 · 数位 DP ...
- C# 实现 Linux 视频聊天、远程桌面(源码,支持信创国产化环境,银河麒麟,统信UOS)
园子里的有朋友在下载并了解了<C# 实现 Linux 视频会议(源码,支持信创环境,银河麒麟,统信UOS)>中提供的源码后,留言给我说,这个视频会议有点复杂了,代码比较多,看得有些费劲.问 ...
- Taurus .Net Core 微服务开源框架:Admin 插件【3】 - 指标统计管理
前言: 继上篇:Taurus .Net Core 微服务开源框架:Admin 插件[2] - 系统环境信息管理 本篇继续介绍下一个内容: 1.系统指标节点:Metric - API 界面 界面图如下: ...
- 使用部分写时复制提升Lakehouse的 ACID Upserts性能
使用部分写时复制提升Lakehouse的 ACID Upserts性能 译自:Fast Copy-On-Write within Apache Parquet for Data Lakehouse A ...