ceph高速缓存池

发布时间 2023-08-06 19:36:18作者: A57

一. 缓存池运维

1.1 自定义硬盘类型

ceph osd crush class ls

ceph osd crush class create ssd

ceph osd crush class create sata

ceph osd crush rm-device-class osd.3

ceph osd crush set-device-class ssd osd.3

1.2 自定义角色管理不同类型硬盘

ceph osd crush rule ls

ceph osd crush rule create-replicated rule-ssd default host ssd

ceph osd crush rule create-replicated rule-sata default host sata

ceph osd crush rule create-replicated rule-hdd default host hdd

1.3 设置存储池为不同角色

  • 针对同一个存储池设置角色会覆盖
ceph osd pool create images 32 32

ceph osd pool set images crush_rule rule-hdd

ceph osd pool set images crush_rule rule-ssd

ceph osd pool set images crush_rule rule-sata
  • 可查看不同硬盘类型对应的角色是谁
ceph osd crush rule ls-by-class hdd

ceph osd crush rule ls-by-class ssd

ceph osd crush rule ls-by-class sata
  • 查看存储池对应的角色
ceph osd pool get images crush_rule

1.4 配置存储池副本满足要求

  • 将名为"images"的OSD池的"min_size"属性设置为1,表示只需要一个副本即可满足数据可用性的要求。
    • Ceph通常使用数据复制来确保数据的持久性和高可用性。通过设置较大的"size"值,可以增加数据的冗余和可靠性,但也会消耗更多的存储空间。相反,设置较小的"size"值可以节省存储空间,但可能降低数据的可靠性,因为在一个副本不可用的情况下,数据将无法访问。
ceph osd pool set images min_size 1

1.5 创建缓存池

  • 已 rule-ssd 角色创建存储池

ceph osd pool create cache 64 64 rule-ssd
  • 这条ceph命令的意思是将名为"images"的存储池设置为"cache"层。

    • 在Ceph中,层级存储(Tiering)是一种数据存储和访问的方式,它将不同类型的存储池组合在一起,以实现更高效的数据管理和访问。
    • 层级存储通常由两个主要层级组成:热层(hot tier)和冷层(cold tier)。热层通常是较快、较昂贵的存储,而冷层通常是较慢、较便宜的存储。
ceph osd tier add images cache
  • 将名为"cache"的存储池(也称为缓存池)的缓存模式设置为"writeback"。

    • 在Ceph中,层级存储(Tiering)允许将数据从一个池(通常是慢速、较便宜的池,称为冷层)自动迁移到另一个池(通常是较快、较昂贵的池,称为热层)中,以提高数据的访问性能。缓存池通常用作热层,而这个命令是在配置缓存池的缓存模式时使用的。
    • "writeback"是一种缓存模式,它指定数据写入到缓存池时的行为。具体来说,当缓存模式设置为"writeback"时,写入的数据首先会写入到缓存池中,并且很快地确认写入已完成(不等待数据复制到后端的主要存储池)。然后,Ceph后台进程会异步地将数据从缓存池迁移到主要存储池中,以实现层级存储的目标。
ceph osd tier cache-mode cache writeback
  • 将名为"images"的存储池设置为"cache"池的覆盖层。

    • 在Ceph中,层级存储(Tiering)允许将数据从一个池(通常是较慢、较便宜的池,称为冷层)自动迁移到另一个池(通常是较快、较昂贵的池,称为热层)中,以提高数据的访问性能。在这个命令中,"images"是指定的主要存储池,而"cache"是指定的用作热层的缓存池。
    • 命令ceph osd tier set-overlay images cache用于将"images"存储池设置为"cache"池的覆盖层。这意味着"images"存储池将使用"cache"存储池作为其热层缓存。数据将首先写入到"cache"池中,然后根据层级存储策略,Ceph会将部分数据从"cache"池迁移到"images"池,以实现数据的层级存储和访问优化。
ceph osd tier set-overlay images cache
  • 将名为"cache"的存储池(也称为缓存池)的"hit_set_type"属性设置为"bloom"。

    • 在Ceph中,"hit_set_type"属性用于配置缓存池的命中集(Hit Set)类型。命中集是用于跟踪缓存池中哪些对象被频繁访问的数据结构。通过记录这些信息,Ceph可以更有效地判断哪些数据适合保留在缓存池中,从而提高缓存的命中率和性能。
    • 当"hit_set_type"属性设置为"bloom"时,Ceph将使用布隆过滤器(Bloom Filter)作为命中集的类型。布隆过滤器是一种快速且高效的数据结构,用于检查一个元素是否存在于一个集合中。在这种命中集类型下,Ceph可以使用布隆过滤器快速判断一个对象是否在缓存池中,从而更好地管理缓存数据。
ceph osd pool set cache hit_set_type bloom
  • 将名为"cache"的存储池(也称为缓存池)的"hit_set_count"属性设置为1。

    • 在Ceph中,"hit_set_count"属性用于配置命中集(Hit Set)的数量。命中集是用于跟踪缓存池中哪些对象被频繁访问的数据结构。通过记录这些信息,Ceph可以更有效地判断哪些数据适合保留在缓存池中,从而提高缓存的命中率和性能。
    • 将"hit_set_count"设置为1意味着只使用一个命中集。这样,Ceph将仅跟踪缓存池中的一个命中集,用于记录频繁访问的对象信息。相比使用多个命中集,这可能会减少命中集的内存占用,但也可能会影响到缓存的命中率,因为只有一个命中集来记录访问模式。
    • 需要注意的是,设置"hit_set_count"的值应根据实际使用情况和性能需求进行调整。较小的"hit_set_count"值可能减少命中集的内存占用,但可能会牺牲一定的命中率。较大的"hit_set_count"值可能会提高命中率,但也会增加内存使用。因此,需要根据实际情况权衡取舍,并进行适当的性能测试和监控来优化缓存池的配置。
ceph osd pool set cache hit_set_count 1
  • 将images存储池设置为块类型
ceph osd pool application enable images rbd
  • 方法1: 将名为"cache"的存储池(也称为缓存池)的"target_max_objects"属性设置为256。

    • 在Ceph中,"target_max_objects"是缓存池的一个属性,用于设置缓存池的目标最大对象数。缓存池是层级存储中的热层,用于存储频繁访问的数据,以提高数据的访问性能。
    • 通过将"target_max_objects"设置为256,Ceph会尝试保持缓存池中的对象数量约为256个。如果缓存池中的对象数量超过了该值,Ceph会根据缓存策略选择性地将一些对象从缓存池中淘汰,以确保缓存池的大小保持在目标范围内。
    • 1个对象是1MB,这个能最大存储1024MB=1G
ceph osd pool set cache target_max_objects 256
  • 查看存储池状态
ceph osd dump | egrep 'images|cache'
  • 方法2:将名为"cache"的存储池(也称为缓存池)的"cache_target_full_ratio"属性设置为0.1。

    • 在Ceph中,"cache_target_full_ratio"属性用于设置缓存池的目标满池比率。缓存池是层级存储中的热层,用于存储频繁访问的数据,以提高数据的访问性能。
    • 通过将"cache_target_full_ratio"设置为0.1,Ceph将设定缓存池的目标满池比率为10%。这意味着当缓存池使用的空间达到总空间的10%时,Ceph会认为缓存池已经满,不再接受更多的数据。这样可以确保缓存池不会完全填满,从而避免缓存池因过度使用而导致性能下降或故障。
    • 需要注意的是,"cache_target_full_ratio"的设置应根据实际需求和性能要求进行调整。较小的值可能导致缓存池过早满池,从而限制了其性能提升的能力。较大的值可能会使缓存池过度使用,可能影响其他存储资源的可用性。因此,设置合理的"cache_target_full_ratio"值需要综合考虑存储需求和性能目标。
ceph osd pool set cache cache_target_full_ratio 0.1

1.6 缓存池使用

rbd create images/disk1 -s 10G

# 可以发现缓存池与副本池都有disk1块设备
rbd ls -p images
rbd ls -p cache

# 映射到服务器
rbd map images/disk1

mkfs.xfs /dev/rbd0

mount /dev/rbd0 /mnt/
  • 如果不用了,那么需要手动释放掉缓存池中的数据到存储池中
rados -p cache cache-flush-evict-all

1.7 删除缓存池

rados -p cache ls

# 释放到存储池中
rados -p cache cache-flush-evict-all

ceph osd tier rm-overlay images

ceph osd tier rm images cache