随着分布式存储的广泛应用,目前对PG的关注越来越多,本文基于ONStor分布式存储系统简要介绍一下PG的状态变化,重点说明OSD对PG状态的影响。
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
副本数可以灵活控制。
支持故障域分隔,数据强一致性。
多种故障场景自动进行修复自愈。
没有单点故障,自动管理。
去中心化。
扩展灵活。
随着节点增加而线性增长。
支持三种存储接口:块存储、文件存储、对象存储。
支持自定义接口,支持多种语言驱动。
ceph摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,一切皆CRUSH,数据分布均衡,并行度高。 并考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。能够支持上千个存储节点的规模,支持TB到PB级的数据。
Ceph的最底层是RADOS(分布式对象存储系统),它具有可靠、智能、分布式等特性,实现高可靠、高可拓展、高性能、高自动化等功能,并最终存储用户数据。RADOS系统主要由两部分组成,分别是OSD和Monitor。
RADOS之上是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。
基于LIBRADOS层开发的有三种接口,分别是RADOSGW、librbd和MDS。
RADOSGW是一套基于当前流行的RESTFUL协议的网关,支持对象存储,兼容S3和Swift。librbd提供分布式的块存储设备接口,支持块存储。
MDS提供兼容POSIX的文件系统,支持文件存储。
数据首先获得节点的动态ip,之后通过块或者文件或者对象协议传输文件到节点上,在这里数据将被分为4M大小的对象并获取对象ID,将对象ID进行hash算法计算,得到的结果对pg个数取余,将对象分配至该取值的pg,接着,不同的pg通过crush算法被分配至不同的OSD。完成数据到磁盘的映射关系的建立及写入。
PG全称Placement Groups,中文译为放置组,是用于放置object的一个载体,pg的创建是在创建ceph存储池的时候指定的,同时跟指定的副本数也有关系,比如是3副本的则会有3个相同的pg存在于3个不同的osd上,pg其实在osd的存在形式就是一个目录,在架构层次上,PG位于RADOS层的中间。引入PG这一层其实是为了更好的分配数据和定位数据。
在架构层次上,PG位于RADOS层的中间。
a. 往上负责接收和处理来自客户端的请求。
b. 往下负责将这些数据请求翻译为能够被本地对象存储所能理解的事务。
PG是组成存储池的基本单位,存储池中的很多特性,都是直接依托于PG实现的。ceph面向容灾域的备份策略使得一般而言的PG需要执行跨节点的分布式写,因此数据在不同节点之间的同步、恢复时的数据修复也都是依赖PG完成。
PG外部状态的变化最终通过其内部状态机进行驱动,这些状态机为一种基于事件驱动的有线状态机。当集群发生变化时,如:OSD加入或者删除、OSD 宕掉或者恢复、存储池的创建等都会引起PG状态机的变化状态机 在不同状态之间的跳转和执行处理实现我们所希望实现的功能。
该状态机现有状态如下图所示:
由图可知,该状态机一共有四级状态,每一种状态又可以包含若干子状态,所有子状态中第一个状态为其默认状态,如:该状态机初始化时,默认会进入Initial子状态;又比如当该状态机从其他状态,如Reset状态,跳转至Start ed状态时,默认会进入S tarted/Start子状态等等。
Creating:PG正在被创建。
Peering:持有同一个PG的OSD之间互相比较数据的过程,
peering过程中,PG不可读写。
Active:PG中的数据可以被读写,对该PG的操作请求都将会被处理。
Clean:PG中的所有对象都已经被复制了规定的副本数量。
Scrubbing:PG在做不一致性校验。
Degraded:PG中部分对象的副本数量未达到规定的数量。
Undersized:PG当前Acting Set小于存储池副本数
Recovering:PG正在迁移或者同步对象及其副本。
Back Filling:新OSD加入集群后,集群原有的一部分PG进行迁移或进行全量同步。
Down:PG处于失效离线状态,无法提供读写。
Inconsistent:PG副本出现不一致。
Unfound:某个object已经不存在于任何活动的OSD上了。
|
down |
down恢复 |
out |
out恢复 |
PG状态 |
active+clean—— active+degraded+undersized |
active+recovering+degrade——active+clean |
active+clean ——active+recovering+degrade——active+clean |
active+clean ——active+recovering+degrade/active+remapped+backfilling——active+clean |
副本数 |
2 |
3 |
3 |
3 |
PG平衡 |
不触发 |
触发 |
触发 |
触发 |
集群健康度 |
不健康 |
100% |
100% |
100% |
映射关系 |
不增新osd |
恢复 |
增加新osd |
恢复 |