第 14 章 存储

DM 恢复至版本 4.2

已将 Device Mapper (DM) 升级至上游版本 4.2,该版本提供大量针对上一个版本的程序错误修复和增强,其中包括显著 DM 加密性能更新及 DM 核心更新,以支持多队列块 I/O 查询机制(blk-mq)。

使用 blk-mq 进行多重队列 I/O 调度

Red Hat Enterprise Linux 7.2 包含了一个用于块设备(称为 blk-mq)的新多重队列 I/O 调度机制。通过允许某些设备驱动映射 I/O 请求至多个硬件或软件队列提高性能。当多线程执行在单一设备直执行 I/O 时,性能的提高来自于锁竞争的减少。更新的设备,如非易失性存储器标准(Non-Volatile Memory Express,NVMe),因为对多个硬件提交和完成队列的原生支持以及低延迟性能的特点,它们最适合于使用这个功能。但性能的提高总是取决于具体的硬件和负载。
在下列驱动程序中实施 blk-mq 功能且默认启用它:virtio-blk、mtip32xx、nvme 和 rbd。
相关功能 scsi-mq 允许小型计算机系统接口(SCSI)设备驱动程序使用 blk-mq 基础结构。scsi-mq 在 Red Hat Enterprise Linux 7.2 中是作为技术预览提供。要启用 scsi-mq,请在内核命令行中指定 scsi_mod.use_blk_mq=y。默认值为 n(禁用)。
如果指定了 dm_mod.use_blk_mq=y 内核选项,就也可以配置使用基于请求的设备映射器(Device Mapper,DM)的 DM 多重路径目标设备使用 blk-mq 基础架构。默认值是 n(禁用)。
如果底层的 SCSI 设备也使用 blk-mq,设置 dm_mod.use_blk_mq=y 可以减少 DM 层的锁消耗。
要确定 DM 多重路径设备是否在使用 blk-mq,请查看 /sys/block/dm-X/dm/use_blk_mq,这中的 dm-X 用实际的 DM 多重路径设备替代。这是只读文件,它反映 /sys/module/dm_mod/parameters/use_blk_mq 中的全局值是创建基于请求的 DM 多重路径设备的时间。

multipath.conf 文件中新的 delay_watch_checks 和 delay_wait_checks 选项

如果路径不可靠且连接频繁地掉线时,multipathd 仍然会继续使用这个路径。在 multipathd 意识到路径不再可用前的超时时间是 300 秒,这会使 multipathd 看起来已停止了。
为了解决这个问题,我们添加了两个新的配置选项:delay_watch_checks 和 delay_wait_checks。设置 delay_watch_checks 为 multipathd 在路径上线后观察它的循环次数。如果路径在这个值以内就出现故障,multipathd 将不会使用它。然后 multipathd 会依赖于 delay_wait_checks 选项来指定路径再次有效前必须通过的连续循环次数。这样可防止不可靠的路径在恢复上线后立即就使用。

multipath.conf 文件中的新 config_dir 选项

用户无法将其配置分散到 /etc/multipath.conf 和其他配置文件中。这样可防止用户设定一个用于所有机器的主配置文件,同时在独立配置文件中保留对每台机器的具体配置信息。
为解决这个问题,在 multipath.config 文件中新添加了 config_dir 选项。用户必须将 config_dir 改为空白字符串,或者完全限定目录路径名称。将其设定为空白字符串以外的任意值后,multipath 会按字母顺序读取所有 .conf 文件。然后应用该配置,如同将其添加到 /etc/multipath.conf 中。如果没有进行此类更改,则 config_dir 默认为 /etc/multipath/conf.d。

可显示和管理使用设备映射器驱动程序设备区域的 I/O 统计数据的新 dmstats 命令

dmstats 命令为 device-mapper I/O 统计提供用户空间支持。允许用户为 device-mapper 设备在用户定义的任意区域内创建、管理和报告 I/O 计数、度量和延迟直方图。现在,dmsetup 报表中有可用的统计字段,dmstats 命令添加了为使用统计信息设计的新专有报表模式。关于 dmstats 命令的信息,请参考 dmstats(8) 手册页。

⁠LVM 缓存

LVM 缓存从 Red Hat Enterprise Linux 7.1 开始已受完全支持了。这个功能允许用户创建逻辑卷(Logical Valumn,LV),以小型快速设备作为更大、速度更慢的设备的缓存。关于创建缓存逻辑卷的更多信息,请参考 lvmcache(7) 手册页。
请注意下列使用缓存 LV 的限制:
* 缓存 LV 必须是顶层设备。它不能用作 thin-pool LV、RAID LV 映像或其它的子 LV 类型。
* 缓存 LV 的子 LV(原始 LV、元数据 LV和数据 LV)的类型只能是 linear、stripe 或 RAID。
* 缓存 LV 的属性在创建后不能修改。要修改缓存属性,请按照 lvmcache(7) 中的说明删除缓存并用需要的属性创建它。

新的 LVM/DM 缓存策略

我们编写了在多数情况下减少内存消耗和提供性能的新 smq dm-cache 策略。它现在是新 LVM 缓存逻辑卷的默认缓存策略。希望使用传统的 mq 缓存策略的用户仍可以通过创建缓存逻辑卷时使用 —cachepolicy 参数来实现。

LVM systemID

现在可以为 LVM 逻辑组分配所有者了。逻辑组所有者是主机的系统 ID。只有给定系统 ID 的主机才可以使用这个逻辑卷。存在于共享设备上、多个主机可见的逻辑卷可以从中受益,否则无法避免多个主机的并发访问。共享设备上具有系统 ID 的 LVM 逻辑组由一个主机所有且可以避免其它主机的访问。

新的 lvmpolld 守护进程

lvmpolld 守护进程提供长期运行 LVM 命令的轮询方法。启用该守护进程后,则使用 lvmpolld 守护进程而不是原来的 LVM 命令控制重启运行的 LVM 命令。这样可继续独立使用原来的 LVM 命令操作。默认启用 lvmpolld 守护进程。
引入 lvmpolld 守护进程前,如果在 cgroup 中退出主进程(即主服务),则任意在 cgroup 系统服务中启动的源自 lvm2 命令后端轮询进程都可能会被杀死。另外,lvmpolld 可帮助防止在同一任务中多次衍生出 lvm2 轮询进程查询,因为它会追踪所有包含轮询任务的进程。
有关 lvmpolld 守护进程的详情,请查看 lvm.conf 配置文件。

增强 LVM 选项标准

Red Hat Enterprise Linux 7.2 发行本支持一些 LVM 选择标准增强。之前,只能为报告命令使用选择标准;现在,LVM 还为一些处理命令支持选择标准。另外,在这个发行本中有一些改动可提供更好的时间报告字段支持和选择。
有关这些新功能的实施,请查看《逻辑卷管理手册》中的附录 LVM Selection Criteria

增大了 SCSI LUN 的默认最大值

max_report_luns 的默认值从 511 增大至 16393。这个参数指定逻辑单元的最大数量,使用 Report LUN 机制扫描 SCSI 内部连接时可配置该参数。