bcache配置使用

 

一、前言

简单介绍下bcache,bcache是linux内核块设备层的cache。主要是使用SSD盘在IO速度较慢的HDD盘上面做一层缓存,从而来提高HDD盘的IO速率。一个缓存设备(SSD)可以同时为多个后端设备(HDD)提供缓存。既然是缓存,那自然就会想到缓存策略,bcache支持三种缓存策略:

  • writeback:回写策略,所有的数据将先写入缓存盘,然后等待系统将数据回写入后端数据盘中。
  • writethrough:直写策略(默认策略),数据将会同时写入缓存盘和后端数据盘。
  • writearoud:数据将直接写入后端磁盘。

bcache比较灵活,缓存策略可以随时修改,也可以针对不同的bcache设备设置不同的缓存策略。以下会按照安装、配置和使用这几个部分来说明具体使用bcache的过程。

二、准备环境

bcache可以大概分为两个部分,一个是linux内核模块,一个是bcache-tools,bcache内核模块在linux内核3.10及以上才支持,所以使用bcache,需要将内核升级到3.10及以上版本才行。因为我们的集群环境是要求内核版本是4.4.13,所以下面的示例会在内核4.4.13上进行。

升级内核步骤也比较简单,下载指定内核rpm包,然后安装,再修改grub,最后重启就可以啦。以下是我测试的环境:

[root@lab01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

[root@lab01 ~]# uname -a
Linux lab01 4.4.13-1.el7.elrepo.x86_64 #1 SMP Wed Jun 8 13:15:59 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

因为只是测试,这里我准备的是一台虚拟机,然后配置了两块磁盘(sdb和sdc)来做试验:

[root@lab01 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom

三、安装

安装bcache-tools

安装依赖libblkid-devel

$ yum install libblkid-devel -y

下载bcache-tools源码,并安装

$ git clone https://github.com/g2p/bcache-tools.git
$ cd bcache-tools
$ make && make install

然后测试bache-tools是否正确安装

[root@lab01 bcache-tools]# make-bcache
Please supply a device
Usage: make-bcache [options] device
    -C, --cache     Format a cache device
    -B, --bdev      Format a backing device
    -b, --bucket        bucket size
    -w, --block     block size (hard sector size of SSD, often 2k)
    -o, --data-offset   data offset in sectors
        --cset-uuid     UUID for the cache set
        --writeback     enable writeback
        --discard       enable discards
        --cache_replacement_policy=(lru|fifo)
    -h, --help      display this help and exit

ok,已经正确安装了,下面开始配置。

四、配置使用

前面也说到了,bcache说白了就是为一块io速率不高的磁盘配置一个io速率较高的缓存层。那就是说可以分为两个部分,一部分是速率较低的设备,一部分是速率较高的部分,然后将这两部分建立一个映射关系,这样客户端在写数据的时候,IO数据先到达高速的缓存设备(和缓存策略有关系,这里我们先这里理解就可以了),从而提高客户端io速率。

创建后端低速设备

我们把/dev/sdb配置为后端低速设备(一般是HDD、SATA盘等)

[root@lab01 bcache-tools]# make-bcache -B /dev/sdb
UUID:           ac23506f-396d-4ac1-8949-d1e5c79ef207
Set UUID:       d40d7d90-d15f-4744-a56e-29d0ed5446f4
version:        1
block_size:     1
data_offset:        16

可以看到,在sdb(HDD)磁盘下,出现了bcache0节点,这个bcache0可以理解为就是/dev/sdb磁盘了

[root@lab01 bcache-tools]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─bcache0       252:0    0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom

现在,可以像普通磁盘一样,对bcache0进行格式化操作了。

[root@lab01 bcache-tools]# mkfs.xfs /dev/bcache0
meta-data=/dev/bcache0           isize=256    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=5242878, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@lab01 bcache-tools] mkdir /testbcache
[root@lab01 bcache-tools] mount /dev/bcache0 /testbcache
[root@lab01 bcache-tools]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G  8.6M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root   18G  1.6G   16G   9% /
/dev/sda1                497M  170M  328M  35% /boot
tmpfs                    394M     0  394M   0% /run/user/0
/dev/bcache0              20G   33M   20G   1% /testbcache

创建前端缓存磁盘(SSD)

我们把/dev/sdc配置为前端高速设备(一般是SSD)

[root@lab01 bcache-tools]#  make-bcache -C /dev/sdc
UUID:           9c5a00ff-4c32-4d0b-a6d2-ccd21e17e230
Set UUID:       8cae4fac-1312-4b0a-8bf7-2142dae5a334
version:        0
nbuckets:       40960
block_size:     1
bucket_size:        1024
nr_in_set:      1
nr_this_dev:        0
first_bucket:       1

建立映射关系

把我们创建好的后端低速设备和前端高速设备建立联系,这样高速设备才能为低速设备提供缓存作用。

首先需要获取该缓存盘(/dev/sdc)的cset.uuid,通过bcache-super-show命令查看:

[root@lab01 bcache-tools]# bcache-super-show /dev/sdc
sb.magic        ok
sb.first_sector     8 [match]
sb.csum         D2BA585E4E51AD5C [match]
sb.version      3 [cache device]

dev.label       (empty)
dev.uuid        9c5a00ff-4c32-4d0b-a6d2-ccd21e17e230
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.cache.first_sector  1024
dev.cache.cache_sectors 41942016
dev.cache.total_sectors 41943040
dev.cache.ordered   yes
dev.cache.discard   no
dev.cache.pos       0
dev.cache.replacement   0 [lru]

cset.uuid       8cae4fac-1312-4b0a-8bf7-2142dae5a334

上面的cset.uuid后面的8cae4fac-1312-4b0a-8bf7-2142dae5a334就是我们需要的cset uuid,因为我们要和bcache0设备(也就是/dev/sdb设备)建立联系,从而是该缓存设备(/dev/sdc),为bcache0设备提供缓存服务,所以执行下面命令

[root@lab01 bcache-tools]# echo "8cae4fac-1312-4b0a-8bf7-2142dae5a334" > /sys/block/bcache0/bcache/attach

操作完成后,可以通过lsblk命令查看结果

[root@lab01 bcache-tools]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─bcache0       252:0    0   20G  0 disk /testbcache
sdc               8:32   0   20G  0 disk 
└─bcache0       252:0    0   20G  0 disk /testbcache
sr0              11:0    1    4G  0 rom

此时可以看到,sdc下也出现了bcache0设备,即表示缓存添加成功。还记得我们之前将bcache0(也就是/dev/sdb)挂载到了/testbcache目录下,此时如果对/testbcache进行读写操作时,bcache缓存设备就会起缓存作用了。

快速配置方式

上面我们配置大概分了三个步骤:创建后端设备、创建前端缓存设备、建立他们之间的映射关系。那有没有一步到位的方式,当然有。

make-bcache -C /dev/sde -B /dev/vdb /dev/vdc /dev/sdd

上面这条命令,就自动的完成了那三个步骤,执行完看到的结果大概是这样的

...
sdb 254:16 0 50G 0 disk
└─bcache1 250:1 0 50G 0 disk
sdc 254:32 0 50G 0 disk
└─bcache0 250:0 0 50G 0 disk
sdd 254:48 0 50G 0 disk
└─bcache2 250:2 0 50G 0 disk
sde 254:64 0 10G 0 disk
├─bcache0 250:0 0 50G 0 disk
├─bcache1 250:1 0 50G 0 disk
└─bcache2 250:1 0 50G 0 disk
...

可以看到前端缓存设备sde同时为后端设备sdb、sdc、sdd提供缓存作用。

注:还可以在make-bcache的时候加入-w和-b参数,主要是提高缓存性能

-w block size 默认2K,一般需要block size = 后端设备的扇区大小。
-b bucket size,一般需要bucket size = 前端缓存设备的erase block size大小。*

修改缓存策略

查看缓存策略,可以看到默认的策略是writethrough,也就是直写模式

[root@lab01 bcache-tools]# cat /sys/block/bcache0/bcache/cache_mode 
[writethrough] writeback writearound none

修改缓存策略

[root@lab01 bcache-tools]# echo writeback > /sys/block/bcache0/bcache/cache_mode

然后查看是否生效

[root@lab01 bcache-tools]# cat /sys/block/bcache0/bcache/cache_mode 
writethrough [writeback] writearound none

注:就算机器重启之后缓存策略也不会失效的。

增加后端设备或前端缓存设备

有时候我们已经配置好了bcache,比如配置好了sde为sdb、sdc提供缓存作用,然后我现在想让sde为sdd也提供缓存作用。可以按照以下步骤进行:

  1. 配置后端设备:make-bcache -B /dev/sdd,假设生成bcache设备号为bcache2
  2. 建立映射关系:echo "8cae4fac-1312-4b0a-8bf7-2142dae5a334" > /sys/block/bcache2/bcache/attach

ok,完成。增加缓存设备也同理,先创建前端缓存设备,然后查看该缓存设备的cset uuid,然后根据cset uuid和后端设备建立映射关系即可。

恢复(还原到配置bcache之前)

我们经过上面的测试之后,也许我不需要bcache配置了,需要恢复到配置之前的环境,bcache肯定支持还原啦。

解除缓存盘和后端盘关系

要将缓存盘从当前的后端磁盘删除,只需将缓存盘的cset.uuid detach到bcache设备即可实现

[root@lab01 bcache-tools]# echo "8cae4fac-1312-4b0a-8bf7-2142dae5a334" > /sys/block/bcache0/bcache/detach

操作完成后,可以通过lsblk命令查看结果

[root@lab01 bcache-tools]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─bcache0       252:0    0   20G  0 disk /testbcache
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom

可以看到sdc下面已经没有bcache0了。

删除前端缓存盘

这里要注意,在注销缓存盘前,要确认该缓存设备没有被任何的后端设备使用,否则你懂的,会有数据丢失的风险。

通过缓存盘的cset.uuid,在/sys/fs/bcache/<cset.uuid>/unregister写入1,即可进行注销操作

[root@lab01 bcache-tools]# echo 1 >/sys/fs/bcache/8cae4fac-1312-4b0a-8bf7-2142dae5a334/unregister

然后ls查看/sys/fs/bcache/,如果没有8cae4fac-1312-4b0a-8bf7-2142dae5a334这个目录,就表示注销成功了。

删除后端盘

同理,要删除后端缓存盘,首先需要解除该后端盘和它使用的缓存盘之间的映射关系

[root@lab01 bcache-tools]# umount /testbcache/
[root@lab01 bcache-tools]# echo 1 > /sys/block/bcache0/bcache/stop
[root@lab01 bcache-tools]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 17.5G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom

可以看到,环境已经恢复到配置bcache之前的了。

五、总结

bcache作用就是使用ssd在hdd的上层做一层缓存,从而提高客户端的io速率。

配置过程分为三个步骤:

  1. 配置后端设备
  2. 配置前端缓存设备
  3. 建立前两者的映射关系

当然后端设备也可以是ceph集群提供的rbd块设备。比如在ceph的客户端创建rbd块,然后map到本地,然后用ssd+bcache对其做缓存加速。



作者:ypdai
链接:https://www.jianshu.com/p/e3704a87ac47
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用bcache为Ceph OSD加速,需要先满足以下条件: 1. 操作系统为Linux,并且内核版本大于等于3.10。 2. 已经安装了bcache模块。 3. 已经安装了Ceph。 接下来,我们可以按照以下步骤进行具体实践: 1. 创建一个SSD缓存设备。可以使用以下命令创建一个大小为100GB的bcache设备: ``` # make-bcache -B /dev/sdb ``` 其中,/dev/sdb为SSD设备的路径,可以根据实际情况进行修改。 2. 将SSD设备加入bcache设备中。可以使用以下命令将SSD设备加入bcache: ``` # echo /dev/sdb > /sys/fs/bcache/new_cache/set ``` 3. 创建一个HDD设备。可以使用以下命令创建一个大小为1TB的HDD设备: ``` # parted /dev/sdc mklabel gpt # parted /dev/sdc mkpart primary 0% 100% # mkfs.xfs /dev/sdc1 ``` 其中,/dev/sdc为HDD设备的路径,可以根据实际情况进行修改。 4. 将HDD设备加入bcache设备中。可以使用以下命令将HDD设备加入bcache: ``` # echo /dev/sdc1 > /sys/fs/bcache/new_cache/dev ``` 5. 创建一个Ceph OSD。可以使用以下命令创建一个Ceph OSD: ``` # ceph-osd -i <osd-id> --mkfs --mkkey ``` 其中,<osd-id>为OSD的编号,可以根据实际情况进行修改。 6. 将bcache设备作为Ceph OSD的存储设备。可以使用以下命令将bcache设备作为Ceph OSD的存储设备: ``` # ceph-osd -i <osd-id> --mkjournal --mkfs --mkkey --osd-data /dev/bcache0 --osd-journal /dev/bcache1 ``` 其中,/dev/bcache0为SSD设备的bcache设备路径,/dev/bcache1为HDD设备的bcache设备路径,可以根据实际情况进行修改。 7. 启动Ceph OSD。可以使用以下命令启动Ceph OSD: ``` # systemctl start ceph-osd@<osd-id> ``` 其中,<osd-id>为OSD的编号,可以根据实际情况进行修改。 8. 验证Ceph OSD的运行状态。可以使用以下命令验证Ceph OSD的运行状态: ``` # ceph -s ``` 如果Ceph OSD的状态正常,则表示bcache加速已经生效。 以上就是使用bcache为Ceph OSD加速的具体实践。需要注意的是,bcache加速只是一种优化方案,具体的加速效果取决于硬件配置和实际使用情况。在使用过程中,需要根据实际情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值