ceph纠删原理和配置手册

一、概念和原理

1.1 概念

按照误码控制的不同功能,可分为检错码、纠错码和纠删码等。 检错码仅具备识别错码功能 而无纠正错码功能; 纠错码不仅具备识别错码功能,同时具备纠正错码功能; 纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时可把无法纠错的信息删除。

1.2 原理

现如今大部分存储设备都是通过raid技术来实现数据保护的,但是raid的缺点也显而易见一般只允许坏一块磁盘,最多允许坏2块,当磁盘数量太多了之后,磁盘的故障率也随之提高,这个时候使用raid技术也满足不了数据安全存储保护的需求了。

纠删是一种数据保护方法,他将数据分割成片段,把冗余数据块扩展,编码,并将其存储在不同的位置,比如磁盘,存储节点或其他的地理位置。纠删原理:用个简单的公式来表示:n=k+m,其中n表示纠删过程中创建的数据或符号的总值,k表示原始数据或符号的值,m表示故障后添加的提供保护的冗余值。举例来说,一个原数据落到存储节点上之前被切分成4片(k值),通过纠删算法纠删成6片(n值),那么纠删值为2(m值),那么。这六片数据中任意四片都可以重建出原来的数据。

二、纠删配置手册

2.1 环境描述

节点IP

主机名

集群角色

OSD个数

192.168.0.31

lqy-1

MON&MDS&OSD

每个节点

一个50G磁盘做SSD

二个100G磁盘做SATA

192.168.0.32

lqy-2

192.168.0.36

lqy-3

2.2 配置步骤

1、初始化集群,查看集群状态,确认为ok状态后在进行下面的操作

2、查看当前的默认策略

# ceph osd erasure-code-profile ls

# ceph osd erasure-code-profile get default

3、创建一个新的名为profile的规则,设置为主机分组

#ceph osd erasure-code-profile set profile k=2 m=1 runleset-failure-domain=host

4、创建一个名为ecpool-1的纠删码存储池,使用上面创建的profile规则

(由于k=2,m=1,总共6个SATA,所以PG设置为256)

# ceph osd pool create ecpool-1 256 256 erasure profile

可以看到创建的存储池规则不是replicate而是erasure

5、创建纠删码的缓存池

# ceph osd pool create ssd 128 128

6、修改当前的crushmap

# ceph osd getcrushmap -o raw_map

# crushtool -d raw_map -o decode_map

# vim decode_map

7、编码并设置crushmap

# crushtool -c decode_map -o crush_map

# ceph osd setcrushmap -i crush_map

查看此时的osd节点树

8、设置缓存池各个参数

将ssd设置成就删池ecpool-1的缓存池

# ceph osd tier add ecpool-1 ssd

设置缓存模式为writeback并让其生效

# ceph osd tier cache-mode ssd writeback

# ceph osd tier set-overlay ecpool-1 ssd

设置命中算法

# ceph osd pool set ssd hit_set_type bloom

# ceph osd pool set ssd hit_set_count 1

# ceph osd pool set ssd hit_set_period 3600

设置缓存池缓存的最大字节数(文件大小,一般设置为SSD的可用空间总和)

# ceph osd pool set ssd target_max_bytes 70000000000

设置缓存脏页比例,达到此比例之后开始回写 (0.4表示这里设置40%,达到40%之后开始往冷池复制数据)

# ceph osd pool set ssd cache_target_dirty_ratio 0.4

设置达到此比例后,开始移除对象 (0.8表示这里设置80%,达到80%之后开始删除数据)

# ceph osd pool set ssd cache_target_full_ratio 0.8

设置最快刷到ecpool-1池的时间(秒),此处表示最少在热池保存600s之后,在开始往冷池刷

# ceph osd pool set ssd cache_min_flush_age 600

设置最快清除ssd池对象时间(秒),即达到1800s之后开始清除ssd里面的对象数据(已经刷到冷池的数据)

# ceph osd pool set ssd cache_min_evict_age 900

设置ecpool-1池使用规则1

# ceph osd pool set ecpool-1 crush_ruleset 1

设置ssd池使用规则2

# ceph osd pool set ssd crush_ruleset 2

将ecpool-1加入mdsmap

# ceph mds add_data_pool ecpool-1

9、挂载fuse客户端,创建缓存目录cache

# fuse-mount -m 192.168.0.31,192.168.0.32,192.168.0.36 /media/

# mkdir /media/cache

# setfattr -n ceph.dir.layout.pool -v ecpool-1 /media/cache/

10、验证是否配置成功

往挂载点写入400M数据,查看是否先写到ssd池

# dd if=/dev/zero of=/media/cache/400M bs=1M count=400

。。。。。

 

posted on 2016-12-14 14:39  歪歪121  阅读(1084)  评论(0)    收藏  举报