本页介绍了 Google Distributed Cloud (GDC) 气隙式设备系统的多节点存储。
GDC 气隙设备包含三台服务器,每台服务器都连接了六个非易失性快速内存 (NVme) 磁盘:
- 2 个 1TB NVMe 启动介质
- 4 块 3.84TB NVMe
每个节点上的两个 1TB NVMe 磁盘专用于启动和系统工作负载,而另外四个 3.84TB NVMe 磁盘则用作可靠数据存储的一部分。
GDC 使用 Ceph 作为软件定义存储空间,以可靠地存储系统和用户数据。Ceph 集群部署在所有三台服务器的裸金属层,总共使用 12 个(每台服务器 4 个)连接到这些服务器的 3.84TB NVMe 驱动器作为底层存储。

Ceph 存储组件
Ceph 监控器
Ceph 监控器会维护集群状态映射,包括监控器映射、管理器映射和对象存储守护进程 (OSD) 映射。这些映射表示 Ceph 服务相互协调所需的关键集群状态。监控器还负责管理服务与客户端之间的身份验证。至少需要三个监控器才能实现冗余和高可用性。
Ceph 管理器
Ceph 管理器负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。通常,高可用性需要至少两个管理器。GDC 环境运行的 Ceph 管理器数量与监控器数量相同,因此集群中部署了 3 个 Ceph 管理器。
Ceph 对象存储守护程序 (OSD)
对象存储守护程序 (https://docs.ceph.com/en/quincy/glossary/#term-Ceph-OSD) 用于存储数据并处理数据复制、恢复和重新平衡。OSD 通过检查其他 Ceph OSD 的心跳,向 Ceph 监控器和管理器提供一些监控信息。通常需要至少三个 Ceph OSD 才能实现冗余和高可用性。GDC 环境为每个物理驱动器分配一个 OSD。
Ceph Rados Block Device (RBD)
Ceph 块设备采用精简配置,并且可调整大小。它们将数据条带化存储在多个 OSD 上。Ceph 块设备利用了核心 Ceph 功能,包括创建快照、复制和强一致性。在 GDC 环境中,Ceph RBD 不会直接公开。不过,它由块存储 Ceph CSI 驱动程序使用,该驱动程序负责支持面向用户的 Kubernetes 存储 (https://kubernetes.io/docs/concepts/storage/)。
Ceph RGW
Ceph Rados Gateway 是一种对象存储接口,可为应用提供一个 RESTful 网关,以访问 Ceph 存储集群 (https://docs.ceph.com/en/quincy/glossary/#term-Ceph-Object-Storage)。
- 与 S3 兼容:提供对象存储功能,其接口与 Amazon S3 RESTful API 的大部分子集兼容。
- 与 Swift 兼容:提供对象存储功能,其接口与 OpenStack Swift API 的大部分子集兼容。
在 GDC 环境中,只有 S3 端点通过 Kubernetes 服务网格服务公开。
GDC 存储空间弹性
Ceph 块和对象存储组件配置为使用 3 的数据复制系数。必须至少有两个副本可用,才能继续提供输入/输出 (I/O) 服务。使用节点级故障域,这意味着 Ceph 会尝试在 3 个不同的服务器上将数据复制 3 次 (3x)。
以下是一些有关如何处理失败情况的示例:
- 单个节点发生故障不会导致数据丢失,也不会影响工作负载的存储操作。
- 不同节点上发生两次磁盘故障不会导致数据丢失。不过,如果工作负载在这些磁盘上具有三个数据副本中的两个,则可能会影响存储可用性。
- 如果发生多个节点故障,或者不同节点上发生两个以上的磁盘故障,可能会导致数据丢失,并可能影响工作负载的存储可用性。
GDC 存储空间容量
可用的原始磁盘空间容量等于以下值:
raw_capacity = 3.84TB * 4 (disks_per_node) * 3 (nodes) = 46.08TB
不过,由于存储在 Ceph 集群中的数据会复制三次,因此可用于所有工作负载的可用存储容量为:
available_capacity = raw_capacity / 3 (replicas) = 15.36TB
15.36TB 的存储空间在系统和用户工作负载之间共享,可用于块存储和对象存储。