第 2 章 池概述
Ceph 客户端将数据存储在池中。创建池时,您要为客户端创建一个 I/O 接口来存储数据。
从 Ceph 客户端的角度来看,即块设备、网关和其他,与 Ceph 存储集群交互非常简单:
- 创建集群句柄。
- 将集群句柄连接到集群。
- 创建用于读取和写入对象及其扩展属性的 I/O 上下文。
创建集群句柄并连接到集群
要连接到 Ceph 存储集群,Ceph 客户端需要以下详情:
- 集群名称(默认为 Ceph )- 不使用通常,因为它听起来很不确定。
- 初始监控地址。
Ceph 客户端通常使用 Ceph 配置文件的默认路径检索这些参数,然后从文件读取,但用户也可以在命令行中指定参数。Ceph 客户端还提供用户名和密钥,身份验证默认为 on
。然后,客户端联系 Ceph 监控集群,并检索 cluster map 的最新副本,包括其 monitor、OSD 和池。
创建池 I/O 上下文
为了读取和写入数据,Ceph 客户端会为 Ceph 存储集群中的特定池创建一个 I/O 上下文。如果指定的用户具有池的权限,Ceph 客户端可以从指定的池读取和写入。
Ceph 的架构使存储集群能够将此简单接口提供给 Ceph 客户端,以便客户端可以通过指定池名称并创建 I/O 上下文来选择您定义的一个复杂的存储策略。存储策略对 Ceph 客户端在容量和性能方面不可见。类似地,Ceph 客户端的复杂性(如将对象映射到块设备表示或提供 S3/Swift RESTful 服务)对 Ceph 存储集群不可见。
池为您提供了弹性、放置组、CRUSH 规则和配额。
-
弹性 :您可以设置允许多少个 OSD 失败,而不丢失数据。对于复制池,这是对象的所需副本数。典型的配置存储一个对象和一个额外副本,即
size = 2
,但您可以确定副本或副本数。对于纠删代码池,它是 纠删代码 profile 中的编码区块数,即m=2
。 - 放置组 :您可以为池设置放置组数量。典型的配置为每个 OSD 使用大约 50 到 100 个放置组来提供最佳平衡,而无需使用太多计算资源。在设置多个池时,要小心,请务必为池和集群设置合理的放置组数量。
- CRUSH 规则 :当您在池中存储数据时,映射到池的 CRUSH 规则可让 CRUSH 识别每个对象及其副本放置的规则,或者集群中纠删代码池的块。您可以为池创建自定义 CRUSH 规则。
-
配额 :当您使用
ceph osd pool set-quota
命令在池中设置配额时,您可以限制对象的最大数量或指定池中存储的最大字节数。