ceph对不同类型磁盘的分类使用

如何将ssd作为hdd的缓存池
**开篇:
目前企业的业务场景多种多样,并非所有Ceph存储解决方案都是相同的,了解工作负载和容量要求对于设Ceph解决方案至关重要。Ceph可帮助企业通过统一的分布式集群提供对象存储、块存储或文件系统存储。在设计流程中,这些集群解决方案针对每项要求都进行了优化。该设计流程的首要因素包括 IOPS 或带宽要求、存储容量需求以及架构和组件选择,确保这些因素的合理性有助于完美平衡性能和成本。不同类型的工作负载需要不同的存储基础设施方案。
在这里插入图片描述
下面将从以下6个方面介绍ceph的通用解决方案
性能方面:
1、如何ssd作为Ceph-osd的日志盘使用
2、如何同一个Ceph集群分别创建ssd和hdd池
3、如何将ssd作为hdd的缓存池
4、如何指定ssd盘为主osd,hdd为从osd
稳定及数据安全性方面:
5、Ceph双副本如何保证宕机数据的安全性
6、Ceph纠删码理论与实践

下面我们开始专题:如何将ssd作为hdd的缓存池
一、缓存池原理
缓存分层特性也是在Ceph的Firfly版中正式发布的,这也是Ceph的Firefly版本中被谈论最多的一个特性。缓存分层是在更快的磁盘(通常是SSD),上创建一个Ceph池。这个缓存池应放置在一个常规的复制池或erasure池的前端,这样所有的客户端I/O操作都首先由缓存池处理。之后,再将数据写回到现有的数据池中。客户端能够在缓存池上享受高性能,而它们的数据显而易见最终是被写入到常规池中的。
在这里插入图片描述
一般来说,缓存层构建在昂贵/速度更快的SSD磁盘上,这样才能为客户提供更好的I/O性能。在缓存池后端通常是存储层,它由复制或者erasure类型的HDD组成。在这种类型的设置中,客户端将I/O请求提交到缓存池,不管它是一个读或写操作,它的请求都能够立即获得响应。速度更快的缓存层为客户端请求提供服务。一段时间后,缓存层将所有数据写回备用的存储层,以便它可以缓存来自客户端的新请求。在缓存层和存储层之间的数据迁移都是自动触发且对客户端是透明的。缓存分层能以两种模式进行配置。
writeback模式:当Ceph的缓存分层配置为writeback模式时,Ceph客户端将数据写到缓存层类型的池,也就是速度更快的池,因此能够立即接收写入确认。基于你为缓存层设置的flushing/evicting策略,数据将从缓存层迁移到存储层,并最终由缓存分层代理将其从缓存层中删除。处理来自客户端的读操作时,首先由缓存分层代理将数据从存储层迁移到缓存层,然后再把它提供给客户。直到数据变得不再活跃或成为冷数据,否则它将一直保留在缓存层中。
read-only模式:当Ceph的缓存分层配置为read-only模式时,它只适用于处理客户端的读操作。客户端的写操作不涉及缓存分层,所有的客户端写都在存储层上完成。在处理来自客户端的读操作时,缓存分层代理将请求的数据从存储层复制到缓存层。基于你为缓存层配置的策略,不活跃的对象将会从缓存层中删除。这种方法非常适合多个客户端需要读取大量类似数据的场景。
缓存层是在速度更快的物理磁盘(通常是SSD),上实现的,它在使用HDD构建的速度较慢的常规池前部署一个快速的缓存层。在本节中,我们将创建两个独立的池(一个缓存池和一个常规),分别用作缓存层和存储层。

网上找了一篇一篇牛人写的存储分层在OpenStack的一个应用,将ssd池做cinder、nova、glance的缓冲。
https://www.xiaocoder.com/2017/09/05/ceph-for-openstack-storage/
二、理论与实践相结合
1、下面开始配置以cache作为sata-pool的前端高速缓冲池。
1)、新建缓冲池,其中,cache作为sata-pool的前端高速缓冲池。
 # ceph osd pool create storage 64
pool ‘storage’ created
 # ceph osd pool create cache 64
pool ‘cache’ created
2)、设定缓冲池读写策略为写回模式。
ceph osd tier cache-mode cache writeback
3)、把缓存层挂接到后端存储池上
 # ceph osd tier add storage cache
pool ‘cache’ is now (or already was) a tier of ‘storage’
4)、将客户端流量指向到缓存存储池
 # ceph osd tier set-overlay storage cache
overlay for ‘storage’ is now (or already was) ‘cache’
2、调整Cache tier配置
1)、设置缓存层hit_set_type使用bloom过滤器
 # ceph osd pool set cache hit_set_type bloom
set pool 27 hit_set_type to bloom
命令格式如下:
ceph osd pool set {cachepool} {key} {value}
关于Bloom-Filte算法原理可参见:
https://blog.csdn.net/jiaomeng/article/details/1495500
2)、设置hit_set_count、hit_set_period
 # ceph osd pool set cache hit_set_count 1
set pool 27 hit_set_count to 1
 # ceph osd pool set cache hit_set_period 3600
set pool 27 hit_set_period to 3600
 # ceph osd pool set cache target_max_bytes 1000000000000
set pool 27 target_max_bytes to 1000000000000
默认情况下缓冲池基于数据的修改时间来进行确定是否命中缓存,也可以设定热度数hit_set_count和热度周期hit_set_period,以及最大缓冲数据target_max_bytes。
hit_set_count 和 hit_set_period 选项分别定义了 HitSet 覆盖的时间区间、以及保留多少个这样的 HitSet,保留一段时间以来的访问记录,这样 Ceph 就能判断一客户端在一段时间内访问了某对象一次、还是多次(存活期与热度)。
3)、设置min_read_recency_for_promete、min_write_recency_for_promote
 # ceph osd pool set cache min_read_recency_for_promote 1
set pool 27 min_read_recency_for_promote to 1
 # ceph osd pool set cache min_write_recency_for_promote 1
set pool 27 min_write_recency_for_promote to 1
缓存池容量控制
先讲解个概念缓存池代理层两大主要操作
•刷写(flushing):负责把已经被修改的对象写入到后端慢存储,但是对象依然在缓冲池。
•驱逐(evicting):负责在缓冲池里销毁那些没有被修改的对象。
缓冲池代理层进行刷写和驱逐的操作,主要和缓冲池本身的容量有关。在缓冲池里,如果被修改的数据达到一个阈值(阈值(容量百分比),缓冲池代理就开始把这些数据刷写到后端慢存储。当缓冲池里被修改的数据达到40%时,则触发刷写动作。
 # ceph osd pool set cache cache_target_dirty_ratio 0.4
当被修改的数据达到一个确定的阈值(容量百分比),刷写动作将会以高速运作。例如,当缓冲池里被修改数据达到60%时候,则高速刷写。
 # ceph osd pool set cache cache_target_dirty_high_ratio 0.6
缓冲池的代理将会触发驱逐操作,目的是释放缓冲区空间。例如,当缓冲池里的容量使用达到80%时候,则触发驱逐操作。
 # ceph osd pool set cache cache_target_full_ratio 0.8
除了上面提及基于缓冲池的百分比来判断是否触发刷写和驱逐,还可以指定确定的数据对象数量或者确定的数据容量。对缓冲池设定最大的数据容量,来强制触发刷写和驱逐操作。
 # ceph osd pool set cache target_max_bytes 1073741824
同时,也可以对缓冲池设定最大的对象数量。在默认情况下,RBD的默认对象大小为4MB,1GB容量包含256个4MB的对象,则可以设定:
 # ceph osd pool set cache target_max_objects 256
4)、缓冲池的数据刷新问题在缓冲池里,对象有最短的刷写周期。若被修改的对象在缓冲池里超过最短周期,将会被刷写到慢存储池。
 # ceph osd pool set cache cache_min_flush_ age 600
注意:单位是分钟
设定对象最短的驱逐周期。
 # ceph osd pool set cache cache_min_evict_age 1800
3、删除缓存层
删除readonly缓存
1)、把缓存模式改为 none 即可禁用。
ceph osd tier cache-mode {cachepool} none
2)、去除后端存储池的缓存池。
ceph osd tier remove {storagepool} {cachepool}
删除writeback缓存
1)、把缓存模式改为 forward ,这样新的和更改过的对象将直接刷回到后端存储池
 # ceph osd tier cache-mode cache forward --yes-i-really-mean-it
set cache-mode for pool ‘cache’ to forward
2)、确保缓存池已刷回,可能要等数分钟
 # rados ls -p cache
可以通过以下命令进行手动刷回
 # rados -p cache cache-flush-evict-all
3)、取消流量指向缓存池
 # ceph osd tier remove-overlay storage
there is now (or already was) no overlay for ‘storage’
4)、剥离缓存池
 # ceph osd tier remove storage cache
pool ‘cache’ is now (or already was) not a tier of ‘storage’
参考:
https://yq.aliyun.com/articles/606731
————————————————

如何同一个ceph集群分别创建ssd和hdd池
开篇:
目前企业的业务场景多种多样,并非所有Ceph存储解决方案都是相同的,了解工作负载和容量要求对于设Ceph解决方案至关重要。Ceph可帮助企业通过统一的分布式集群提供对象存储、块存储或文件系统存储。在设计流程中,这些集群解决方案针对每项要求都进行了优化。该设计流程的首要因素包括 IOPS 或带宽要求、存储容量需求以及架构和组件选择,确保这些因素的合理性有助于完美平衡性能和成本。不同类型的工作负载需要不同的存储基础设施方案。
在这里插入图片描述
下面将从以下6个方面介绍ceph的通用解决方案
性能方面:
1、如何ssd作为Ceph-osd的日志盘使用
2、如何同一个Ceph集群分别创建ssd和hdd池
3、如何将ssd作为hdd的缓存池
4、如何指定ssd盘为主osd,hdd为从osd
稳定及数据安全性方面:
5、Ceph双副本如何保证宕机数据的安全性
6、Ceph纠删码理论与实践
注意:该文章同时在华云数据官方公众号上发布过
智汇华云 | Ceph的正确玩法之同一个Ceph集群分别创建SSD和HDD池(存储快慢池)
下面我们开始专题一:如何同一个Ceph集群分别创建ssd和hdd池
存储快慢池
场景:
存储节点上既有SATA盘也有SSD盘,把各节点的SSD和SATA分别整合成独立的存储池,为不同的应用供给不同性能的存储。比如常见的云环境中的虚拟机实例,对于实时数据IO性能要求高,并且都是热数据,可以把这部分的存储需求放入SSD的存储池里;而对于备份、快照等冷数据应用,相对IO性能需求比较低,因此将其可以放在普通的由SATA盘组成的存储池里。
在这里插入图片描述
方法: Luminous版本的ceph新增了一个crush class的功能,可以为新增的设备指定为类,创建rule的时候直接指定class即可。 创建一个磁盘类型的class,给磁盘标记class的统一标签,自动会根据class的类型创建一个树,根据树创建rule,根据rule创建存储池,整个操作没有动crushmap的操作 增加或修改盘的时候,设置下属性即可
该方案的优点:
该方案的优点为充分利用SSD设备高性能的优势,将关键性业务或者IO敏感型业务全部放入高性能存储池,为客户提供性能优越的存储服务。
该方案的缺点:
该方案的缺点为受到成本限制,高性能存储池存储容量规模会比较小,只能针对性地对少数关键性业务或者IO敏感型业务进行服务质量保障,且业务一经规划部署至某个存储池后,不能在两个存储池之间进行自动转换,后期进行调整开销较大。
修改前集群拓扑:
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.52734 root default
-3 0.17578 host storage1
0 hdd 0.07809 osd.0 up 1.00000 1.00000
3 hdd 0.09769 osd.3 up 1.00000 1.00000
-5 0.17578 host storage2
1 hdd 0.07809 osd.1 up 1.00000 1.00000
4 hdd 0.09769 osd.4 up 1.00000 1.00000
-7 0.17578 host storage3
2 hdd 0.07809 osd.2 up 1.00000 1.00000
5 hdd 0.09769 osd.5 up 1.00000 1.00000
查看class类型
[root@storage1 ~]# ceph osd crush class ls
[
“hdd”
]
删除默认的class
[root@storage1 ~]# for i in {0…5} ; do ceph osd crush rm-device-class osd.KaTeX parse error: Expected 'EOF', got '#' at position 224: …oot@storage1 ~]#̲ ceph osd tree …i;done
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.52734 root default
-3 0.17578 host storage1
3 0.09769 osd.3 up 1.00000 1.00000
0 sas 0.07809 osd.0 up 1.00000 1.00000
-5 0.17578 host storage2
4 0.09769 osd.4 up 1.00000 1.00000
1 sas 0.07809 osd.1 up 1.00000 1.00000
-7 0.17578 host storage3
5 0.09769 osd.5 up 1.00000 1.00000
2 sas 0.07809 osd.2 up 1.00000 1.00000
[root@storage1 ~]# ceph osd crush class ls
[
“sas”
]
将osd编号3-5标记为ssd
[root@storage1 ~]# for i in {3…5} ;do ceph osd crush set-device-class ssd osd.$i;done
set osd(s) 3 to class ‘ssd’
set osd(s) 4 to class ‘ssd’
set osd(s) 5 to class ‘ssd’
[root@storage1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.52734 root default
-3 0.17578 host storage1
0 sas 0.07809 osd.0 up 1.00000 1.00000
3 ssd 0.09769 osd.3 up 1.00000 1.00000
-5 0.17578 host storage2
1 sas 0.07809 osd.1 up 1.00000 1.00000
4 ssd 0.09769 osd.4 up 1.00000 1.00000
-7 0.17578 host storage3
2 sas 0.07809 osd.2 up 1.00000 1.00000
5 ssd 0.09769 osd.5 up 1.00000 1.00000
[root@storage1 ~]# ceph osd crush class ls
[
“sas”,
“ssd”
]
创建个ssd规则:
[root@storage1 ~]# ceph osd crush rule create-replicated rule-ssd default host ssd
[root@storage1 ~]# ceph osd crush rule create-replicated rule-sas default host sas
格式如下:
ceph osd crush rule create-replicated
[root@storage1 ~]# ceph osd crush rule ls
replicated_rule
rule-ssd
创建一个使用该rule-ssd规则的存储池:
[root@storage1 ~]# ceph osd pool create ssdpool 64 64 rule-ssd
pool ‘ssdpool’ created
创建一个使用该rule-sas规则的存储池:
[root@storage1 ~]# ceph osd pool create saspool 64 64 rule-sas
pool ‘saspool’ created
查看ssdpool的信息可以看到使用的crush_rule 为1,也就是rule-ssd
[root@storage1 ~]# ceph osd pool ls detail | grep ssdpool
pool 6 ‘ssdpool’ replicated size 3 min_size 2 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 219 flags hashpspool stripe_width 0
[root@storage1 ~]# ceph osd pool ls detail | grep saspool
pool 7 ‘saspool’ replicated size 3 min_size 2 crush_rule 2 object_hash rjenkins pg_num 64 pgp_num 64 last_change 223 flags hashpspool stripe_width 0
参考:
http://www.zphj1987.com/2017/06/28/ceph-luminous-new-osd-class/
————————————————
如何指定ssd盘为主osd,hdd为从osd
开篇:
目前企业的业务场景多种多样,并非所有Ceph存储解决方案都是相同的,了解工作负载和容量要求对于设Ceph解决方案至关重要。Ceph可帮助企业通过统一的分布式集群提供对象存储、块存储或文件系统存储。在设计流程中,这些集群解决方案针对每项要求都进行了优化。该设计流程的首要因素包括 IOPS 或带宽要求、存储容量需求以及架构和组件选择,确保这些因素的合理性有助于完美平衡性能和成本。不同类型的工作负载需要不同的存储基础设施方案。
在这里插入图片描述
下面将从以下6个方面介绍ceph的通用解决方案
性能方面:
1、如何ssd作为Ceph-osd的日志盘使用
2、如何同一个Ceph集群分别创建ssd和hdd池
3、如何将ssd作为hdd的缓存池
4、如何指定ssd盘为主osd,hdd为从osd
稳定及数据安全性方面:
5、Ceph双副本如何保证宕机数据的安全性
6、Ceph纠删码理论与实践
注意:该文章同时在华云数据官方公众号上发布
智汇华云 | Ceph的正确玩法之指定SSD为主OSD,HDD为从OSD
下面我们开始专题:如何指定ssd盘为主osd,hdd为从osd
场景:
假设1
当前集群环境中混用了 SSD 与 SATA 磁盘
假设2
当前具有一批大小一样的 SATA 磁盘 其中 OSD.0 已经使用了很多年 其他OSD磁盘都是新采购, 性能会比 OSD.0 更加好
实验室中有两批sas磁盘,一批是7200转磁盘,一批是10000转磁盘,
期望结果:
集群中存在多种性能不一样的磁盘与主机 为了保证 CEPH 集群吞吐与性能可以得到更好的优化
保证了磁盘的数据容量一致的情况下优先使用性能更好的磁盘作出 IO 处理
在这里插入图片描述
总结
CEPH 会认为每个磁盘能力一样 会平均每个磁盘的 IO 能力(primary affinity)与存储空间能力(weight) primary affinity 参数可以在不改变磁盘存储能力的情况下, 降低在 CEPH 集群使用过程中对该 osd 的认购 primary pg 能力
从上图看出来, priamry osd 在每次 peering 时, 都会比 secondary osd 具有更多的 IO
修改配置文件/etc/ceph/ceph.conf
[mon]
mon_osd_allow_primary_affinity = true
重启ceph-mon
ceph osd primary-affinity osd.4 0.5
验证: 修改权限之前:
ceph pg dump | grep active+clean | grep ‘[4’ | wc -l
48
修改权重之后
ceph pg dump | grep active+clean | grep ‘[4’ | wc -l
8
参考:
https://blog.csdn.net/signmem/article/details/78612561**

你可能感兴趣的:(ceph)