Part1Ceph 存储架构
Ceph 集群搭建使用标准硬件和存储设备的服务器,是一个高度可扩展的分布式存储系统, 采用模块化分布式架构
。Ceph 主要通过 RADOS
核心组件来提供能力。
RADOS 是 Ceph 的底层对象存储服务,由 OSD 守护进程组成,而 Ceph 集群中的其他组件如 MON、MDS 和 RGW 等也都是守护进程,各自扮演着不同的角色和功能。OSD 进程是 Ceph 存储集群中的核心组件之一,负责将数据分散存储在多个节点和磁盘上,并提供高可用性、容错性和可靠性等特性。
RADOS(Reliable Autonomic Distributed Object Store) :可靠的自主分布式对象存储,RADOS 是一种 自我修复、自我管理
的软件型对象存储, Ceph
也同时支持块存储,和文件存储,这里实际上是在对象存储的基础上封装了一层,提供块存储和文件存储的能力。
2Ceph 存储核心组件
Ceph集群的核心组件主要包括:
- MON (Monitor Daemon) :
集群监控
, 守护进程,MON 负责监控 Ceph 集群的状态、配置和拓扑结构,并将这些信息保存在 Ceph Monitor 数据库(Store)中。Ceph 集群至少需要三个 MON 进程来保证高可用性。在集群中可以配置不同的选举方式。 - OSD (Object Storage Daemon):
对象存储设备
,守护进程,存储数据并处理数据复制、恢复和重新平衡
, - MGR (Managers,ceph-mgr):
管理器(非必须)
,守护进程,通过基于浏览器的仪表板和 REST API,跟踪运行时指标并公开集群信息 - MDS (Metadata Servers):
元数据服务器
,守护进程,存储供 CephFS 使用的元数据(而非对象存储或块存储),让客户端能够高效执行 POSIX 命令。CephFS是基于RADOS
实现的分布式文件系统,可提供与传统文件系统类似的功能。 - RGW(RADOS Gateway) :
RADOS 网关
,守护进程,RGW 是一个 REST 接口,使得客户端可以通过 HTTP 或 S3 协议来访问 Ceph 存储集群中的对象。RGW 可以将 Ceph 集群中的对象作为 Web 资源来公开,从而实现与 Amazon S3 兼容的对象存储服务。 - RBD(RADOS Block Device):Ceph 块设备,将 Ceph 存储集群的对象存储能力暴露为块设备,支持虚拟机和容器等应用的块存储需求。
部分组件以守护进程的方式运行,可以以副本形式扩展,以满足部署的存储集群的要求。
Ceph 监控器 MON
Ceph 监控器 (MON) 是维护集群映射主要副本的守护进程
,是用于监控和管理集群状态、拓扑结构和配置信息的组件之一。MON 组件通常由多个进程组成,以提高可用性和容错性。
集群映射(Cluster Map)
是指将 Ceph 集群中的各个组件(如 OSD、MON、MDS、RGW 等)映射
到实际的网络地址和端口号
的过程。Ceph 集群映射由五种不同的映射组成的集合,包括:OSD 映射集合
/MON 映射集合
/MDS 映射集合
/RGW 映射集合
/CRUSH 映射集合
/
这五种映射集合共同构成了 Ceph
集群映射,用于实现各个组件之间的通信和协作,并支持数据的高可用性、可靠性和性能。
通过集群映射,客户端和其他组件可以找到并连接正确的 OSD、MON、MDS、RGW 进程,并使用 CRUSH 算法来计算数据位置和副本策略
。
我理解,所谓集群映射,就是一个配置中心,用于维护各个组件映射K和具体配置。
Ceph 生产至少需要三台机器
,根据官方的 Ceph 文档,建议在 Ceph 集群中至少
使用三台机器以确保数据冗余和可用性。但是,可以使用少于三台机器运行 Ceph 集群,但不建议
在生产环境中这样做。
在后端组件的基础上多了 CRUSH映射
, Ceph 必须处理每个集群事件
,更新合适的映射,并将更新后的映射复制到每个监控器守护进程,若要应用更新
,MON 必须就集群状态 建立共识
。
这要求配置的监控器中有多数可用且就映射更新达成共识
,为 Ceph 集群配置奇数个监控器
,以确保监控器能在就集群状态投票时建立仲裁
,配置的监控器中必须有 超过半数正常发挥作用
,Ceph 存储集群才能运行并可访问
,这是保护集群数据的完整性所必需
的。
在 Ceph
集群运行期间,MON 进程需要相互通信并就下列事项达成共识
:
集群状态
:每个 MON 进程都要了解 Ceph 集群的当前状态,如 OSD 的在线状态、PG 的映射关系、数据副本的位置等等。健康状况
:每个 MON 进程需要收集和汇总所有 OSD 和 PG 的健康报告,并根据报告指示的问题推断出整个集群的健康状况。拓扑结构
:每个 MON 进程需要知道 Ceph 集群的拓扑结构,并为客户端请求和数据复制提供正确的路由和路径。配置信息
:每个 MON 进程需要了解集群的配置信息,如 MON 和 OSD 的数量、PG 的数量和策略、CRUSH 映射规则等等。
因此,MON 必须就集群状态建立共识,才能保证整个 Ceph
集群的正确运行和数据的可靠存储。如果 MON 无法建立共识
,那么可能会导致数据丢失、访问失败、性能下降等问题。
Ceph 对象存储设备 OSD
Ceph 对象存储设备 (OSD)
是 Ceph 存储集群的构建块
,OSD 将存储设备(如硬盘或其他块设备)连接到 Ceph 存储集群
。
一台存储服务器可以运行多个 OSD 守护进程
,并为集群提供多个 OSD
,Ceph 旧版本要求 OSD
存储设备具有底层文件系统,但 BlueStore
以原始模式使用本地存储设备,不在需要文件系统,这有助于提升性能
Ceph
客户端和 OSD 守护进程都使用 可扩展哈希下的受控复制 (CRUSH, Controlled Replication Under Scalable Hashing)
算法来高效地计算对象位置的信息,而不依赖中央服务器查找
在高层次上,CRUSH
算法通过使用分层树结构
将数据对象映射到存储设备上。树是基于存储设备的物理拓扑结构构建的,树中的每个节点表示一组设备(放置组PG
)。然后,算法使用确定性函数将每个数据对象映射到树中的叶节点,该叶节点对应于特定的存储设备。
CRUSH 算法的一个关键优点是它被设计为高度容错
。由于算法是确定性的,即使某些设备失败,也可以重构数据对象到存储设备的映射。这使得即使在硬件故障的情况下,也可以保持数据可用性
CRUSH (keruasi) 将每个对象分配给单个哈希存储桶
,称为放置组 (PG)
,也就是上面我们讲的树的节点。
PG
是对象(应用层)和 OSD(物理层)之间的抽象层,CRUSH 使用伪随机放置算法在 PG 之间分布对象,并且使用规则来确定 PG 到 OSD 的映射。
出现故障
时,Ceph 将 PG 重新映射到不同的物理设备 (OSD) ,并同步
其内容以匹配配置的数据保护规则,一个 OSD 是对象放置组的主要 OSD
,Ceph 客户端在读取或写入数据时始终联系操作集合中的主要 OSD
,其他 OSD 为次要 OSD
,在确保集群故障时的数据弹性方面发挥重要作用
Primary OSD 的功能:
- 服务所有 I/O 请求
- 复制和保护数据
- 检查数据的一致性
- 重新平衡数据
- 恢复数据
次要 OSD 的功能(备份):
- 行动始终受到 Primary OSD 的控制
- 能够变为 Primary OSD
每个 OSD 具有自己的 OSD ⽇志。OSD 日志提供了对 OSD 实施写操作的性能。
来自 Ceph 客户端
的写操作本质上通常是随机的 I/O
,由 OSD 守护进程
顺序写入到日志中。当涉及的所有 OSD 日志记录
了写请求后,Ceph 将每个写操作确认
到客户端,OSD 然后将操作提交
到其后备存储
。
每隔几秒钟,OSD
会停止向日志写入新的请求,以将 OSD日志的内容应用到后备存储
,然后,它会修剪日志中的已提交请求,回收日志存储设备上的空间
当 Ceph OSD
或其存储服务器出现故障时,Ceph 会在 OSD 重新启动后重演其日志
,重演序列在最后一个已同步
的操作后开始,因为 Ceph 已将同步的日志记录提交到 OSD 的存储,OSD日志使用OSD 节点上的原始卷,若有可能,应在单独的SSD等快速设备上配置日志存储
要查看 Ceph 集群的 OSD(Object Storage Daemon)服务信息,可以使用 Ceph 自带的命令行工具 ceph 命令。以下是一些常用的命令:
ceph osd tree
:显示 OSD 树,即显示每个 OSD 的编号、主机名、状态、容量等信息,以及 CRUSH 算法对存储设备的映射关系。ceph osd df
:显示 OSD 的使用情况,包括总容量、已用空间、可用空间等信息。ceph osd pool ls
:列出所有的 OSD 数据存储池,包括数据存储池名称、ID 等信息。ceph osd pool stats
:显示 OSD 数据存储池的使用情况,包括存储池大小、已用空间、剩余空间等。ceph tell osd.* bench
:对 OSD 进行性能测试,以便评估 OSD 的性能和稳定性。ceph tell osd.* query
:查询所有 OSD 进程的状态和性能数据,包括 IOPS、延迟等指标。
RADOS 网关 RGW
RADOS Gateway( RGW) 提供了 S3 和 Swift 接口兼容的对象存储服务,可以将 Ceph 存储集群暴露为云存储服务。RADOS Gateway 的作用如下:
- 对象存储:RADOS Gateway 提供了基于 S3 和 Swift 接口兼容的对象存储服务,支持大规模、高并发的数据访问和管理。用户可以使用标准的 S3 或 Swift 客户端库进行对象存储。
- 数据访问控制:RADOS Gateway 支持多种认证和授权方式,可以对不同的用户或应用程序进行权限控制,保障数据的安全性和隐私性。
- 数据可靠性:RADOS Gateway 使用 RADOS 集群作为底层存储设备,具有高可靠性和高可用性,可以保障数据的持久性和可靠性。
- 多租户支持:RADOS Gateway 支持多租户功能,可以将一个 RGW 集群划分为多个租户,每个租户拥有自己的存储空间和访问权限,可以避免资源的冲突和干扰。
- 弹性伸缩:RADOS Gateway 可以根据需求进行水平扩展和缩减,支持动态调整存储容量和性能,具有高度的弹性和灵活性。
要查看 Ceph 集群的 RGW(RADOS Gateway)服务信息,可以使用 Ceph 自带的命令行工具 radosgw-admin 命令。以下是一些常用的命令:
radosgw-admin user list
:列出所有的 RGW 用户,包括用户 ID、显示名称等信息。radosgw-admin bucket list
:列出所有的 RGW 存储桶,包括存储桶名称、拥有者等信息。radosgw-admin quota get --uid=<user-id>
:显示指定用户的配额信息,包括存储空间配额、对象数配额等。radosgw-admin policy list
:列出所有的 RGW 策略,包括策略名称、权限等信息。radosgw-admin usage show
:显示集群的 RGW 使用情况,包括总请求数、总流量等信息。radosgw-admin metadata list
:列出集群中所有的 RGW 元数据,包括实体 ID、实体类型、元数据键值对等信息。
Ceph 管理器 MGR
Ceph 管理器 (MGR)
提供一系列集群统计数据,集群中不可用的管理器不会给 客户端 I/O
操作带来负面影响。在这种情况下,尝试查询集群统计数据会失败,可以在不同的故障域中部署至少两个 Ceph 管理器提升可用性
管理器守护进程将集群中收集的所有数据的访问集中到一处,并通过 TCP 端⼝ 7000
(默认)向存储管理员提供一个简单的 Web 仪表板。
它还可以将状态信息导出到外部 Zabbix
服务器,将性能信息导出到 Prometheus
。Ceph 指标是一种基于 collectd
和 grafana
的监控解决方案,可补充默认的仪表板
查看 Ceph 集群的 MGR(Manager)服务信息,可以使用 Ceph 自带的命令行工具 ceph 命令。以下是一些常用的命令:
ceph mgr module ls
:列出所有加载的 MGR 模块,包括模块名称、状态等信息。ceph mgr module enable <module-name>
:启用指定的 MGR 模块,以便进行管理和监控。ceph mgr services
:显示所有的 MGR 服务,包括进程 ID、名称、状态等信息。ceph daemon <mgr-id> perf dump
:显示指定 MGR 进程的性能监控信息,包括 CPU 使用率、内存使用情况等。
元数据服务器 MDS
Ceph 元数据服务器(MDS)管理 Ceph 文件系统(CephFS)元数据
。
它提供兼容 POSIX 的共享文件系统元数据管理,包括所有权、时间戳和模式。MDS 使用 RADOS 而非本地存储来存储其元数据,它无法访问文件内容
MDS 可让 CephFS 与 Ceph 对象存储交互
,将索引节点映射到对象,并在树内映射 Ceph 存储数据的位置,访问 CephFS 文件系统的客户端首先向 MDS
发出请求,这会提供必要的信息以便从正确的 OSD 获取文件内容
查看 Ceph 集群的 MDS(Metadata Server)服务信息
ceph mds dump
:显示所有的 MDS 进程的信息,包括 MDS 的 ID、名称、状态等。ceph fs ls
:列出所有的 CephFS 文件系统,包括文件系统 ID、名称等信息。ceph fs status
:显示 CephFS 文件系统的状态和健康状况,包括 MDS 的运行状态、文件系统的元数据池使用情况等信息。ceph fs subvolumegroup ls
:列出指定 CephFS 文件系统中的子卷组,包括子卷组 ID、名称、使用情况等信息。
Ceph 块设备 RBD
RBD 全称为 RADOS Block Device
,它将 Ceph 存储集群的对象存储能力暴露为块设备,支持虚拟机和容器等应用的块存储需求。RBD 的作用如下:
- 块存储:RBD 提供了块存储服务,支持虚拟机和容器等应用使用块设备进行数据存储和访问。
- 快照和克隆:RBD 支持块设备的快照和克隆功能,可以对块设备进行备份和恢复,以及基于现有块设备创建新的块设备。
- 多租户支持:RBD 支持多租户功能,可以将一个 RBD 集群划分为多个租户,每个租户拥有自己的块设备空间和访问权限,可以避免资源的冲突和干扰。
- 弹性伸缩:RBD 可以根据需求进行水平扩展和缩减,支持动态调整存储容量和性能,具有高度的弹性和灵活性。
要查看 Ceph 中 RBD 的服务信息,可以使用以下命令:
rbd ls
:显示所有的 RBD 块设备,包括块设备名称、大小等信息。rbd info <image>
:显示指定 RBD 块设备的信息,包括块设备 ID、大小、快照数等信息。rbd snap ls <image>
:列出指定 RBD 块设备的所有快照,包括快照名称、创建时间等信息。rbd du
:显示 RBD 块设备的使用情况,包括总使用容量、总可用容量等信息。rbd map <image>
:将指定的 RBD 块设备映射为本地块设备,以便进行数据读写操作。
集群映射
Ceph 客户端和对象存储守护进程 OSD
需要确认集群拓扑
。五个映射表示集群拓扑
,统称为集群映射
。
Ceph 监控器(Mon)守护进程维护集群映射的主副本。Ceph MON 集群在监控器守护进程出现故障时确保高可用性
监控器映射
包含集群 fsid、各个监控器的位置、名称、地址和端口,以及映射时间戳。
使用 ceph mon dump 来查看监控器映射。fsid 是一种自动生成的唯⼀标识符 (UUID),用于标识 Ceph 集群
代码语言:javascript复制[ceph: root@serverc /]# ceph mon dump
epoch 5
fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
last_changed 2023-04-11T13:34:50.058049 0000
created 2023-04-11T13:03:51.482001 0000
min_mon_release 16 (pacific)
election_strategy: 1
0: [v2:172.25.250.12:3300/0,v1:172.25.250.12:6789/0] mon.serverc.lab.example.com
1: [v2:172.25.250.13:3300/0,v1:172.25.250.13:6789/0] mon.serverd
2: [v2:172.25.250.14:3300/0,v1:172.25.250.14:6789/0] mon.servere
dumped monmap epoch 5
[ceph: root@serverc /]#
- epoch:监视器映射的时代编号。
- fsid:Ceph集群的唯一标识符。
- last_changed:修改监视器映射的时间。
- created:创建监视器映射的时间。
- min_mon_release:与监视器映射兼容的最小Ceph版本。
- election_strategy:监视器用于选举领导者的策略。Ceph监视器的选举策略有两种:
- classic:这是默认的选举策略,在此策略下,监视器具有相同的投票权,并根据周期性心跳和消息传递进行通信。如果监视器检测到其他监视器离线,则它们将在一段时间后进入新的领导者选举过程。
- quorum:该策略要求至少三个监视器在线,并从中选择领导者,而不是所有在线监视器都拥有相同的投票权。采用此策略时,如果没有足够的监视器参与选举,则集群将无法正常工作或处于只读状态,直到更多的监视器加入并恢复其大多数选举能力。
- 0、1、2:集群中每个监视器的排名和IP地址,以及它们的主机名。
- dumped:表示已成功转储指定时代的监视器映射。
OSD 映射
包含集群 fsid、池列表、副本大小、放置组编号、OSD 及其状态的列表,以及映射时间戳。使用 ceph osd dump 查看 OSD 映射
代码语言:javascript复制[ceph: root@serverc /]# ceph osd dump
epoch 77
fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
created 2023-04-11T13:03:54.016381 0000
modified 2023-04-25T07:46:25.481881 0000
flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit
crush_version 24
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client luminous
min_compat_client jewel
require_osd_release pacific
stretch_mode_enabled false
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 74 flags hashpspool stripe_width 0 pg_num_min 1 application mgr_devicehealth
max_osd 9
osd.0 up in weight 1 up_from 71 up_thru 0 down_at 70 last_clean_interval [50,65) [v2:172.25.250.12:6800/2046452011,v1:172.25.250.12:6801/2046452011] [v2:172.25.250.12:6802/2046452011,v1:172.25.250.12:6803/2046452011] exists,up 82c98821-3c02-468a-8e2f-7c5dfc2a0fbe
osd.1 up in weight 1 up_from 68 up_thru 23 down_at 67 last_clean_interval [50,65) [v2:172.25.250.12:6808/260025682,v1:172.25.250.12:6809/260025682] [v2:172.25.250.12:6810/260025682,v1:172.25.250.12:6811/260025682] exists,up 1ca3352b-4c2d-4a85-86cc-33d1715c1915
.......
blocklist 172.25.250.12:0/1295757381 expires 2023-04-26T07:42:28.540520 0000
blocklist 172.25.250.12:6825/3489966617 expires 2023-04-26T07:42:28.540520 0000
blocklist 172.25.250.12:6824/3489966617 expires 2023-04-26T07:42:28.540520 0000
epoch
:OSD映射的时代编号。fsid
:Ceph集群的唯一标识符。created
:创建OSD映射的时间。modified
:修改OSD映射的时间。flags
:包含有关OSD
映射状态的标志位,这些标志位都是用来控制Ceph
集群中OSD
的行为和状态,以便最大程度地提高性能和可靠性。如sortbitwise
、recovery_deletes
、purged_snapdirs
和pglog_hardlimit
等。sortbitwise
:开启了每个对象单独排序,这可以优化存储分配和数据分布。recovery_deletes
:在恢复过程中删除陈旧的对象,以避免占用空间和影响性能。purged_snapdirs
:快照目录已从PG日志中删除,以节省空间并提高性能。pglog_hardlimit
:PG日志达到硬限制时强制转储日志,以保持一致性并避免性能问题。
crush_version
:CRUSH
映射版本号。full_ratio
:当 OSD 的使用量达到该值时,将触发警告(如果开启了警告)并阻止新数据写入 OSD。默认值为 0.95。
full_ratio、backfillfull_ratio 和 nearfull_ratio
:用于控制OSD空间利用率的比率。backfillfull_ratio
:当 OSD 在后期重新填充时,其使用量达到该值时,将阻止进一步的后期重新填充操作。默认值为 0.9。nearfull_ratio
:当 OSD 的使用量达到该值时,将向 Ceph 发送慢操作警告。默认值为 0.85。
require_min_compat_client、min_compat_client 和 require_osd_release
:最低客户端和OSD版本限制。stretch_mode_enabled
:是否启用了伸缩模式。该模式允许将数据复制到远程位置,以实现跨区域灾难恢复和数据备份
。pool
:Ceph 存储池的相关信息,例如 size、min_size、pg_num、pgp_num 等等。pool 1
:这是存储池的编号,Ceph 存储集群中的每个存储池都有一个唯一的编号。device_health_metrics
:这是存储池的名称,通常用于描述存储池中存储的对象类型或数据用途。replicated
:这是存储池的副本模式,表示该存储池中的数据将被复制到多个 OSD 上以实现高可用性和冗余。size 3 和 min_size 2
:这些是存储池的副本大小设置。size 3 表示每个对象将被复制到 3 个不同的 OSD 上,而 min_size 2 表示在执行写入操作时至少要在 2 个 OSD 上成功复制数据才会视为写入成功。crush_rule 0
:这是使用的 CRUSH 规则的编号,CRUSH 是 Ceph 集群用于计算数据位置的分布式算法,该规则规定了如何将数据分散到存储设备上。object_hash rjenkins
:这是用于确定对象位置的哈希函数。在这种情况下,rjenkins 是一种快速哈希函数,能够快速生成对象位置。pg_num 1 和 pgp_num 1
:这些是该存储池中的 PG 数量和 PGP 数量。PG 是 Ceph 存储池中数据的基本组织单元,它们将对象分配到 OSD 上以实现负载均衡。autoscale_mode on
:这是存储池的自动扩展设置,表示在存储池满时是否自动扩展存储池大小。此处设置为“开启”。last_change 74
:这是最后修改存储池配置的时间戳,通常用于跟踪存储池配置更改历史记录。flags hashpspool stripe_width 0 pg_num_min 1
:这些是其他存储池标志,如使用哈希池(hashpspool)、条带宽度(stripe_width)和最小 PG 数量(pg_num_min)等。application mgr_devicehealth
:这是存储池的应用程序类型,表示该存储池用于存储设备健康度信息的管理数据。
max_osd
:OSD的最大数量。osd.X
:每个OSD的详细信息,包括其状态、权重、IP地址、端口、在PG中的位置等等。blocklist
:列出被阻止或禁止使用的IP地址列表。
放置组 (PG) 映射
包含 PG 版本、全满比率、每个放置组的详细信息,例如 PG ID、就绪集合、操作集合、PG 状态、每个池的数据使用量统计、以及映射时间戳。使用ceph pg dump查看包含的 PG 映射统计数据
代码语言:javascript复制PG_STAT OBJECTS MISSING_ON_PRIMARY DEGRADED MISPLACED UNFOUND BYTES OMAP_BYTES* OMAP_KEYS* LOG DISK_LOG STATE STATE_STAMP VERSION REPORTED UP UP_PRIMARY ACTING ACTING_PRIMARY LAST_SCRUB SCRUB_STAMP LAST_DEEP_SCRUB DEEP_SCRUB_STAMP SNAPTRIMQ_LEN
4.19 0 0 0 0 0 0 0 0 0 0 active clean 2023-04-30T05:50:02.431578 0000 0'0 108:12 [7,2,5] 7 [7,2,5] 7 0'0 2023-04-30T05:50:01.330091 0000 0'0 2023-04-30T05:50:01.330091 0000 0
2.1f 0 0 0 0 0 0 0 0 0 0 active clean 2023-04-30T05:49:47.320452 0000 0'0 108:17 [0,3,8] 0 [0,3,8] 0 0'0 2023-04-30T05:49:46.202749 0000 0'0 2023-04-30T05:49:46.202749 0000 0
3.1e 0 0 0 0 0 0 0 0 0 0 active clean 2023-04-30T05:49:49.349973 0000 0'0 108:15 [2,6,3] 2 [2,6,3] 2 0'0 2023-04-30T05:49:48.270032 0000 0'0 2023-04-30T05:49:48.270032 0000 0
4.18 0 0 0 0 0 0 0 0 0 0 active clean 2023-04-30T05:50:02.449439 0000 0'0 108:12 [3,1,6] 3 [3,1,6] 3 0'0 2023-04-30T05:50:01.330091 0000 0'0 2023-04-30T05:50:01.330091 0000 0
- PG_STAT: PG 的状态,表示 PG 在当前时间点内的活动情况和健康状况。PG_STAT 数字由两部分组成,第一部分是十六进制的 OSD 编号,第二部分是十六进制的 epoch 号。
- OBJECTS: PG 中对象数量。
- MISSING_ON_PRIMARY: 在 primary OSD 上缺少的对象数量。
- DEGRADED: 在副本 OSD 上损坏或不可用的对象数量。
- MISPLACED: 在非预期 OSD 上的对象数量。
- UNFOUND: 未找到的对象数量。
- BYTES: PG 中对象的总字节数。
- OMAP_BYTES: PG 中对象元数据的总字节数。
- OMAP_KEYS: PG 中对象元数据键值对的总数。
- LOG: 最近操作日志的序列号范围。
- DISK_LOG: 存储在磁盘上的日志序列号范围。
- STATE: PG 的状态,例如“active clean”。
- STATE_STAMP: PG 最后转换到当前状态的时间戳。
- VERSION: PG 的版本。
- REPORTED: 汇报 PG 状态的 OSD 的编号。
- UP: 处于活动状态的 OSD 编号列表。
- UP_PRIMARY: 作为主 OSD 进行同步的 OSD 编号。
- ACTING: 负责读写请求的 OSD 编号列表。
- ACTING_PRIMARY: 正在执行同步操作的 OSD 编号。
- LAST_SCRUB: 上次 scrub 的时间戳和结果。
- SCRUB_STAMP: 上次 scrub 的结束时间戳。
- LAST_DEEP_SCRUB: 上次 deep scrub 的时间戳和结果。
- SNAPTRIMQ_LEN: PgSnapTrimq 中等待处理的数量。
- DEEP_SCRUB_STAMP: 上次 deep scrub 的结束时间戳。
CRUSH 映射
包含存储设备的列表、故障域层次结构(例如设备、主机、机架、行、机房),以及存储数据时层次结构的规则,Crush Map 是 Ceph 存储集群的关键组件之一,用于定义数据如何分布到存储设备(如 OSD)上。Crush Map 包含 bucket、设备和 ruleset 三个主要组件,结合使用可以定义数据的分布和副本策略。
若要查看CRUSH 映射,
- 首先使用
ceph osd getcrushmap -o comp-filename
, - 使用
crushtool -d comp-filename -o decomp-filename
解译该输出 - 使用文本编辑器查看解译后的映射
[root@serverc ~]# cephadm shell
Inferring fsid 4c759c0c-d869-11ed-bfcb-52540000fa0c
Inferring config /var/lib/ceph/4c759c0c-d869-11ed-bfcb-52540000fa0c/mon.serverc.lab.example.com/config
Using recent ceph image registry.redhat.io/rhceph/rhceph-5-rhel8@sha256:6306de945a6c940439ab584aba9b622f2aa6222947d3d4cde75a4b82649a47ff
[ceph: root@serverc /]# ceph osd getcrushmap -o comp-filename
27
[ceph: root@serverc /]# crushtool -d comp-filename -o decomp-filename
[ceph: root@serverc /]# cat de
decomp-filename dev/
[ceph: root@serverc /]# cat decomp-filename
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54
# devices
device 0 osd.0 class hdd
device 1 osd.1 class hdd
device 2 osd.2 class hdd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd
device 6 osd.6 class hdd
device 7 osd.7 class hdd
device 8 osd.8 class hdd
# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 zone
type 10 region
type 11 root
# buckets
host serverc {
id -3 # do not change unnecessarily
id -4 class hdd # do not change unnecessarily
# weight 0.029
alg straw2
hash 0 # rjenkins1
item osd.0 weight 0.010
item osd.1 weight 0.010
item osd.2 weight 0.010
}
host serverd {
id -5 # do not change unnecessarily
id -6 class hdd # do not change unnecessarily
# weight 0.029
alg straw2
hash 0 # rjenkins1
item osd.3 weight 0.010
item osd.4 weight 0.010
item osd.5 weight 0.010
}
host servere {
id -7 # do not change unnecessarily
id -8 class hdd # do not change unnecessarily
# weight 0.029
alg straw2
hash 0 # rjenkins1
item osd.6 weight 0.010
item osd.7 weight 0.010
item osd.8 weight 0.010
}
root default {
id -1 # do not change unnecessarily
id -2 class hdd # do not change unnecessarily
# weight 0.088
alg straw2
hash 0 # rjenkins1
item serverc weight 0.029
item serverd weight 0.029
item servere weight 0.029
}
# rules
rule replicated_rule {
id 0
type replicated
min_size 1
max_size 10
step take default
step chooseleaf firstn 0 type host
step emit
}
# end crush map
[ceph: root@serverc /]#
元数据服务器 (MDS) 映射
包含用于存储元数据的池、元数据服务器列表、元数据服务器状态和映射时间戳。查看包含 ceph fs dump 的 MDS映射
代码语言:javascript复制[ceph: root@serverc /]# ceph fs dump
e1
enable_multiple, ever_enabled_multiple: 1,1
compat: compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2}
legacy client fscid: -1
No filesystems configured
dumped fsmap epoch 1
[ceph: root@serverc /]#
运行 ceph fs dump 命令后的输出结果。以下是每个字段的含义:
- e1: 当前文件系统的 epoch 号。
- enable_multiple, ever_enabled_multiple: 1,1: 文件系统是否启用了多 MDS 支持并且曾经启用过。
- compat: 文件系统支持的兼容性特性,包括三个字段(compat、rocompat 和 incompat),其中 compat 表示 CephFS 要求支持的最低版本,而 rocompat 和 incompat 分别表示与只读客户端和不兼容客户端相关的特性。
- legacy client fscid: -1: 指定将 legacy 客户端分配给文件系统的 ID,但当前没有 legacy 客户端连接到该文件系统。
- No filesystems configured: 表示当前没有配置任何文件系统。
- dumped fsmap epoch 1: 表示已成功输出当前 Ceph 集群的文件系统映射。
3博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 :)
https://docs.ceph.com/en/pacific/architecture/
https://docs.ceph.com
CL280 课堂讲义