Linux 系统下的 MPIO 技术
MultiPath I/O 技术就是通过一条及以上的物理链路来访问网络存储设备,并且可以使用容错、流量负载平衡以及细粒度的 I/O 调度策略等方式,为网络存储应用提供更高的可用性和性能优势。
面对 SAN 环境下的存储应用,Linux 系统存在不同类型的 MPIO 技术方案以供系统应用集成方和用户选择使用。其中包括,存储厂商设备特定的 MPIO 软件,如 EMC PowerPath,HDS HDLM 等;HBA 板卡厂商提供的支持 MPIO 技术的驱动程序;另外,还有系统通用类型的多路径存储访问方案。对于前两者,在这里就不多谈了,一是这几个技术方案都是根据特定类型或品牌设备的应用需要提供的,二是缺少一定的开放性,其对主机系统所提供的一些 I/O 机制和策略利用不够。接下来,主要介绍说明的是后者,有意思的是,在 Linux 系统里同时存在两种通用类型的 MPIO 技术实现,即基于 Linux 软 RAID 机制的和基于所谓设备映射器 device-mapper 核心机制的实现。
基于软 RAID 机制的多路径技术提供了一种类似于 RAID 级的配置方式,将物理链路在系统呈现的逻辑块设备“装配”成一个软 RAID 设备,而对该设备的访问相当于通过不同的物理链路访问同一个网络存储 LU。现在,这种技术方案不被再使用了,原因很简单,在新的 Linux 核心版本里出现了另一个功能丰富、策略灵活的实现方案。当然,具体的原因是,软 RAID 机制目前还不是 cluster-aware 的,这样在多机环境下会给系统管理工作带来麻烦,其次,它的实现所提供的配置策略只有故障切换。
新的技术实现是基于 device-mapper 核心机制的,使用方式和上面一样(具体的操作步骤和测试办法已经有网友和公司在网上提供了),只是它提供了更为丰富的 I/O 访问和监控的配置策略。对于 device-mapper,其背景情况就是,它是由 RH 公司的 LVM 开发技术人员直接推动和维护的,而且,新的 LVM 逻辑卷管理器也是基于这个核心机制。当然,一些其他的存储设备厂商及其技术人员也提供了基于该 MPIO 技术框架下的特定设备模块并开放了一些技术参数,比如 EMC 等。在 RHEL 4 刚发布的时候,RH 提供的 MPIO 技术方案还是基于软 RAID 方案,只是在其 RHEL 4U2 里才引入 device-mapper-multipath,而且真正对于企业可用的是在 U3 以后的发布版,原因会在下面说明。
关于这个技术实现的特点,其突出的是在于其建立了一个有效的、可配置的路径管理机制,引入了一个管理对象:路径组(PathGroup)。即根据不同的配置需要将所有路径划分为路径组,而访问“多路径”设备时只会激活并使用一个路径组,同时,I/O 调度策略只运用于这个激活的路径组中的所有路径。
例如,如果通过容错方式访问“多路径”设备,只是需要将相关路径独自分组,即一个路径组里只有一条路径。在当前路径失败需要切换可用的路径时,只需选取并激活另一个可用的路径组即可。其它路径一般都处于备用的状态。
而如果通过负载平衡方式访问“多路径”设备,只是把所有相关路径组合为一个路径组即可。按照规则,I/O 调度策略(缺省使用 round-robin 轮换算法)只会运用到这唯一的路径组,那么也就是将 I/O 流量分配到所有的相关路径上。
此外,这个技术实现还提供了一个管理路径的辅助手段:路径的优先级。即允许用户为每条路径设置优先级。在按照优先级方式来划分路径组时,具有相同优先级的路径将被分到同一个路径组里。另外,允许存储设备的硬件参数成为路径分组管理的约束条件,这些方法对需要特殊管理的网络存储应用场合都是很有用的。
最后,介绍一个必不可少的特性:no-path-retry。之所以提出来,是因为对于企业用户而言,这是一个必不可少的功能。我们都知道,对于网络传输质量,主要考察其带宽和时延。数据网络的应用可以接受时延过大造成的超时故障并有相应的应对方法;而存储网络的时延过大,在主机系统上会反映出 I/O 超时的故障,结果将造成文件系统或数据库系统崩溃。在一般情况下,即使某些压力测试的场景里,很难促使存储网络发生时延过大的情况,然而,其问题一直存在着。特别是在一些不支持或没有配置流量控制的软件运行时,比如主机备份软件,就很有可能触发这个故障。所以,在基于 device-mapper 机制的 MPIO 技术实现方案里引入了上述特性,即使在网络时延条件不好的情况下,也能够支持 I/O 正常完成。不过,需要方案实施者注意的是,配置这个特性应该设定一个时间限定值,这样,在物理链路持续阻塞或完全中断的情况下,能够让系统报告错误消息。
(一个小插曲:在 RHEL 5 刚发布的时候,其发布文档还在推荐基于软 RAID 的 MPIO 技术实现,在写这个贴子的时候,那句话已经删除了。)