一、前言
源码地址:open-cas-linux 用户指南:guide_introduction
本文主要介绍OpenCas相关配置说明
1、概述
OpenCas,即Open Cache Acceleration Software(开放缓存加速软件),是Intel搭配自家硬件推出的一个开源缓存加速软件,可运行在Linux和Windows操作系统上。
OpenCas作为内核模块安装到Linux操作系统内,将高性能缓存盘(cache device)和大容量存储盘(core device)绑定生成新的设备分区,当对新的设备分区读写时,可利用高性能缓存盘提高读写性能,降低读写时延。
2、配置要求
OpenCas配置要求如下:
组件 | 要求 |
内存 | OpenCas所需内存大小 = 1GiB + (2% x 4KiB/(cache line size) + 0.05%) x (cache device capacity)如,使用默认的cache line size大小(4K),所需内存大小 = 1GiB + 2.05% x 缓存盘容量大小 |
CPU | OpenCas占用较少的CPU资源(大多数情况下少于10%)请确保OpenCas有足够的CPU资源以达到最佳运行状态 |
软件 | 安装OpenCas之前需安装以下软件:- sed- make- gcc- kernel-devel- kernel-headers- python3- lsblk- argparse (python module)- elfutils-libelf-devel |
cache device | 通常为SSD类型的高性能缓存盘,用于前端数据缓存使用cache device逻辑块大小(logical block size)必须小于或等于core device逻辑块大小 |
core device | 通常为HDD类型的大容量存储盘,用于后端数据存储使用core device逻辑块大小(logical block size)必须大于或等于512 bytes |
3、软件架构
3.1、缓存模式
OpenCas支持以下几种缓存模式,可根据实际使用场景需求选择性配置
3.1.1、write-through(直写)
- 相关说明
OpenCas默认缓存模式,在直写(wt)模式下,缓存引擎将数据写入到前端缓存盘,并同时将相同的数据写入到后端数据盘,确保前端缓存盘和后端数据盘数据始终同步,两者均写入成功之后,才向应用确认写入已完成,因此不能加速写操作 - 应用场景
此模式下只加速读操作,适合读密集型应用场景
3.1.2、write-back(回写)
- 相关说明
在回写(wb)模式下,缓存引擎先将数据写入到前端缓存盘,并向应用确认写入已完成,之后周期性地将缓存数据下刷到后端数据盘
注:如果前端缓存盘在数据下刷到后端数据盘出现故障,则存在数据丢失风险 - 应用场景
此模式下会加速读和写操作,适合读写密集型应用场景
3.1.3、write-only(只写)
- 相关说明
在只写(wo)模式下,缓存引擎首先将数据写入到前端缓存盘,并向应用确认写入已完成,之后周期性地将缓存数据下刷到后端数据盘,新的读操作将绕过缓存,直接从后端数据盘读取,只有当数据写入到前端缓存盘尚未下刷时,会从前端缓存盘读取数据
注:如果前端缓存盘在数据下刷到后端数据盘出现故障,则存在数据丢失风险 - 应用场景
此模式下只加速写操作,适合写密集型应用场景
3.1.4、write-around(绕写)
- 相关说明
在绕写(wa)模式下,当前端缓存盘存在对应数据块(即数据块已经被读缓存过,从后端数据盘复制到前端缓存盘),写操作会同时更新到前端缓存盘和后端数据盘,类似直写模式,保证前端缓存盘的数据和后端数据盘保持一致,其他情况下写操作直接写入到后端数据盘
注:与write-through模式相比,write-around进一步优化了cache,避免"cache污染",当确认要写入的数据不会被经常读取时(即前端缓存盘不存在对应数据块),数据不会写入到前端缓存盘,而是直接写入到后端数据盘 - 应用场景
此模式只会加速读操作,适合读密集型应用场景
3.1.5、pass-through(直通模式)
- 相关说明
在直通(pt)模式下,所有读写操作都不会缓存,缓存引擎直接对后端数据盘进行读写操作
注:如果用户不想缓存任何工作负载,可以使用直通模式 - 应用场景
此模式下不会加速读和写操作,适合一些维护操作场景
4、配置建议
二、安装部署
1、软件安装
1.1、源码编译安装
安装前置依赖包
yum install elfutils-libelf-devel -y
下载OpenCas稳定版本源码,执行编译安装操作
wget https://github.com/Open-CAS/open-cas-linux/releases/download/v21.6.3/open-cas-linux-21.06.3.0551.release.zip
unzip open-cas-linux-21.06.3.0551.release.zip
cd open-cas-linux-21.06.3.0551.release
./configure
make
make install
安装完成后,自动加载cas_disk
和cas_cache
内核模块到操作系统内,同时安装casadm命令行工具
[root@node149 ~]# lsmod | grep cas
cas_cache 466944 0
cas_disk 28672 1 cas_cache
[root@node149 ~]#
[root@node149 ~]# casadm -V
╔═════════════════════════╤══════════════════════╗
║ Name │ Version ║
╠═════════════════════════╪══════════════════════╣
║ CAS Cache Kernel Module │ 21.06.3.0551.release ║
║ CAS Disk Kernel Module │ 21.06.3.0551.release ║
║ CAS CLI Utility │ 21.06.3.0551.release ║
╚═════════════════════════╧══════════════════════╝
1.2、离线包制作
- 制作rpm包
安装构建rpm包相关依赖
yum install rpm-build
下载OpenCas稳定版本源码,执行make rpm
编译rpm包,生成rpm包存放于./packages
目录下
wget https://github.com/Open-CAS/open-cas-linux/releases/download/v21.6.3/open-cas-linux-21.06.3.0551.release.zip
unzip open-cas-linux-21.06.3.0551.release.zip
cd open-cas-linux-21.06.3.0551.release
make rpm
- 制作deb包
安装构建deb包相关依赖
apt install debhelper devscripts dkms
下载OpenCas稳定版本源码,执行make deb
编译deb包,生成deb包存放于./packages
目录下
wget https://github.com/Open-CAS/open-cas-linux/releases/download/v21.6.3/open-cas-linux-21.06.3.0551.release.zip
unzip open-cas-linux-21.06.3.0551.release.zip
cd open-cas-linux-21.06.3.0551.release
make deb
2、软件部署
OpenCas配置缓存加速流程示意如下:
1、使用高性能缓存盘(cache device)创建缓存实例
2、将大容量存储盘(core device)绑定到对应缓存实例上,生成新的设备路径(如/dev/cas{cache-id}-{core-id}),之后对新的设备路径读写操作即可
2.1、部署方式一
适用场景:尚未配置ceph集群,使用OpenCas将SSD和HDD绑定成一个新的cas设备,使用cas设备部署osd
示例节点存在一个ssd和两个hdd,将ssd分两个分区,分别绑定到两个hdd上,生成两个新设备,之后使用新设备对外提供读写访问
num | cache device | core device | cas device |
1 | /dev/sdb1 | /dev/sdc1 | /dev/cas1-1 |
2 | /dev/sdb2 | /dev/sdd1 | /dev/cas2-1 |
- 使用高性能缓存盘创建缓存实例
使用两个ssd分区分别创建两个缓存实例(id分别为1和2),使用回写模式
[root@node191 ~]# casadm -S -i 1 -d /dev/disk/by-id/wwn-0x6000c291cbc54384084d0f40e589bcf8-part1 -c wb -f
Successfully added cache instance 1
[root@node191 ~]# casadm -S -i 2 -d /dev/disk/by-id/wwn-0x6000c291cbc54384084d0f40e589bcf8-part2 -c wb -f
Successfully added cache instance 2
- 将大容量存储盘绑定到缓存实例上
将两个hdd分别绑定到两个缓存实例上,生成两个cas设备,使用cas设备部署osd
[root@node191 ~]# casadm -A -i 1 -d /dev/disk/by-id/wwn-0x6000c296b71d67f9808e004eebef0e78-part1
Successfully added core 1 to cache instance 1
[root@node191 ~]# casadm -A -i 2 -d /dev/disk/by-id/wwn-0x6000c29809adb3c5ed5266856903e7a8-part1
Successfully added core 1 to cache instance 2
3、常用操作
可通过
casadm -H
或man casadm
获得casadm相关操作说明术语说明:
cache instance:缓存实例(通常为高性能、小容量的SSD盘,用于读写性能加速)
core device:核心设备(通常为低性能、大容量的HDD盘,用于数据持久化存储)
- 启动缓存实例
casadm -S -i {cache-id} -d /dev/disk/by-id/{cache-path} -c {cache-mode}
注:cache-mode可选模式为wt、wb、wa、wo、pt - 将核心设备绑定到缓存实例
casadm -A -i {cache-id} -d /dev/disk/by-id/{core-path}
- 列出所有缓存实例和核心设备信息
casadm -L
- 查看指定缓存实例状态信息
casadm -P -i {cache-id}
- 停止缓存实例
casadm -T -i {cache-id}
- 切换缓存模式
casadm -Q -c {cache-mode} -i {cache-id}
注:OpenCas可以随时在不同缓存模式之间切换,无需重启系统或者OpenCas
如果需要从wb模式切换到其他模式,需要先从缓存实例下刷脏数据至核心设备,下刷完成后才可切换到其他缓存模式 - 从缓存实例下刷脏数据至核心设备
casadm -F -i {cache-id}