Ceph优化:用SSD做缓存池方案详解

创建OSD

ceph-deploy disk list opennebula11
ceph-deploy disk zap opennebula11 /dev/sdb
ceph-deploy osd create --data /dev/sdb opennebula00

直接parted /dev/sdm , 做好分区/dev/sdm1,格式化/dev/sdm1 mkfs.xfs 出错,cannot open /dev/sdm: Device or resource busy
解决方法:
dmsetup ls 查看谁在占用,找到ceph-**字样(ceph-为lsblk显示的块设备具体信息)
使用dmsetup 删除字样
dmsetup remove ceph-

lsblk 查看设备信息,可以看到ceph-**等标识等标识消失
mkfs.xfs -f /dev/sdm 成功通过

移走OSD默认Class类型

ceph osd crush rm-device-class osd.8
for i in 30 31 16 17 9 10 23 24; do ceph osd crush rm-device-class osd.$i;done

设置OSD的Class类型

ceph osd crush set-device-class ssd osd.8
for i in 30 31 16 17 9 10 23 24; do ceph osd crush set-device-class ssd osd.$i;done

创建基于ssd的class rule

ceph osd crush rule create-replicated ssd_rule default host ssd

创建基于ssd_rule规则的存储池

ceph osd pool create cache 64 64 ssd_rule

查看cache的信息可以看到使用的crush_rule为1,也就是ssd_rule

ceph osd pool get cache crush_rule

将 缓存池 放置到 存储池 前端

ceph osd tier add one cache

设置缓存模式为 writeback

ceph osd tier cache-mode cache writeback

将所有客户端请求从存储池引导至缓存池

ceph osd tier set-overlay one cache

配置缓存层

启用hit set tracking,生产环境通常使用bloom过滤器

ceph osd pool set cache hit_set_type bloom

启用hit set count,即缓存池中存储的hit set(命中集)的数量,数量越大,OSD占用的内存量就越大

ceph osd pool set cache hit_set_count 1

启用hit set period,命中集在缓存池中的有效期,以秒为单位

ceph osd pool set cache hit_set_period 3600   # 1 hour

设置缓存池中允许放的最大字节数

ceph osd pool set cache target_max_bytes 1099511627776  # 1 TB

设置缓存池中允许放的最大对象数,RBD默认对象大小是4MB,1GB包含256个4MB对象

ceph osd pool set cache target_max_objects 256

设置缓存数据刷新到存储层和缓存层中删除这些数据的最小时间间隔(分钟为单位)

ceph osd pool set cache cache_min_flush_age 60
ceph osd pool set cache cache_min_evict_age 600

缓存池里,如果被修改的数据达到一个阈值(容量百分比),就将数据写到存储层

#### 脏对象占比达到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

当缓存池的使用量达到其总量的一定百分比时,将未修改的(干净的)对象刷盘

ceph osd pool set cache cache_target_full_ratio 0.8

设置在处理读写操作时候,检查多少个 HitSet,检查结果将用于决定是否异步地提升对象(即把对象从冷数据升级为热数据,放入快取池)。它的取值应该在 0 和 hit_set_count 之间, 如果设置为 0 ,则所有的对象在读取或者写入后,将会立即提升对象;如果设置为 1 ,就只检查当前 HitSet ,如果此对象在当前 HitSet 里就提升它,否则就不提升。 设置为其它值时,就要挨个检查此数量的历史 HitSet ,如果此对象出现在 min_read_recency_for_promote 个 HitSet 里的任意一个,那就提升它

ceph osd pool set cache min_read_recency_for_promote 1
ceph osd pool set cache min_write_recency_for_promote 1

删除writeback缓存池

将缓存模式修改为转发

ceph osd tier cache-mode cache forward --yes-i-really-mean-it

查看缓存池对象

rados -p cache ls 

如果有对象,手动刷新对象到存储池

rados -p cache cache-flush-evict-all

删除覆盖层,以使客户端不再将流量引导至缓存

ceph osd tier remove-overlay one

解除存储池与缓存池的绑定

ceph osd tier remove one cache

删除read-only缓存池

将缓存模式更改为none以禁用缓存

ceph osd tier cache-mode cache none

解除绑定

ceph osd tier remove one cache

列出cache池中的对象

rados -p cache ls

列出池中属于libvirt的对象

rbd ls -l -p one --id libvirt

列出one池中对象

rbd list -p one

删除对应的对象

rbd rm -p one one-51-116-0

配置CRUSH规则,使主数据落在SSD的OSD上

提取CRUSH map

ceph osd getcrushmap -o crushmap.txt

反编译CRUSH map

crushtool -d crushmap.txt -o crushmap-decompile

编辑CRUSH map

vi crushmap-decompile
 # rules
 rule replicated_rule {
	id 0
	type replicated
	min_size 1
	max_size 10
	step take default class ssd
	step chooseleaf firstn 1 type host
	step emit

   step take default class hdd
   step chooseleaf firstn -1 type host
   step emit
}

choose表示选择结果为故障域,chooseleaf表示选择故障域下面的OSD节点;firstn用于副本池,indep用于EC池;后面的数字表示要选择的rep数目,正数表示要选择的副本数,0表示选择所有副本,负数表示选择除去相应副本数后剩余的副本

重新编译CRUSH map

crushtool -c crushmap-decompile -o crushmap-compiled

将新的CRUSH map注入到集群

ceph osd setcrushmap -i crushmap-compiled	

你可能感兴趣的:(运维故障集,linux,大数据,运维,centos,服务器)