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

openstack,bcache · 浏览次数 : 0

小编点评

**Bcache 缓存技术** Bcache 是一种 Linux 内核块设备层 Cache,可以将多个速度较快的磁盘设备(如 SSD)作为读写速度相对较慢的磁盘设备的 Cache。它可以解决固态硬盘容量太小程序和硬盘驱动器运行速度太慢的问题。 **三种缓存策略** * **Writethrough (直写策略):**当数据写入时,必须 SSD 和 HDD盘都写入成功,写入请求才算完成。适用于读多写少的场景。 * **Writeback (回写策略):**当数据写入时,只要 SSD 中写入成功,写入请求就立即返回。 * **Writearound (绕写策略):**当数据写入时,绕过 SSD,直接写入到 HDD盘中。适用于当数据第一次读取时,由于写入时绕过了 SSD,会有 SSD 从 HDD 加载数据的操作。 **安装 Bcache 模块** 1. 下载内核源代码 2. 编译内核 3. 配置内核 4. 安装内核 **启动 Bcache 模块** 1. 修改 `/etc/modules-load.d/bcache.conf5` 文件中的 `allowboot` 设置 2. 重新启动系统 **使用 Bcache 缓存** 1. 创建一个 Bcache 目录 2. 将 SSD 或 NVMe 磁盘挂载到 Bcache 目录 3. 使用 Bcache 命令进行数据操作 **注意事项** * Bcache 需要内核支持才可用。 * 不同的 Bcache 策略可能具有不同的性能影响。 * 使用 Bcache 可能会导致 SSD 从 HDD 加载数据的额外操作。

正文

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

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/
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 结合,看下生产环境中是怎么使用的?

与每天5分钟复习OpenStack(十三)存储缓存技术Bcache相似的内容:

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

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

[转帖]20191022-从Jenkins NativeOOM到Java8内存

我把老掉牙的Jenkins升级了,它跑了几天好好的;后来我有一个python脚本使用JenkinsAPI 0.3.9每隔2.5分钟发送约300余get请求,结果过了3天,它就挂了;当我开两个脚本时,40.5小时就挂了。(可以通过搜索Jenkins日志/var/log/jenkins/* 中字符Jen

Mybatis的parameterType造成线程阻塞问题分析

最近在新发布某个项目上线时,每次重启都会收到机器的 CPU 使用率告警,查看对应监控,持续时长达 5 分钟,对于服务重启有很大风险。而该项目有非常多 Consumer 消费,服务启动后会有大量线程去拉取消息处理逻辑,通过多次 Jstack 输出线程快照发现有很多 BLOCKED 状态线程,此文主要记录分析 BLOCKED 原因。

【matplotlib 实战】--直方图

直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。 一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。构建直方图时,首先首先就是对数据划分区间,通俗的说即是划定有几根柱子(比如,1980年~2020年的数据,每5年划分一个区间的话,共8个区间)。接着,对

Axure 绘制表格添加删除

1、添加按钮:白底黑框,80X30,文本和命名均为“添加”; 2、数据表格(表头):1行5列,灰底黑框的表格作为表头,从左到右每个格子的文字分别为:姓名、性别、年龄、电话和操作: 3、数据表格(表身):一个中继器,中继器里面是一个1行5列,白底黑框的表格,从左到右5个格子分别命名为“姓名”、“性别”

API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan

摘要:华为云ATGen现开放对外邀测,欢迎预约。 本文分享自华为云社区《API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan》,作者:华为云头条 。 众所周知,软件服务及组件之间的交互主要依赖大量的API接口。 以华为云300多个商用云服务为例,平均每个服务含5

C#/.NET/.NET Core优秀项目和框架2024年5月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。

华为云大咖说:开发者应用AI大模型的“道、法、术”

本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技术革命,建议就近上车。 迭代:眼下的AI大模型应用都还只是过程稿,仍在快速迭代,切忌刻舟求剑。 预判:AI大模

操作系统开发:启用内存分页机制

目前我们已进入保护模式,但依然会受到限制,虽然地址空间达到了4GB,但此空间是包括操作系统共享的4GB空间,我们把段基址+段内偏移地址称为线性地址,线性地址是唯一的,只属于某一个进程。在我们机器上即使只有512MB的内存,每个进程自己的内存空间也是4GB,这是指的虚拟内存空间。一直以来我们都是在内存

文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题

五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为 O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。 文心一言: 在 Go 语