问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenStack存储缓存技术Bcache详解:三种缓存策略与实战操作

创作时间:
作者:
@小白创作中心

OpenStack存储缓存技术Bcache详解:三种缓存策略与实战操作

引用
CSDN
1.
https://m.blog.csdn.net/weixin_45645078/article/details/141904930

Bcache是Linux内核块设备层Cache,支持将一个或多个速度较快的磁盘设备(如SSD)作为读写速度相对较慢的磁盘设备的Cache。它使得固态硬盘作为硬盘驱动器的缓存,既解决了固态硬盘容量太小的问题,又解决了硬盘驱动器运行速度太慢的问题。

1. bcache 是什么

Bcache是Linux内核块设备层Cache,支持将一个或多个速度较快的磁盘设备(如SSD)作为读写速度相对较慢的磁盘设备的Cache.它使得固态硬盘作为硬盘驱动器的缓存,既解决了固态硬盘容量太⼩的问题,又解决了硬盘驱动器运行速度太慢的问题。

2. 三种缓存策略

bcache从3.10版本开始被集成进内核,⽀持3种缓存策略,分别是WritebackWritethroughWritearoud, 默认使⽤Writethrough,缓存策略可被动态修改。

  • Writethrough(直写策略): 数据写入时, 必须SSD和HDD盘都写入成功, 写入请求才算完成, 写入请求才返回. 因此对于写入, 该策略并未有性能提升. 适用于读多写少的场景, 可以保证数据的强一致性

  • Writeback(回写策略): 数据写入时, 只要SSD中写入成功, 写入请求就立即返回. SSD中的脏数据会由后台线程定时刷写到HDD盘中. 因此对于写入, 该策略会有明显的性能提升(除非到了SSD的性能瓶颈). 但是可能会造成数据丢失, 比较适用于底层有独立供电的RAID卡的服务器或者对数据一致性要求不是很高的场景

  • Writearound(绕写策略): 数据写入时, 绕过SSD, 直接写入到HDD盘中. 可以防止SSD因写I/O而填满, 导致以后不可重新读取. 缺点是: 当数据第一次读取, 由于写入时绕过了SSD, 因此会有SSD从HDD加载数据的操作

3. 两种角色

Cache device: (前端)缓存盘, 一般为SSD高速磁盘设备,对应的命令就是
make-bcache -C xxx

Backing device: 后端(数据)盘, 一般为HDD低速磁盘设备,对应的命令是
make-bcache -B xxx

4. 实战

(Bcache从Linux-3.10开始正式并入内核主线,默认centos的内核在3.10版本上bug比较多,建议升级到4.x内核,此环境中我们直接将内核本升级到4.14的版本。然后编译安装bcache)

4.1 检查是否能正常加载bcache模块

lsmod | grep bcache
modprobe bcache

此时如果出现
modprobe: FATAL: Module bcache not found.
不要慌,在3.10版本之前的内核中大概率会出现,因为此时内核没有包含该bcache模块。
请参照4.2.1编译安装新版内核。如果能正常加载则请跳过 4.2

4.2 编译内核

4.2.1 下载内核源码

mkdir -pv /root/kernel
cd /root/kernel 
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.9.102.tar.xz .
#该路径下有所有Linux内核源码哦 
https://mirrors.edge.kernel.org/pub/linux/kernel/

4.2.2 安装依赖包

yum -y install rpm-build m4 gcc xmlto asciidoc openssl-devel hmaccalc python-devel newt-devel perl-ExtUtils-Embed elfutils-devel zlib-devel binutils-devel bison audit-libs-devel java-devel numactl-devel pciutils-devel ncurses-devel createrepo genisoimage net-tools git bc

4.2.3 解压包

xz -d linux-4.9.102.tar.xz
tar -xvf linux-4.9.102.tar

4.2.4 配置模块

cp /boot/config-3.10.0-1160.71.1.el7.x86_64  /root/kernel/linux-4.9.102/.config
make menuconfig

修改Device Driver->Mutiple device driver support让Linux编译时生成bcache模块

4.2.5 编译(笔记本性能一般的建议晚上放后台执行,本人笔记本编译耗时7小时才编译完成。)

make -j 4 # cpu 个数 

4.2.6 生成默认的内核配置

make -j 4 moduels
make -j 4 modules_install
make install
cat /boot/grub2/grub.cfg 
grub2-set-default 'CentOS Linux (4.9.103) 7 (Core)'
reboot 
#重启就可以看见新内核的选项 ,当然你也可以编辑grub2.cfg 文件删除之前的旧的内核菜单。

每次都需要编译很麻烦,有没有不编译的方法呢?

yum 一键无脑安装

#默认最新版本的kernel都可以直接yum install 安装,
http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/
#1 下载
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.274-1.el7.elrepo.x86_64.rpm
#2 安装
yum install kernel-lt-5.4.274-1.el7.elrepo.x86_64.rpm

无脑安装是挺好的,可是只有最新的内核才能yum安装,有没有可能我们自己制作一个内核的rpm包来安装。

内核源码直接就是支持编译成rpm包的,只需要两步既可

cd linux-4.9.102
make rpm && make rpm-pkg

编译完成之后显示如下图所示(注意此时的编译过程也是依赖编译环境的性能的,如果性能不好,将会十分耗时)

4.3 编译安装bcche

#1 克隆源码
git clone https://evilpiepirate.org/git/bcache-tools.git
#2 安装依赖包
cd bcache-tools/
yum install libblkid-deve
#3 编译成二进制文件
make && make install

编译完成后生成二进制文件如下

生成命令快捷捷

cp make-bcache /usr/sbin/
![](https://wy-static.wenxiaobai.com/chat-rag-image/4451357779032239161)
cp bcache-super-show /usr/bin/

4.4 加载bcache 模块

modprobe bcache
lsmod |grep bcache
#开机自动加载bcache 模块
echo bcache >  /etc/modules-load.d/bcache.conf
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号