3

每天5分钟复习OpenStack(十三)存储缓存技术Bcache - ALEX_li88

 1 week ago
source link: https://www.cnblogs.com/alex0815/p/18156525
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘。这样的好处是比较经济实惠。另一种则是全部采用 SSD 或NVME磁盘,其性能更好,但是其价格比较昂贵。在第一种形态中,我们能像中间件那样加上一层缓存层,从而实现给数据盘加速的功能吗?Bcache就是这样一种缓存技术。

3294215-20240424222719257-1787259143.png

1. bcache 是什么

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

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

(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模块。
3294215-20240424222719208-584068743.gif

请参照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/
3294215-20240424222719127-248425935.png

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模块

3294215-20240424222719642-1807846087.png

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

3294215-20240424222719066-372551313.gif
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 一键无脑安装

3294215-20240424222719137-994459658.gif
#默认最新版本的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

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

3294215-20240424222719622-443798044.png

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

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

3294215-20240424222719331-2016568309.png

生成命令快捷捷

cp make-bcache /usr/sbin/
cp bcache-super-show /usr/bin/

4.4 加载bcache 模块

modprobe bcache
lsmod |grep bcache

#开机自动加载bcache 模块
echo bcache >  /etc/modules-load.d/bcache.conf

5 写在最后

最近有小伙伴私信我,建议我控制下篇幅的长度,因为要保障读者在5分钟左右读完的篇幅,因此接下来的文章中,本人将尽量控制文章的字数。但是对于Bcache 这种实践比较多的文章,强烈建议读者还是自己亲自实践,有些知识看上去以为自己明白了,实际实操时会有一些额外的心得和收获。

下一章我们将Ceph和Bcache 结合,看下生产环境中是怎么使用的?

3294215-20240424222719475-2118616747.jpg

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK