首先要确认是否安装了device-mapper-multipathing的RPM包
[root@localhost ~]# rpm -qa |grep device
device-mapper-1.02.07-4.0.RHEL4
device-mapper-multipath-0.4.5-16.1.RHEL4
然后在进行以下的配置:
编辑文件/etc/multipath.conf。在文件头部注释掉如下内容:
devnode_blacklist {
devnode "*"
}
注释完如下:
#devnode_blacklist {
# devnode "*"
#}
取消文件 /etc/multipath.conf中这段的注释,这段内容可以让 device-mapper multipathing 不用扫描所有的设备。 /etc/multipath.conf file:
2、 device-mapper:主要包括两大部分:内核部分和用户部分。内核部分主要由device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。核心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导内核驱动的行为,比如如何创建mappered device,这些divece的属性等。linux device mapper的用户空间部分主要包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配置mappered device。multipath-tool的程序中就需要调用这些库。
[root@localhost ~]# rpm -qa |grep device
device-mapper-1.02.07-4.0.RHEL4
device-mapper-multipath-0.4.5-16.1.RHEL4
然后在进行以下的配置:
编辑文件/etc/multipath.conf。在文件头部注释掉如下内容:
devnode_blacklist {
}
注释完如下:
#devnode_blacklist {
#
#}
取消文件 /etc/multipath.conf中这段的注释,这段内容可以让 device-mapper multipathing 不用扫描所有的设备。 /etc/multipath.conf file:
defaults {
multipath_tool "/sbin/multipath -v0"
udev_dir /dev
polling_interval 10
default_selector "round-robin 0"
default_path_grouping_policy multibus
default_getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
default_prio_callout "/bin/true"
default_features "0"
rr_wmin_io 100
failback immediate
}
devnode_blacklist {
wwid 26353900f02796769
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}
这段设置了默认的 device-mapper 的动作,并且去出了通常不会有多路径的设备,如IDE硬盘和软盘。默认的hd*设备的黑名单存在这一个排
印错误。需要修改。devnode "^hd[a-z][[0-9]*]" 把上行修改为如下: devnode "^hd[a-z][0-9]*" 为了实现简单的failover功能,下例中,defaults 组中的默认的 default_path_grouping_policy 选项被设置成为 failover。 defaults { multipath_tool "/sbin/multipath -v0" udev_dir /dev polling_interval 10 default_selector "round-robin 0" default_path_grouping_policy failover default_getuid_callout "/sbin/scsi_id -g -u -s /block/%n" default_prio_callout "/bin/true" default_features "0" rr_wmin_io 100 failback immediate } 退出编辑并保存设置,执行如下命令: modprobe dm-multipath modprobe dm-round-robin service multipathd start multipath -v2 命令 multipath -v2 可以显示多路径,从而可以知道那些设备工作在多路径下。如果没有任何输出,确认所有的SAN连接被正确的设置,系统有没有正确的开启多路径功能。设备的设备名会被生成,/dev/dm-#,#指代的是多路径组,如果/dev/sda是唯一的多路径设备,/dev/dm-0将会是/dev/sda和 /dev/sdb的多路径设备。注意:fdisk不能用于设备/dev/dm-#,使用fdisk只能操作基础磁盘,要在设备映射多路径映射设备上创建/dev/dm-#分区的操作. 执行一下命令。
kpartx -a /dev/dm-# 以上基本就是device-mapper-mutipath的基本设置了 如果要在设置中忽略本地硬盘则应该: 首先确认哪块磁盘是本地磁盘, 然后把该硬盘标记到黑名单中。 在加入黑名单之前,留意multipath -v2命令显示的多路径映射下的本地磁盘。
[root@rh4cluster1 ~]# multipath -v2 create: SIBM-ESXSST336732LC____F3ET0EP0Q000072428BX1 [size=33 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 0:0:0:0 sda 8:0 device-mapper ioctl cmd 9 failed: Invalid argument device-mapper ioctl cmd 14 failed: No such device or address create: 3600a0b80001327d80000006d43621677 [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:0 sdb 8:16 \_ 3:0:0:0 sdf 8:80 create: 3600a0b80001327510000009 a436215ec [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:1 sdc 8:32 \_ 3:0:0:1 sdg 8:96 create: 3600a0b80001327d80000007 0436216b3 [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:2 sdd 8:48 \_ 3:0:0:2 sdh 8:112 create: 3600a0b80001327510000009 b4362163e [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:3 sde 8:64 \_ 3:0:0:3 sdi 8:128 在如上部分, 设备映射完成了/dev/sda的设备映射。 为了阻止被映射。 可以编辑文件/etc/multipath.conf。 下面的是该文件被修改的部分。 devnode_blacklist { wwid 26353900f02796769 devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" devnode "^hd[a-z][0-9]*" devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]" } 添加本地磁盘到黑名单中, 如本例, sda是内置硬盘, 文件内容如下。 devnode_blacklist { wwid 26353900f02796769 devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*" devnode "^hd[a-z][0-9]*" devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]" } 执行命令: multipath -F multipath -v2 本地磁盘就不会出现在命令的输出了 [root@rh4cluster1 ~]# multipath -F [root@rh4cluster1 ~]# multipath -v2 create: 3600a0b80001327d80000006 d43621677 [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:0 sdb 8:16 \_ 3:0:0:0 sdf 8:80 create: 3600a0b80001327510000009 a436215ec [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:1 sdc 8:32 \_ 3:0:0:1 sdg 8:96 create: 3600a0b80001327d80000007 0436216b3 [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:2 sdd 8:48 \_ 3:0:0:2 sdh 8:112 create: 3600a0b80001327510000009 b4362163e [size=12 GB][features="0"][hwhandler="0"] \_ round-robin 0 \_ 2:0:0:3 sde 8:64 \_ 3:0:0:3 sdi 8:128 我如何知道在/dev目录下的什么设备和系统的一个多路径设备是对应的?
解决方法:
这个问题适合Red Hat Enterprise Linux 4 Update 2 (U2)
为了找到哪个设备映射实体对应系统的多路径设备,执行下面的命令:
1.在命令行中执行multipath -ll ,选项是2个小写的字母L.
2.决定哪个长的数字是设备映射实体所需要的.
3.执行dmsetup ls --target multipath,这个命令将会返回一个长的数字。你会看到一个>类似(255, #)的输出,其中的#就是设备映射号。这个数字可以用来对照哪个dm设备对应系统的多路径设备,例如/dev/dm3.
一、什么是多路径
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。
多路径的主要功能就是和存储设备一起配合实现如下功能:
1.故障的切换和恢复
2.IO流量的负载均衡
3.磁盘的虚拟化
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要单独的购买license。好在, RedHat和Suse的2.6的内核中都自带了免费的多路径软件包,并且可以免费使用,同时也是一个比较通用的包,可以支持大多数存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以支持并运行的很好的。
1.故障的切换和恢复
2.IO流量的负载均衡
3.磁盘的虚拟化
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要单独的购买license。好在, RedHat和Suse的2.6的内核中都自带了免费的多路径软件包,并且可以免费使用,同时也是一个比较通用的包,可以支持大多数存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以支持并运行的很好的。
二、Linux下multipath介绍,需要以下工具包:
在CentOS 5中,最小安装系统时multipath已经被安装,查看multipath是否安装如下:
1、device-mapper-multipath:即multipath-tools。主要提供multipathd和multipath等工具和 multipath.conf等配置文件。这些工具通过device mapper的ioctr的接口创建和配置multipath设备(调用device-mapper的用户空间库。创建的多路径设备会在/dev /mapper中)。
2、 device-mapper:主要包括两大部分:内核部分和用户部分。内核部分主要由device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。核心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导内核驱动的行为,比如如何创建mappered device,这些divece的属性等。linux device mapper的用户空间部分主要包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配置mappered device。multipath-tool的程序中就需要调用这些库。
3、dm-multipath.ko和dm.ko:dm.ko是device mapper驱动。它是实现multipath的基础。dm-multipath其实是dm的一个target驱动。
4、scsi_id: 包含在udev程序包中,可以在multipath.conf中配置该程序来获取scsi设备的序号。通过序号,便可以判断多个路径对应了同一设备。这个是多路径实现的关键。scsi_id是通过sg驱动,向设备发送EVPD page80或page83 的inquery命令来查询scsi设备的标识。但一些设备并不支持EVPD 的inquery命令,所以他们无法被用来生成multipath设备。但可以改写scsi_id,为不能提供scsi设备标识的设备虚拟一个标识符,并输出到标准输出。multipath程序在创建multipath设备时,会调用scsi_id,从其标准输出中获得该设备的scsi id。在改写时,需要修改scsi_id程序的返回值为0。因为在multipath程序中,会检查该直来确定scsi id是否已经成功得到。