首页 > 其他分享 >每天5分钟复习OpenStack(十四)Bcache技术<2>

每天5分钟复习OpenStack(十四)Bcache技术<2>

时间:2024-07-24 23:39:34浏览次数:14  
标签:缓存 复习 -- cache dev OpenStack Bcache bcache uuid

Bcache是Linux内核块设备层Cache,支持将一个或多个快速设备(如SSD NVME)作为一个或多个慢速设备(SATA HDD)的缓存设备.

阅读本文章你将学会:

  1. sgdisk 分区工具使用。
  2. Bcache添加、删除 缓存盘和数据盘。
  3. Bcache状态的查询。
  4. Bcache的缓存替换策略。
  5. Bcache的缓存模式。

部署环境说明

系统版本 centos7.9 2009
内核版本 3.10.0-1160.114.2.el7.x86_64
系统盘 sda
缓存盘 sde
数据盘 sdb、sdc、sdd
IP地址 192.168.1.100

整个部署过程我们将按如下步骤执行:

  1. 安装新版内核
  2. Bcache 配置和使用
  3. sgdisk 分区工具使用
  4. ceph环境搭建

1 安装新版内核

#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

#3 查看内核菜单 
grep -i menuentry /boot/grub2/grub.cfg   |awk  '/centos/{print $1,$2,$3,$4}'
menuentry 'CentOS Linux (5.4.274-1.el7.elrepo.x86_64)
menuentry 'CentOS Linux (3.10.0-1160.71.1.el7.x86_64)
menuentry 'CentOS Linux (0-rescue-45b1851918a94e34bf77d7b2a0654430)

安装新内核之后,将会增加一行新菜单,菜单的默认启动是新版内核5.4菜单栏,如果想修改为旧版内核怎么办?

grub2-set-default 1 命令将帮助你自定义默认启动菜单。<注意>此时菜单是从0开始计数。

#5 重启
reboot 

#6 卸载旧版内核工具
rpm -e --nodeps  `rpm -qa |grep kernel |grep 3.10`

#7 检查
rpm -qa |grep kernel 
kernel-lt-5.4.274-1.el7.elrepo.x86_64

2 Bcache

2.1 编译安装工具包

#1 下载工具包
git clone https://evilpiepirate.org/git/bcache-tools.git

#最新版本下载地址
https://git.kernel.org/pub/scm/linux/kernel/git/colyli/bcache-tools.git/

#2 安装依赖包
cd bcache-tools/
yum install libblkid-devel gcc

#3 编译成二进制文件
make && make install

#4 设置命令快捷键 bcache bcache-super-show
ln -sv /root/bcache-tools/make-bcache /usr/bin/bcache
ln -sv /root/bcache-tools/bcache-super-show /usr/bin/bcache-super-show

2.2 内核加载模块

#1 加载bcache 模块
modprobe bcache

#2 查看bcache 模块
lsmod |grep bcache

#3 设置模块开机自启动
cat > /etc/sysconfig/modules/bcache.modules << EOF
#!/bin/sh
modprobe bcache > /dev/null 1>&1
EOF

#4 加上执行权限
chmod 755 /etc/sysconfig/modules/bcache.modules

2.3 Bcache 配置

2.3.1 bcache 命令参数

# bcache 命令参数说明
# -C, --cache             Format a cache device #格式化缓存盘,
# -B, --bdev              Format a backing device #格式化 后端盘
--cache_replacement_policy=(lru|fifo) 
--writeback         enable writeback  #指定缓存模式为 writeback 

现在我们一条命令设置 缓存盘同时设置数据盘
bcache -C /dev/sde1 -B /dev/sdb
lsblk 查看对应关系


查看数据盘

#1 查看数据盘 sdb 
bcache-super-show /dev/sdb
sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 E4399F0A8400142 [match]
sb.version              1 [backing device] #说明是后端设备 也就是数据盘

dev.label               (empty)
dev.uuid                94474839-81c7-4360-8739-875598992934 #自身的uuid 
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.data.first_sector   16
dev.data.cache_mode     0 [writethrough]  #缓存模式 
dev.data.cache_state    1 [clean]
cset.uuid               cefe99b4-845e-4d66-8eb9-360ebdb93a7d  #后端设备对应的 缓存集合id 

查看缓存盘

#2 查看缓存盘 sde1 
bcache-super-show /dev/sde1
sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 43D6BBB18C00DB9B [match]
sb.version              3 [cache device] #缓存设备 

dev.label               (empty)
dev.uuid                fc2fce6e-bfc7-408e-b433-2eac61d5079f #自身uuid 
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               cefe99b4-845e-4d66-8eb9-360ebdb93a7d #缓存设备所属的缓存集合id 与上面cset.uuid 一致。

在上面的参数中有选项指定 --cache_replacement_policy=(lru|fifo)

缓存替换策略:

bcache 中,缓存替换策略决定了缓存中的哪些数据块会被替换。当新的数据块需要被缓存但缓存空间不足时,缓存替换策略会决定哪一个旧的数据块会被移除缓存以腾出空间。bcache 支持两种主要的缓存替换策略:lru(Least Recently Used,最近最少使用)和 fifo(First In First Out,先进先出)。

LRU: 缓存替换策略基于一个简单的原则:最近最少使用的数据块最可能在未来一段时间内不再被访问。因此,当缓存空间不足时,LRU 策略会移除最近最少使用的数据块。

优点:

  • 能够有效利用缓存,适应常见的访问模式,例如局部性原理
  • 对于重复访问频繁的数据,LRU 可以将其保存在缓存中,减少访问延迟。

缺点

  • 在一些访问模式下(如循环访问大数据集),LRU 可能表现不佳。
  • 需要维护数据块的访问历史记录,可能导致较高的开销。

FIFO: 缓存替换策略基于时间顺序:最早进入缓存的数据块会最先被移出。当缓存空间不足时,FIFO 策略会移除最早被缓存的数据块。

优点:

  • FIFO` 实现简单,不需要维护复杂的访问历史记录。
  • 在某些简单的访问模式下,FIFO 可能表现良好。

缺点

  • FIFO 无法适应复杂的访问模式,例如热点数据。
  • 可能导致缓存命中率低,因为它不考虑数据的访问频率。

生产环境我们怎么选了?

  • 如果系统的访问模式比较复杂且有较强的局部性原理(即某些数据块被频繁访问),建议使用 LRU 策略,因为它能更有效地利用缓存。(数据库使用场景,电子商务站点数据等场景)
  • 如果系统的访问模式相对简单且不容易预测,或者您需要一个实现简单、开销较低的策略,可以考虑使用 FIFO 策略。((监控、日志系统等结构化数据场景)

访问模式总结

Wirteback : 写入数据时,写入缓存设备就返回成功,缓存设备由后台程序自动刷新到后端磁盘中。读/写都能使用缓存。

Wirtethrough: 写入数据时,缓存设备和后端同时写入成功才返回成功。仅能使用读缓存。

Writearound: 写入数据时,直接绕过缓存设备,直接写入后端磁盘,防止SSD 因写IO满而无法缓存读请求。 仅能使用读缓存。

2.3.2 bcahe 使用

当设置了缓存盘和后端盘之后bcache 就可以像使用普通盘一样使用bcache ,此时我们格式化,并挂载,并写入文件。

 #1 创建文件系统
 mkfs.xfs /dev/bcache0 
 #2 挂载
 mount /dev/bcache0  /data/
 #3 写文件验证
 dd if=/dev/zero of=/data/f1 bs=1M count=100

bcache 的状态:

  • no cache: 该backing device没有attach任何caching device
  • clean: 缓存集是干净的,没有缓存脏数据,此时模式一般是Writethrough
  • dirty:缓存集的一部分,存在缓存的脏数据。此时的模式一般是 Writeback
  • inconsistent: 遇到问题,后台设备与缓存设备不同步

开始默认的模式是Writethrough ,此时状态是clean

改变模式为writeback

写入数据之后

根据上面的图片可知 echo <模式 > /sys/block/bcache0/bcache/cache_mode 则可以查看和改变模式。同理
echo <缓存集> /sys/block/bcache0/bcache/detach 则可以剥离设备

2.3.2.1 删除数据盘完整操作

#1 获取后端设备的缓存集uuid 
bcache-super-show /dev/sdb |grep cset.uuid #获取缓存集uuid 

#2 剥离设备
echo cefe99b4-845e-4d66-8eb9-360ebdb93a7d > /sys/block/bcache0/bcache/detach  

[root@192-168-48-128 mnt]# bcache-super-show /dev/sdb |grep cset.uuid
cset.uuid               cefe99b4-845e-4d66-8eb9-360ebdb93a7d

#3 停止设备
echo  1 >  /sys/block/bcache0/bcache/stop 

#4 格式化数据
dd if=/dev/zero of=/dev/sdb bs=1M count=1 conv=sync
wipefs -af /dev/sdb

【注意】上述只是删除了后端数据盘的数据,此时缓存设备还没有删除。

2.3.2.2 删除缓存设备完整操作

#1 获取缓存设备的uuid 
 bcache-super-show /dev/sde1 |awk '/cset.uuid/{print $2}'
 cefe99b4-845e-4d66-8eb9-360ebdb93a7d
 
#2 剥离缓存设备
echo 1 > /sys/fs/bcache/cefe99b4-845e-4d66-8eb9-360ebdb93a7d/unregister 

#3 格式化数据
dd if=/dev/zero of=/dev/sde1 bs=1M count=1 conv=sync
wipefs -af /dev/sde1

2.3.2.3 添加设备

此时我们将缓存设备的第4个分区sde4作为bcache 的缓存设备,而将sdb sdc sdd 三块盘做为数据盘来使用,他们分别对应bcache0 bcache1 bcache2 。

#1 添加缓存设备同时添加后端磁盘
bcache -C /dev/sde4 -B /dev/sdb --writeback --wipe-bcache

#2 只添加后端磁盘
bcache -B /dev/sdc --writeback --wipe-bcache
bcache -B /dev/sdd --writeback --wipe-bcache

#3 注册设备,使用其显示块设备,(lsblk 如果已经显示为bcache1 bcache2,可以不用执行)
echo /dev/sdb > /sys/fs/bcache/register
echo /dev/sdc > /sys/fs/bcache/register
echo /dev/sdd > /sys/fs/bcache/register

#4 查看缓存设备对应的缓存集合
#查看缓存设备的集合
[root@mon01 ~]# bcache-super-show /dev/sde4
sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 EB598382C6FDDDE2 [match]
sb.version              3 [cache device]

dev.label               (empty)
dev.uuid                9bb977e9-507d-4e44-80f6-5af00bdc4a5b
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.cache.first_sector  1024
dev.cache.cache_sectors 83881984
dev.cache.total_sectors 83883008
dev.cache.ordered       yes
dev.cache.discard       no
dev.cache.pos           0
dev.cache.replacement   0 [lru]

cset.uuid               b41fd054-a5f0-48d9-bb5d-4ed570c0ec47


#bcache0 已经附加到缓存集中,此时只需要附加 bcache1 和bcache2 既可
#将缓存设备的缓存集合 发送到 /sys/block/bcache1/bcache/attach
echo b41fd054-a5f0-48d9-bb5d-4ed570c0ec47  > /sys/block/bcache1/bcache/attach
echo b41fd054-a5f0-48d9-bb5d-4ed570c0ec47  > /sys/block/bcache2/bcache/attach

2.3.2.4 检查状态

bcache-super-show /dev/sdb
bcache-super-show /dev/sdc
bcache-super-show /dev/sdd

2.4 分区工具

2.4 缓存盘分区

#1 安装gdisk工具
yum install gdisk 

#2 使用sgdisk 工具来分区

sgdisk工具参数说明

sgdisk --new=1:0:+20GB \
       --change-name=1:'ceph journal' \
       --partition-guid=1:$(uuidgen) \
       --typecode=1:45b0969e-9b03-4f30-b4c6-b4b80ceff106 \
       --mbrtogpt \
       -- /dev/sde

-n, --new=partnum:start:end  #创建一个新的分区 指定分区编号partnum ,star end 指定起始位置 此时是从0开始+20G
-c, --change-name=partnum:name #改变分区的名字 修改分区1 的名字为 ceph journal 
-u, --partition-guid=partnum:guid #设置分区的guid的编号,此时为随机生成uuid,由uuidgen 命令自动生成。
-t, --typecode=partnum:{hexcode|GUID} # 修改指定分区号的 类型代码 此时45b0969e-9b03-4f30-b4c6-b4b80ceff106 在这里表示 Ceph 的 Journal 分区类型。
也可以表示ROCKDB 和WAL类型
-g, --mbrtogpt 转换分区格式由 MBR 变成 GPT  

缓存盘分区:
此时我们将缓存盘sd4 划分了4个分区,其中sde1 sde2 sde3 三个分区分别对应接下来要部署的ceph 的三个osd 磁盘的 block.db 。而sde4 作为bcache 缓存设备的缓存盘来使用。

#1 设置变量
typecode=45b0969e-9b03-4f30-b4c6-b4b80ceff106

#2 创建第一个分区
sgdisk --new=1:0:+20GB --change-name=1:'DB and WAL' --partition-guid=1:$(uuidgen) --typecode=1:$typecode --mbrtogpt  -- /dev/sde

#3 创建第二个分区
sgdisk --new=2:0:+20GB --change-name=2:'DB and WAL' --partition-guid=2:$(uuidgen) --typecode=2:$typecode --mbrtogpt  -- /dev/sde

#4 创建第三个分区
sgdisk --new=3:0:+20GB --change-name=3:'DB and WAL' --partition-guid=3:$(uuidgen) --typecode=3:$typecode --mbrtogpt  -- /dev/sde

#最后一个分区使用使用剩余所有的磁盘
sgdisk --new=4:0: --change-name=4:'bcache' --partition-guid=4:$(uuidgen) --typecode=4:$typecode --mbrtogpt  -- /dev/sde

写在最后:

如果执行到这里,说明Bcache的所有的操作已经完成,接下来只需要部署一个ceph 集群,然后再将Bcache 作为ceph 存储的数据盘即可完成一个在生产环境中使用的最小化的Ceph模型。

这里我们提起剧透下部署完成后的截图。

如果有兴趣可以自行思索完成,如果没有完成也不要气馁,下一章将介绍完整的部署流程。

标签:缓存,复习,--,cache,dev,OpenStack,Bcache,bcache,uuid
From: https://www.cnblogs.com/alex0815/p/18322036

相关文章

  • 刷算法中途复习基础知识
    1.数据类型数据类型分为值传递和引用传递值传递:八大数据类型  Byteshortint long floatdouble charboolean引用传递:类接口 数组其中字符串和枚举类型比较特殊,但是都是基于引用数据类型来实现的.基本数据类型只能存自己类型的值,没有其他额外的功能。引用......
  • 代码随想录算法训练营第17天 | 复习二叉搜索树
    2024年7月19日题654.最大二叉树熟练运用递归即可classSolution{publicTreeNodeconstructMaximumBinaryTree(int[]nums){intmaxNum=Integer.MIN_VALUE;intflag=-1;for(inti=0;i<nums.length;i++){if(nums[i]>maxNum){......
  • 计算机网络技术期末复习
    一.填空在采用电信号表达数据的系统中,数据有数字数据和模拟数据两种。域名系统DNS是一个分布式数据库系统。TCP/IP的网络层最重要的协议是IP互连网协议,它可将多个网络连成一个互连网。 4.在TCP/IP层次模型的网络层中包括的协议主要有ARP、RARP、ICMP、IP。校......
  • 算法设计与数据结构系列【超详细、超全面、小白可入,期末复习】持续更新中...
    算法设计与数据结构系列【超详细、超全面、小白可入,期末复习】持续更新中…24.07.21代码采用语言:Java1、位运算(BitwiseOperation)常见操作:与(&)、或(I)、非(~)、异或(^)移位运算:>>和<<分别为左移和右移>>>运算符:用0填充高位,>>用符号位填充高位,没有<<<运算符真值表ab~a~b......
  • Packer构建openStack镜像
    目录使用Packer自动化构建镜像使用Packer自动化构建镜像openstack插件安装:OpenStack|Integrations|Packer|HashiCorpDeveloperopenstack插件用法示例:OpenStackBuilder|Integrations|Packer|HashiCorpDeveloper安装openstack插件packerpluginsinstallgit......
  • VUE复习
    VUE2vue快速上手vue概念Vue是一套**构建用户界面**的渐进式框架,主要用于构建用户界面和前端交互举个例子:想象一下,你正在搭建一个房子,Vue就像是一套工具箱,里面包含了各种工具,比如锤子、锯子、螺丝刀等。这些工具可以让你更快、更轻松地完成房子的建造。创建vue实......
  • Linux复习02
    一、什么是操作系统操作系统是一款做软硬件管理的软件! 一个好的操作系统,衡量的指标是:稳定、快、安全操作系统的核心工作:通过对下管理好软硬件资源的手段,达到对上提供良好的(稳定,快速,安全)操作/使用环境操作系统可以理解为总经理;设备驱动相当于组长,硬件相当于员工;而应用......
  • 基于SpringBoot+Vue+uniapp的公考客观题复习系统的详细设计和实现(源码+lw+部署文档+
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • JavaScript复习记录(6)— 对闭包的理解,闭包使用场景
    闭包(Closure)指的是一个函数可以访问其外部作用域(即使这个函数是在外部作用域之外执行的)。换句话说,闭包是函数和声明该函数的词法环境的组合。闭包的形成闭包在以下情况下形成:当一个内部函数被保存到外部后,即使外部函数已经执行完毕,内部函数仍然可以访问外部函数中的变量。......
  • python 爬虫技术 第02节 基础复习
    Python基础复习Python是一种高级、通用、解释型的编程语言,以其简洁的语法和强大的功能在数据科学、Web开发、自动化脚本编写、机器学习等领域广泛使用。下面是一些Python基础概念的复习:1.数据类型Python支持多种内置数据类型,包括:数字(int,float,complex)字符串......