第 4 章 池
Ceph 客户端在池中存储数据。在创建池时,您将为客户端创建 I/O 接口以存储数据。从 Ceph 客户端(即块设备、网关和其他)与 Ceph 存储集群交互的视角来说比较简单:创建集群处理和连接到集群;然后创建一个 I/O 上下文,用于读取和编写对象及其扩展属性。
创建集群 Handle 和连接到集群
若要连接 Ceph 存储集群,Ceph 客户端需要集群名称(默认为 ceph
)和初始监控地址。Ceph 客户端通常使用 Ceph 配置文件的默认路径来检索这些参数,然后从 文件读取,但用户也可能会在命令行中指定参数。Ceph 客户端也提供用户名和密码密钥( 默认为 身份验证
)。然后,客户端联系 Ceph 监控集群,并检索 cluster map 的最新副本,包括其监视器、OSD 和池。
![创建流程](https://access.redhat.com/webassets/avalon/d/Red_Hat_Ceph_Storage-4-Storage_Strategies_Guide-zh-CN/images/99da9655ef82b89f073b7a56696b7258/149_Ceph_Auto-scalling_0421_pool_1.png)
创建池 I/O 上下文
为了读取和写入数据,Ceph 客户端为 Ceph 存储集群中的特定池创建 i/o 上下文。如果指定用户对池具有权限,Ceph 客户端可以从指定的池读取和写入。
![I/O 上下文](https://access.redhat.com/webassets/avalon/d/Red_Hat_Ceph_Storage-4-Storage_Strategies_Guide-zh-CN/images/12a71b118d5585ce558140e3d9879a77/149_Ceph_Auto-scalling_0421_pool_2.png)
Ceph 的架构使存储集群能够向 Ceph 客户端提供这一显著简单接口,以便客户端可以通过指定池名称并创建 I/O 上下文即可选择您定义的一个复杂的存储策略。除了容量和性能外,存储策略都对 Ceph 客户端不可见。类似地,Ceph 客户端的复杂性(将对象映射到块设备表示法,提供 S3/Swift RESTful 服务)对 Ceph 存储集群不可见。
池为您提供:
-
弹性 :您可以设置允许多少 OSD 失败而不丢失数据。对于复制池,这是对象的所需副本/副本数。典型的配置存储一个对象及一个额外副本(即
size = 2),
但您可以确定副本/副本的数量。对于纠删代码池,它是编码区块数(即 纠删代码 profile中的m=2
) - 放置组 :您可以为池设置 PG 数量。典型的配置为每个 OSD 使用大约 50-100 的放置组来提供最佳平衡,而不占用过多的计算资源。在设置多个池时,请小心确保为池和整个集群设置合理的放置组数量。
- CRUSH 规则 :在池中存储数据时,映射到池的 CRUSH 规则可以让 CRUSH 识别集群中各个对象的放置规则及其副本(或纠删代码池的块)。您可以为您的池创建自定义 CRUSH 规则。
-
快照 :使用
ceph osd 池 mksnap
创建快照时,您实际上会对特定的池执行快照。 -
配额 :当您在具有
ceph osd pool set-quota
的池中设置配额时,可能会限制在指定池中存储的最大字节数或最大字节数。
4.1. 池和存储策略
若要管理池,您可以列出、创建和删除池。您还可以查看每个池的利用率统计信息。