Linux多路径的使用及介绍

作者:kent 出自:http://kentfang.blog.sohu.com/

多路径(multi-path)软件的介绍
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择,如下图:

根据上图所示,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。多路径的主要功能就是和存储设备一起配合实现如下功能:

1.故障的切换和恢复

2.IO流量的负载均衡

3.磁盘的虚拟化

由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要单独的购买license。好在, RedHat和Suse的2.6的内核中都自带了免费的多路径软件包,并且可以免费使用,同时也是一个比较通用的包,可以支持大多数存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以支持并运行的很好的。

本文一下的部分将专门针对Linux下多路径软件的配置安装,以及一些结合实际的操作进行详细的介绍(以下操作均在Suse10 SP1下进行)

Linux多路径的使用

多路径软件包的构成
device-mapper-1.02.13-6.9.i586.rpm      

该软件运行在底层,主要进行设备虚拟化和映射。

multipath-tools-0.4.7-34.18.i586.rpm,这个软件包可以在

多路径的管理和监控工具,主要进行路径状态的检测,管理工作

多路径软件包的安装
Rpm –ivh device-mapper-1.02.13-6.9.i586.rpm
Rpm –ivh  multipath-tools-0.4.7-34.18.i586.rpm

安装完成后,使用命令modprobe  dm_multipath来加载相应的模块,可以使用lsmod |grep dm_multipath来检查安装是否正常。

配置文件的修改及创建
接下来的工作就是要创建一个multipath.conf的配置文件,该文件在安装后不会自动创建。不过有一个模板可以使用,使用如下命令可以创建一个multipath.conf的文件了

cp /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic  /etc/multipath.conf

然后再该文件的最后一段加上如下配置:
引用:
  devices {

       device {                                    

              vendor                  "EMC"   //厂商名称

              product                 "CaXXXXX"  //产品型号

              path_grouping_policy     group_by_prio //默认的路径组策略

              getuid_callout          "/sbin/scsi_id -p 0x80 -g -u -s /block/%n" //获得唯一设备号使用的默认程序

        prio_callout            "/sbin/acs_prio_alua %d" //获取有限级数值使用的默认程序

        hardware_handler        "1 acs" //确认用来在路径切换和IO错误时,执行特定的操作的模块。

              path_checker         hp_sw  //决定路径状态的方法

              path_selector         "round-robin 0" //选择那条路径进行下一个IO操作的方法

              failback          immediate  //故障恢复的模式

              no_path_retry        queue //在disable queue之前系统尝试使用失效路径的次数的数值

              rr_min_io              100 //在当前的用户组中,在切换到另外一条路径之前的IO请求的数目

       }

  }