Linux Device Mapper Multipathing技术.docx
《Linux Device Mapper Multipathing技术.docx》由会员分享,可在线阅读,更多相关《Linux Device Mapper Multipathing技术.docx(23页珍藏版)》请在冰豆网上搜索。
![Linux Device Mapper Multipathing技术.docx](https://file1.bdocx.com/fileroot1/2023-2/11/275bd21e-ee70-4caa-953a-b0498fc2717b/275bd21e-ee70-4caa-953a-b0498fc2717b1.gif)
LinuxDeviceMapperMultipathing技术
LinuxDeviceMapperMultipathing技术
在SAN存储网络中,冗余地访问存储设备是整个系统的关键技术之一,在Linux平台,开源的解决方案之一是DM-Multipath。
DeviceMapperMultipathing(DM-Multipath)允许在服务器节点和存储阵列之间配置多个I/O路径但仍视为一个单一存储设备。
这些I/O路径是物理SAN连接,可以包含独立的数据线,交换机和控制器。
多路径集成了I/O路径,创建了包含集成多路径的一个新设备。
本文主体是基于RedHat管理手册RedHatEnterpriseLinux5DMMultipath–DMMultipathConfigurationandAdministrationEdition3结合项目实施过程中的实践撰写的。
文档以RedHat英文管理手册翻译为主,并完整经过实践。
DM-Multipath概述
DM-Multipath可以提供:
∙冗余
DM-Multipath可以在active/passive配置中提供failover。
在一个active/passive配置中,对于I/O任何时候只使用一半的路径。
如果一个I/O路径的任何组成部分(数据线,交换机或控制器)出现故障,DM-Multipath将切换到一个替换路径上。
∙性能提高
DM-Multipath可以配置为active/active模式,这样I/O采用round-robin方式分摊到多路径上。
在一些配置中,DM-Multipath可以检测到I/O路径的负载并可以动态重平衡负载。
∙Active/PassiveMulstipathConfigurationwithoneRAIDDevices
配置说明:
∙
o提供了HBA,FCcable,SANswitch和阵列控制器failover
o不支持硬件存储阵列故障failover
∙更为复杂的Active/PassiveMulstipathConfigurationwithoneRAIDDevices
配置说明:
∙
o支持全冗余硬件failover
o数据冗余需要通过软件来实现
存储阵列支持
默认情况下,DM-Multipath支持大多数支持DM-Multipath技术的常用存储。
所有支持的存储设备可以在multipath.conf.defaults文件中查询。
如果所使用的存储阵列没有在默认配置文件中列出,可能需要添加到DM-Multipath配置文件multipaht.conf中。
一些存储阵列需要处理特殊的I/O错误和路径切换,这些请求需要特定的引见处理内核模块。
DM-Multipath模块
组件
描述
dm-multipath内核模块
重路由I/O和支持对路径和路径组的failover
multipath命令
列出和配置多路径设备。
通常使用/etc/rc.sysinit来启动,也可以使用udev程序在添加一个块设备时启动,或者通过initramfs文件系统来运行
multipathddaemon
监控路径;当路径失效或恢复,multipathd服务会初始化路径组切换。
提供对多路径的交互式修改。
任何/etc/multipath.conf的配置修改都要重启该服务
kpatx
创建设备映射设备用于一个设备的分区,对于使用基于DOS分区的DM-MP是必要的命令。
kpartx基于自己的软件包,但是device-mapper-multipath软件包以来此软件包
DM-Multipath设置概览
DM-Multipath包括内编译(compiled-in)的默认设置,适合常规的多路径配置。
设置DM-Multipath通常是一个简单的过程。
基本的DM-Multipath配置过程如下
∙安装device-mapper-multipath软件包
∙编辑multipath.conf配置文件:
o去掉默认的blacklist
o修改需要的现有默认配置
o保存配置文件
∙启动multipath服务
∙使用multipath命令创建多路径设备
多路径设备
当没有使用DM-Multipath时,任何从服务器节点到一个存储控制器的路径都会被视为系统一个独立的设备,甚至这些I/O路径连接相同的服务器节点到相同的存储控制器。
DM-Multipath通过创建在底层设备上再一个多路径设备,提供了一个在逻辑上组织I/O路径的方法。
多路径设备标识
每个多路径设备都具备一个全局标识(WWID,WorldWideIdentifir),这个标识生成后是全局唯一并且不能修改。
默认情况下,一个多路径设备是设置为它的WWID。
不过,也可以设置多路径配置文件中的user_friendly_names参数,这样可以设置类似mpathn这样的节点唯一别名。
例如,一个节点通过一个单一的非区域光纤(FC)交换机使用双HBA卡连接诶到一个存储控制器的两个接口上,则服务器可以看到4个设备:
/dev/sda,/dev/sdb,/dev/sdc,/dev/sdd。
DM-Multipath使用一个唯一的WWID创建一个单一设备,这样可以重路由I/O到这4个符合多路径配置的底层设备。
当设置user_friendly_names配置参数被设置为yes,则多路径设备命名将设置为mpathn。
当一个信设备被连接到DM-Multipath控制,这个新设备可能被可以在/dev目录下3个不同的设备位置查看到:
/dev/mapper/mpathn,/dev/mpath/mpathn和/dev/dm-n
∙位于/dev/mapper的设备是最早在启动过程中创建的。
这些设备用于multipathed设备访问,例如当创建逻辑卷。
∙位于/dev/mpath的设备是便于所有多路径设备在统一目录下检查而提供的。
这些设备由udev设备管理器创建,并且可能在启动时不可用。
不要使用这些设备来构建逻辑卷或者文件系统。
∙所有类似/dev/dm-n的设备只能内部使用,不能由用户使用。
在一个群集中一致的多路径设备命名
当在配置文件中设置user_friendly_names配置参数为yes,这个多路径设备的命名将对一个节点将是唯一的,但是不能保证对所有节点这个命名也是唯一的。
这样对于在多路径设备上使用LVM创建逻辑设备虽然不会导致困难,但是如果要求群集所有节点都使用一致的命名来访问多路径设备,则需要执行以下步骤:
∙在多路径配置文件中的multipaths配置段使用alias选项来设置多路径设备。
这个多路径设备的alias命名对于一个群集的节点是完全一致的。
∙如果需要在系统定义的用户友好命名上对群集所有节点使用统一命名,则在一个主机上设置所有多路径设备。
然后将/var/lib/multipath/binding配置文件从这台服务器复制到群集的所有其他节点上。
多路径设备特性
在附加的user_friendly_names和alias选项,一个多路径设备具有数字属性。
可以在多路径配置文件的multipaths部分对一个特定的多路径设备创建一个设备项来修改这些属性。
在逻辑卷中使用多路径设备
在创建多路径设备后,可以使用多路径设备作为一个物理设备命名来创建一个LVM逻辑卷管理。
例如,如果/dev/mapper/mpath0是一个多路径设备,则以下命令可以把/dev/mapper/mpath0作为一个物理卷。
1
pvcreate/dev/mapper/mpath0
可以在创建LVM卷组的时候像使用其他LVM物理卷设备以上使用以上LVM物理卷设备。
注意
如果一个物理设备上已经配置了分区,则在整个设备上创建一个LVM物理卷,pvcreate命令会失败。
注意Anaconda和Kickstart安装程序会在每个没有标记的块设备上创建一个空的分区表。
如果希望使用整个物理设备而不是一个分区,则需要在这个设备上删除所有存在的分区。
可以使用kpartx-d命令或fdisk命令来现有分区。
如果系统是哟给你大于2Tb的块设别,可以使用parted命令来删除分区。
当创建一个LVM卷管理来使用active/passive多路径存储作为底层物理设备,则需要在lvm.conf配置中包含过滤设置以去除这些多路径设备。
这是因为无论何时LVM扫描到没有过滤的后备路径设备,则阵列就会在接收到故障失效信号时自动修改了活动路径到后备路径。
对于active/passive阵列要求一个命令来使后备路径激活,LV<会在这个情况下打印一条告警信息。
要在LVM配置文件(lvm.conf)中过滤掉所有SCSI设备,则包含以下过滤到devices配置部分
1
filter=["r/disk/","r/sd.*/","a/.*/"]
注意在实际环境中,需要指定特定的SCSI设备
设置DM-Multipath在设置系统的DM-Multipath之前,确保系统已经升级并包括device-mapper-mulipath软件包。
使用以下过程设置DM-Multipath的一个基本failover配置
∙编辑/etc/multipath.conf启用文件的头部配置,配置文件的部分,在初始状态,blacklist所有设备。
必须先注释掉以下配置启用来激活multipath。
将
1
blacklist{
2
devnode"*"
3
}
修改为
1
#blacklist{
2
# devnode"*"
3
#}
∙默认的DM-Multipath配置已经编译到系统中并且不需要预先在/etc/multipath.conf配置中设置。
默认的path_grouping_policy已经设置了failover,所以在配置中不需要修改默认值。
配置文件中的初始默认部分配置了系统的多路径设备格式mpathn,没有这个配置,那么多路径设备的名字将被设置为WWID的别名。
∙执行以下命令
1
modprobedm-multipath
2
servicemultipathdstart
3
multipath-v2
以上命令multipath-v2打印出具备多路径的设备。
如果该命令没有输出任何信息,则要确认所有的SAN连接已经正确设置并且系统是multipathed的。
∙
o执行multipath-v2显示输出
1
multipath-v2
sdc:
checkermsgis"readsector0checkerreportspathisdown"sdd:
checkermsgis"readsector0checkerreportspathisdown"
此时,再使用fdisk-l命令,则原来显示的
Disk/dev/sda:
21.4GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylindersof16065*512=8225280bytes DeviceBoot Start End Blocks Id System/dev/sda1 * 1 2087 16763796 83 Linux/dev/sda2 2088 2609 4192965 82 Linuxswap/SolarisDisk/dev/sdb:
577.4GB,577404665856bytes255heads,63sectors/track,70198cylindersUnits=cylindersof16065*512=8225280bytes DeviceBoot Start End Blocks Id SystemDisk/dev/sdc:
2199.0GB,2199023255552bytes255heads,63sectors/track,267349cylindersUnits=cylindersof16065*512=8225280bytesDisk/dev/sdcdoesn'tcontainavalidpartitiontableDisk/dev/sdd:
2199.0GB,2199023255552bytes255heads,63sectors/track,267349cylindersUnits=cylindersof16065*512=8225280bytesDisk/dev/sdddoesn'tcontainavalidpartitiontable
则在后面增加显示了
Disk/dev/dm-0:
577.4GB,577404665856bytes255heads,63sectors/track,70198cylindersUnits=cylindersof16065*512=8225280bytes DeviceBoot Start End Blocks Id SystemDisk/dev/dm-1:
2199.0GB,2199023255552bytes255heads,63sectors/track,267349cylindersUnits=cylindersof16065*512=8225280bytesDisk/dev/dm-1doesn'tcontainavalidpartitiontable
这表明默认情况下,所有没有分配的块设备都被识别为多路径设备。
但是,需要注意的是
"readsector0checkerreportspathisdown"
这表明SAN设备尚不能判断路径是否可用。
∙
o使用multipath-l检查设备
1
multipath-l
mpath2(360022a11000120094e3181b800000000)dm-1HUAWEI,S5600[size=2.0T][features=0][hwhandler=0][rw]\_round-robin0[prio=0][active]\_3:
0:
0:
0sdc8:
32 [active][undef]\_round-robin0[prio=0][enabled]\_3:
0:
1:
0sdd8:
48 [active][undef]mpath1(360026b90596a0f00134750591a3c2a3c)dm-0DELL,PERC6/i[size=538G][features=0][hwhandler=0][rw]\_round-robin0[prio=0][active]\_0:
2:
1:
0sdb8:
16 [active][undef]
其中,前者是华为SAN存储输出的多路径存储阵列,其中/dev/sdc和/dev/sdd是同一个设备(WWID相同)。
后者是本地设备由DellPERC6内建的RAID1SCSI存储。
单路径配置
有关如何显示SCSI设备的UUID或WWID,参考7.3.ConfiguringpersistentstorageinaRedHatEnterpriseLinux5environment
在不使用multipath的系统中,udev是一个实现LUN永久化的好方法。
∙编辑/etc/scsi_id.config配置文件,确保注释掉如下配置
1
#options=-b
∙添加以下行到/etc/scsi_id.config
1
options=-g
以上配置可以让udev假设所有连接的SCSI设备将返回UUID(唯一设备标识)。
∙通过执行以下命令scsi_id-g-s/block/sdc来显示
类似
1
scsi_id-g-s/block/sdb
360026b90596a0f00134750591a3c2a3c
可以看到就是前述使用multipath-l显示的WWID。
此外,对于multipath自动推测并忽略的sda,也能够显示UUID
scsi_id-g-s/block/sda
这样,就可以在多路径配置中,通过设置WWID的blacklist来过滤掉本地SCSI磁盘。
另外,对于各种cluster群集,如果要使用iSCSI等设备,为了能够固定映射名称,需要创建/etc/udev/rules.d/20-names.rules,在其中添加命名规则类似
KERNEL="sd*",BUS="scsi",PROGRAM="/sbin/scsi_id-g-s",RESULT=UUID,NAME=devicename
将以上的规则中UUID替换为前面查询出来的指定设备UUID(例如/dev/sdb),名称设置devicename替换为需要指定的设备名称,如asm1
这将迫使系统识别所有相应的块设备(/dev/sd*)给出相应的UUID。
当系统找到匹配的设备,将创建一个设备节点命名为/dev/devicename。
例如,这个设备可以命名为/dev/asm1。
∙最后,添加命令行到/etc/rc.local
1
/sbin/start_udev
多路径配置
在一个多路径环境中实现LUN永久化,需要定义多路径设备的别名。
要标识一个设备的UUID或WWID则遵循上述的单路径配置部分。
多路径设备将创建在/dev/mpath目录下。
例如,以下在/dev/multipath.conf配置中定义4个设备:
01
multipaths{
02
multipath{
03
wwid 3600805f30015987000000000768a0019
04
alias oramp1
05
}
06
multipath{
07
wwid 3600805f30015987000000000d643001a
08
alias oramp2
09
}
10
mulitpath{
11
wwid 3600805f3001598700000000086fc001b
12
alias oramp3
13
}
14
mulitpath{
15
wwid 3600805f300159870000000000984001c
16
alias oramp4
17
}
18
}
则以上配置将创建4个LUN设备,分别命名为/dev/mpath/oramp1,/dev/mpath/oramp2,/dev/mpath/oramp3和/dev/mpath/oramp4。
系统重启后,这些新命名将持久化。
∙执行以下命令确保多路径服务在启动时启动
1
chkconfigmultipathdon
由于user_friendly_name设置为yes,所以多路径设备创建为/dev/mapper/mpathn。
昵称:
gunguymadman 时间:
2010-07-2816:
38:
00
在生成多路径设备时忽略本地磁盘
一些主机已经具备了本地SCSI磁盘作为内部磁盘。
对于这些磁盘设备不建议使用DM-Multipath。
以下过程展示如何修改多路径配置文件以忽略本地磁盘:
∙检查哪些磁盘是本地磁盘,并标记这些磁盘到blacklist中。
例如,/dev/sda是本地内部磁盘。
注意,在默认的多路径配置中,
例如,在本例中,上述multipath-l命令输出的WWID360026b90596a0f00134750591a3c2a3c(即磁盘/dev/sdb)就是本地磁盘,需要从多路径配置文件中排除。
在/etc/multipath.conf配置中添加
1
blacklist{
2
wwid360026b90596a0f0013475046191d4cdb
3
wwid360026b90596a0f00134750591a3c2a3c
4
}
∙配置完成后,需要手工通知multipathd服务重新加载配置文件。
1
servicemultipathdreload
∙执行以下命令
1
multipath-F
2
multipath-v2
create:
mpath2(360022a11000120094e3181b800000000) HUAWEI,S5600[size=2.0T][features=0][hwhandler=0][n/a]\_round-robin0[prio=1][undef]\_3:
0:
0:
0sdc8:
32 [undef][ready]\_round-robin0[prio=1][undef]\_3:
0:
1:
0sdd8:
48 [undef][ready]
可以看到,已经排除了本地磁盘sda和sdb,另外,非常奇特的是,也不再出现"readsector0checkerreportspathisdown"报错信息。
注意,再次使用multipath-v2将不再有任何输出,这个命令只在初次使用时创建设备。
后续要使用multipath-l。
1
multipath-l
mpath2(360022a11000120094e3181b800000000)dm-0HUAWEI,S5600[size=2.0T]