67.10. 启用缓存来提高逻辑卷性能


您可以在 LVM 逻辑卷中添加缓存以提高性能。LVM 然后使用快速设备(如 SSD)将 I/O 操作缓存到逻辑卷中。

下面的过程会从快速设备创建一个特殊的 LV,并将这个特殊 LV 附加到原始 LV,以便提高性能。

67.10.1. LVM 中的缓存方法

LVM 提供以下缓存类型。每种模式适合逻辑卷中的不同类型的 I/O 模式。

dm-cache

这个方法可通过在更快的卷上缓存数据来加快频繁使用数据的访问速度。这个方法会缓存读写操作。

dm-cache 方法创建类型为 缓存 的逻辑卷。

dm-writecache

这个方法只缓存写操作。使用快速卷进行写入操作,然后将其迁移到后台较慢的磁盘中。快速卷通常是一个 SSD 或持久内存(PMEM)磁盘。

dm-writecache 方法创建类型为 writecache 的逻辑卷。

其他资源

  • 系统中 lvmcache (7) 手册页

67.10.2. LVM 缓存组件

LVM 支持向 LVM 逻辑卷添加缓存的支持。LVM 缓存使用以下 LVM 逻辑卷类型:

主 LV
较大、较慢且原始的卷。
缓存池 LV
可用于缓存主 LV 数据的复合 LV。它有两个子 LV:存储缓存数据的数据和管理缓存数据的元数据。您可以为数据和元数据配置特定的磁盘。您只能使用具有 dm-cache 的缓存池。
Cachevol LV
可用于缓存主 LV 数据的线性 LV。您无法为数据和元数据配置单独的磁盘。cachevol 只能与 dm-cachedm-writecache 一起使用。

所有这些关联的 LV 必须位于同一卷组中。

您可以将主逻辑卷(LV)与更快速、通常是较小的保存缓存数据的 LV 相结合。快速 LV 是从快速块设备(如 SSD 驱动器)创建的。当您为逻辑卷启用缓存时,LVM 会重新命名并隐藏原始卷,并显示由原始逻辑卷组成的新逻辑卷。新逻辑卷的组成取决于缓存方法以及您是否使用 cachevolcachepool 选项。

cachevolcachepool 选项会公开对缓存组件的放置不同级别的控制:

  • 使用 cachevol 选项,快速设备会同时存储数据块的缓存副本以及用于管理缓存的元数据。
  • 使用 cachepool 选项,单独的设备可以存储数据块的缓存副本以及用于管理缓存的元数据。

    dm-writecache 方法与 cachepool 不兼容。

在所有配置中,LVM 会公开一个生成的设备,它会将所有缓存组件组合在一起。得到的设备的名称与原来的较慢的逻辑卷的名称相同。

其它资源

67.10.3. 为逻辑卷启用 dm-cache 缓存

这个过程使用 dm-cache 方法启用逻辑卷中常用数据缓存。

先决条件

  • 您希望使用 dm-cache 加快的逻辑卷存在于系统中。
  • 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。

流程

  1. 在快速设备中创建 cachevol 卷:

    # lvcreate --size cachevol-size --name <fastvol> <vg> </dev/fast-pv>

    替换以下值:

    cachevol-size
    cachevol 卷的大小,如 5G
    fastvol
    cachevol 卷的名称
    vg
    卷组名称
    /dev/fast-pv

    快速块设备的路径,如 /dev/sdf

    例 67.3. 创建一个 cachevol

    # lvcreate --size 5G --name fastvol vg /dev/sdf
    Logical volume "fastvol" created.
  2. cachevol 卷附加到主逻辑卷以开始缓存:

    # lvconvert --type cache --cachevol <fastvol> <vg/main-lv>

    替换以下值:

    fastvol
    cachevol 卷的名称
    vg
    卷组名称
    main-lv

    较慢的逻辑卷名称

    例 67.4. 将 cachevol 卷附加到主 LV

    # lvconvert --type cache --cachevol fastvol vg/main-lv
    Erase all existing data on vg/fastvol? [y/n]: y
    Logical volume vg/main-lv is now cached.

验证

  • 验证新创建的逻辑卷是否启用了 dm-cache

    # lvs --all --options +devices <vg>
    
    LV              Pool           Type   Devices
    main-lv         [fastvol_cvol] cache  main-lv_corig(0)
    [fastvol_cvol]                 linear /dev/fast-pv
    [main-lv_corig]                linear /dev/slow-pv

其他资源

  • 系统中 lvmcache (7) 手册页

67.10.4. 使用 cachepool 为逻辑卷启用 dm-cache 缓存

这个过程可让您单独创建缓存数据和缓存元数据逻辑卷,然后将卷合并到缓存池中。

先决条件

  • 您希望使用 dm-cache 加快的逻辑卷存在于系统中。
  • 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。

流程

  1. 在快速设备中创建 cachepool 卷:

    # lvcreate --type cache-pool --size <cachepool-size> --name <fastpool> <vg /dev/fast>

    替换以下值:

    cachepool-size
    cachepool 的大小,如 5G
    fastpool
    cachepool 卷的名称
    vg
    卷组名称
    /dev/fast

    到快速块设备的路径,如 /dev/sdf1

    注意

    您可以使用 --poolmetadata 选项指定创建 cache-pool 时池元数据的位置。

    例 67.5. 创建一个 cachepool

    # lvcreate --type cache-pool --size 5G --name fastpool vg /dev/sde
    Logical volume "fastpool" created.
  2. cachepool 附加到主逻辑卷中开始缓存:

    # lvconvert --type cache --cachepool <fastpool> <vg/main>

    替换以下值:

    fastpool
    cachepool 卷的名称
    vg
    卷组名称
    main

    较慢的逻辑卷名称

    例 67.6. 将 cachepool 附加到主 LV

    # lvconvert --type cache --cachepool fastpool vg/main
    Do you want wipe existing metadata of cache pool vg/fastpool? [y/n]: y
    Logical volume vg/main is now cached.

验证

  • 检查具有 cache-pool 类型的新创建的设备卷:

    # lvs --all --options +devices <vg>
    
    LV                      Pool               Type        Devices
    [fastpool_cpool]                           cache-pool  fastpool_pool_cdata(0)
    [fastpool_cpool_cdata]                     linear      /dev/sdf1(4)
    [fastpool_cpool_cmeta]                     linear      /dev/sdf1(2)
    [lvol0_pmspare]                            linear      /dev/sdf1(0)
    main                    [fastpoool_cpool]  cache       main_corig(0)
    [main_corig]                               linear      /dev/sdf1(O)

其他资源

  • 系统中 lvcreate (8), lvmcache (7), 和 lvconvert (8) man page

67.10.5. 为逻辑卷启用 dm-writecache 缓存

这个过程允许使用 dm-writecache 方法将 I/O 操作缓存到逻辑卷中。

先决条件

  • 您希望使用 dm-writecache 加快的逻辑卷存在于系统中。
  • 包含较慢逻辑卷的卷组还包含在快速块设备中未使用的物理卷。
  • 如果较慢的逻辑卷处于活跃状态,请停用它。

流程

  1. 如果一个较慢的逻辑卷是活跃的,取消激活它:

    # lvchange --activate n <vg>/<main-lv>

    替换以下值:

    vg
    卷组名称
    main-lv
    较慢的逻辑卷名称
  2. 在快速设备中创建一个已停用的 cachevol 卷:

    # lvcreate --activate n --size <cachevol-size> --name <fastvol> <vg> </dev/fast-pv>

    替换以下值:

    cachevol-size
    cachevol 卷的大小,如 5G
    fastvol
    cachevol 卷的名称
    vg
    卷组名称
    /dev/fast-pv

    快速块设备的路径,如 /dev/sdf

    例 67.7. 创建一个停用的 cachevol

    # lvcreate --activate n --size 5G --name fastvol vg /dev/sdf
    WARNING: Logical volume vg/fastvol not zeroed.
    Logical volume "fastvol" created.
  3. cachevol 卷附加到主逻辑卷以开始缓存:

    # lvconvert --type writecache --cachevol <fastvol> <vg/main-lv>

    替换以下值:

    fastvol
    cachevol 卷的名称
    vg
    卷组名称
    main-lv

    较慢的逻辑卷名称

    例 67.8. 将 cachevol 卷附加到主 LV

    # lvconvert --type writecache --cachevol fastvol vg/main-lv
    Erase all existing data on vg/fastvol? [y/n]?: y
    Using writecache block size 4096 for unknown file system block size, logical block size 512, physical block size 512.
    WARNING: unable to detect a file system block size on vg/main-lv
    WARNING: using a writecache block size larger than the file system block size may corrupt the file system.
    Use writecache block size 4096? [y/n]: y
    Logical volume vg/main-lv now has writecache.
  4. 激活生成的逻辑卷:

    # lvchange --activate y <vg/main-lv>

    替换以下值:

    vg
    卷组名称
    main-lv
    较慢的逻辑卷名称

验证

  • 检查新创建的设备:

    # lvs --all --options +devices vg
    
    LV                VG Attr       LSize   Pool           Origin           Data%  Meta%  Move Log Cpy%Sync Convert Devices
     main-lv          vg Cwi-a-C--- 500.00m [fastvol_cvol] [main-lv_wcorig] 0.00                                    main-lv_wcorig(0)
     [fastvol_cvol]   vg Cwi-aoC--- 252.00m                                                                         /dev/sdc1(0)
     [main-lv_wcorig] vg owi-aoC--- 500.00m                                                                         /dev/sdb1(0)

其他资源

  • 系统中 lvmcache (7) 手册页

67.10.6. 为逻辑卷禁用缓存

这个过程禁用 dm-cachedm-writecache 缓存,该缓存在逻辑卷中当前启用。

先决条件

  • 在逻辑卷中启用了缓存。

流程

  1. 取消激活逻辑卷:

    # lvchange --activate n <vg>/<main-lv>

    使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv

  2. 分离 cachevolcachepool 卷:

    # lvconvert --splitcache <vg>/<main-lv>

    替换以下值:

    使用卷组名称替换 vg,使用启用了缓存的逻辑卷的名称替换 main-lv

    例 67.9. 分离 cachevolcachepool

    # lvconvert --splitcache vg/main-lv
    Detaching writecache already clean.
    Logical volume vg/main-lv writecache has been detached.

验证

  • 检查逻辑卷不再连接在一起:

    # lvs --all --options +devices <vg>
    
    LV      Attr       Type   Devices
    fastvol -wi------- linear /dev/fast-pv
    main-lv -wi------- linear /dev/slow-pv

其他资源

  • 系统中 lvmcache (7) 手册页
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.