一、前言

源码地址: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_diskcas_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 -Hman 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}