创建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