---
title: 超大规模集群支持
description: "在很多集群架构中，集群成员的主要目的就是让集中式接口知道它能访问哪些节点，然后此中央接口通过一个两级调度为客户端提供服务，在PB到EB级系统中这个调度系统必将成为最大的瓶颈。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/twp/kunpengsdss_19_0006.html
sourcePath: /source/zh/kunpengsdss/twp/kunpengsdss_19_0006.html
indexId: 6474fc0b2f7cb1515d809b0d934fba9d730205a8e1d9982fb8d2cb860eceb2ab51
---
# 超大规模集群支持

在很多集群架构中，集群成员的主要目的就是让集中式接口知道它能访问哪些节点，然后此中央接口通过一个两级调度为客户端提供服务，在PB到EB级系统中这个调度系统必将成为最大的瓶颈。

Ceph消除了此瓶颈：其OSD守护进程和客户端都能感知集群，例如Ceph客户端、各OSD守护进程都知道集群内其他的OSD守护进程，这样OSD就能直接和其它OSD守护进程和监视器通讯。另外，Ceph客户端也能直接和OSD守护进程交互。

Ceph客户端、监视器和OSD守护进程可以相互直接交互，这意味着OSD可以利用本地节点的CPU和内存执行那些有可能拖垮中央服务器的任务。这种设计均衡了计算资源，带来几个好处：

- OSD直接服务于客户端：由于任何网络设备都有最大并发连接上限，规模巨大时中央化的系统其物理局限性就暴露了。Ceph允许客户端直接和OSD节点联系，这在消除单故障点的同时，提升了性能和系统总容量。Ceph客户端可按需维护和某个OSD的会话，而不是一个中央服务器。
- OSD成员和状态：Ceph OSD加入集群后会持续报告自己的状态。在底层，OSD状态为up或down，反映它是否在运行、能否提供服务。如果一OSD状态为down且in，表明OSD守护进程可能故障了；如果一OSD守护进程没在运行（例如崩溃了），它就不能亲自向监视器报告自己是down的。Ceph监视器能周期性地ping OSD守护进程，以确保它们在运行，然而它也授权OSD进程去确认邻居OSD是否down了，并更新集群运行图、报告给监视器。这种机制意味着监视器还是轻量级进程。
- 数据清洗：作为维护数据一致性和清洁度的一部分，OSD能清洗归置组内的对象。也就是说，Ceph OSD能比较对象元数据与存储在其他OSD上的副本元数据，以捕捉OSD缺陷或文件系统错误（每天）。OSD也能做深度清洗（每周），即按位比较对象中的数据，以找出轻度清洗时未发现的硬盘坏扇区。
- 复制：和Ceph客户端一样，OSD也用CRUSH算法，但用于计算副本存到哪里（也用于重均衡）。一个典型的写情形是，一个客户端用CRUSH算法算出对象应存到哪里，并把对象映射到存储池和归置组，然后查找CRUSH MAP来确定此归置组的主OSD。
- 客户端把对象写入目标归置组的主OSD，然后这个主OSD再用它的CRUSH MAP副本找出用于放对象副本的第二、第三个OSD，并把数据复制到适当的归置组所对应的第二、第三OSD（要多少副本就有多少OSD），最终，确认数据成功存储后反馈给客户端。

图1 Ceph 三副本写流程

有了做副本的能力，OSD守护进程就可以减轻客户端的复制压力，同时保证了数据的高可靠性和安全性。
