Linux Multipath多路径配置与使用案例
本文源自:http://blog.itpub.net/31015730/viewspace-2146732/
在Linux平台一部分存储产品使用操作系统自带的多路径软件,包括最常见的HP和IBM的部分存储产品,在Linux自带的多路径软件叫做multipath,这篇文章以HP EVA系列存储在Linux平台的使用为例,详细的在Linux平台配置和使用多路径。
那么问题就来了,到底什么是多路径?
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量如何分配?其中一条路径坏掉了,如何处理?从在操作系统的角度来看,每条路径,操作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。
多路径的主要功能就是和存储设备一起配合实现如下功能:
1、故障的切换和恢复
2、IO流量的负载均衡
3、磁盘的虚拟化
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要单独的购买license。好在, RedHat和Suse的2.6的内核中都自带了免费的多路径软件包,并且可以免费使用,同时也是一个比较通用的包,可以支持大多数存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以支持并运行的很好的。
一、Linux下multipath介绍
在redhat中,安装操作系统的时候multipath已经默认被安装,查看安装情况:
[root@seaing ~]# rpm -qa | grep device-mapper
device-mapper-multipath-0.4.7-34.el5
device-mapper-1.02.39-1.el5
device-mapper-1.02.39-1.el5
device-mapper-event-1.02.39-1.el5
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是否已经成功得到。
想了解更多关于Device Mapper Multipath(DM-Multipath),请参考博文:http://blog.csdn.net/holandstone/article/details/7050234
二、Linux下multipath详细配置
首先,我们本次Linux下multipath的整体的拓扑结构,如下所示:
因为在安装操作系统的时候,multipath的软件包已经那装好了,所以这里就不在需要安装,如果没有安装的话,需要手动的进行安装。
1、检查安装是否正常
[root@seaing ~]# lsmod |grep dm_multipath
dm_multipath 56921 2 dm_round_robin
scsi_dh 42177 1 dm_multipath
dm_mod 101649 19 dm_multipath,dm_raid45,dm_snapshot,dm_zero,dm_mirror,dm_log
如果模块没有加载成功,请使用下面的命令初始化DM:
[root@seaing ~]#modprobe dm-multipath
[root@seaing ~]#modprobe dm-round-robin
[root@seaing ~]#service multipathd start
[root@seaing ~]#multipath –v2
2、编辑配置文件
[root@seaing ~]# cat /etc/multipath.conf
blacklist {
devnode "^sda"
}
defaults {
user_friendly_names no
}
multipaths {
multipath {
wwid 3600508b4000892b90002a00000050000 #磁盘的WWID
alias comsys-dm0 #映射后的别名,自己命名
path_grouping_policy multibus #路径组策略
path_checker tur #决定路径状态的方法
path_selector "round-robin 0" #选择那一条路径进行下次IO操作
}
multipath {
wwid 3600508b4000892b90002a00000090000
alias comsys-dm1
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
multipath {
wwid 3600508b4000892b90002a00000140000
alias comsys-backup
path_grouping_policy multibus
path_checker tur
path_selector "round-robin 0"
}
}
devices {
device {
vendor "HP" #厂商名称,可通过multipath –v3获取到
product "HSV300" #产品型号
path_grouping_policy multibus #默认的路径组策略
getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序
path_checker readsector0 #决定路径状态的方法
path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法
#failback immediate #故障恢复的模式
#no_path_retry queue #在disable queue之前系统尝试使用失效路径的次数的数值
#rr_min_io 100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目
}
}
备注:
其中 wwid,vendor,product, getuid_callout这些参数可以通过:multipath -v3命令来获取。如果在/etc/multipath.conf中有设定各wwid别名,别名会覆盖此设定。
下面是两种方法来获取WWID
(1)默认情况下,将使用 /var/lib/multipath/bindings 内的配置设定具体每个多路径设备名,如果在/etc/multipath.conf中有设定各wwid 别名,别名会覆盖此设定。
[root@seaing ~]# cat /var/lib/multipath/bindings
# Multipath bindings, Version : 1.0
# NOTE: this file is automatically maintained by the multipath program.
# You should not need to edit this file in normal circumstances.
#
# Format:
# alias wwid
#
mpath0 SATA_WDC_WD5003ABYX-_WD-WMAYP4135415
mpath1 3600508b4000892b90002a00000050000
mpath2 3600508b4000892b90002a00000090000
(2)通过multipath -v3命令来获取
[root@seaing ~]# multipath -v3
dm-0: blacklisted
dm-1: blacklisted
dm-2: blacklisted
dm-3: blacklisted
dm-4: blacklisted
loop0: blacklisted
loop1: blacklisted
loop2: blacklisted
loop3: blacklisted
loop4: blacklisted
loop5: blacklisted
loop6: blacklisted
loop7: blacklisted
md0: blacklisted
ram0: blacklisted
ram10: blacklisted
ram11: blacklisted
ram12: blacklisted
ram13: blacklisted
ram14: blacklisted
ram15: blacklisted
ram1: blacklisted
ram2: blacklisted
ram3: blacklisted
ram4: blacklisted
ram5: blacklisted
ram6: blacklisted
ram7: blacklisted
ram8: blacklisted
ram9: blacklisted
sda: blacklisted
sdb: not found in pathvec
sdb: mask = 0x1f
sdb: bus = 1
sdb: dev_t = 8:16
sdb: size = 209715200
sdb: vendor = HP
sdb: product = HSV300
sdb: rev = 0952
sdb: h:b:t:l = 4:0:0:1
sdb: tgt_node_name = 0x50014380013be3f0
sdb: serial = P5512G29SVP02Q
sdb: path checker = readsector0 (controller setting)
sdb: checker timeout = 60000 ms (sysfs setting)
sdb: state = 2
sdb: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdb: uid = 3600508b4000892b90002a00000050000 (callout)
sdb: getprio = NULL (internal default)
sdb: prio = 1
sdc: not found in pathvec
sdc: mask = 0x1f
sdc: bus = 1
sdc: dev_t = 8:32
sdc: size = 419430400
sdc: vendor = HP
sdc: product = HSV300
sdc: rev = 0952
sdc: h:b:t:l = 4:0:0:2
sdc: tgt_node_name = 0x50014380013be3f0
sdc: serial = P5512G29SVP02Q
sdc: path checker = readsector0 (controller setting)
sdc: checker timeout = 60000 ms (sysfs setting)
sdc: state = 2
sdc: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdc: uid = 3600508b4000892b90002a00000090000 (callout)
sdc: getprio = NULL (internal default)
sdc: prio = 1
sdd: not found in pathvec
sdd: mask = 0x1f
sdd: bus = 1
sdd: dev_t = 8:48
sdd: size = 209715200
sdd: vendor = HP
sdd: product = HSV300
sdd: rev = 0952
sdd: h:b:t:l = 4:0:0:3
sdd: tgt_node_name = 0x50014380013be3f0
sdd: serial = P5512G29SVP02Q
sdd: path checker = readsector0 (controller setting)
sdd: checker timeout = 60000 ms (sysfs setting)
sdd: state = 2
sdd: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdd: uid = 3600508b4000892b90002a00000140000 (callout)
sdd: getprio = NULL (internal default)
sdd: prio = 1
sde: not found in pathvec
sde: mask = 0x1f
sde: bus = 1
sde: dev_t = 8:64
sde: size = 209715200
sde: vendor = HP
sde: product = HSV300
sde: rev = 0952
sde: h:b:t:l = 4:0:1:1
sde: tgt_node_name = 0x50014380013be3f0
sde: serial = P5512G29SVP01O
sde: path checker = readsector0 (controller setting)
sde: checker timeout = 60000 ms (sysfs setting)
sde: state = 2
sde: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sde: uid = 3600508b4000892b90002a00000050000 (callout)
sde: getprio = NULL (internal default)
sde: prio = 1
sdf: not found in pathvec
sdf: mask = 0x1f
sdf: bus = 1
sdf: dev_t = 8:80
sdf: size = 419430400
sdf: vendor = HP
sdf: product = HSV300
sdf: rev = 0952
sdf: h:b:t:l = 4:0:1:2
sdf: tgt_node_name = 0x50014380013be3f0
sdf: serial = P5512G29SVP01O
sdf: path checker = readsector0 (controller setting)
sdf: checker timeout = 60000 ms (sysfs setting)
sdf: state = 2
sdf: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdf: uid = 3600508b4000892b90002a00000090000 (callout)
sdf: getprio = NULL (internal default)
sdf: prio = 1
sdg: not found in pathvec
sdg: mask = 0x1f
sdg: bus = 1
sdg: dev_t = 8:96
sdg: size = 209715200
sdg: vendor = HP
sdg: product = HSV300
sdg: rev = 0952
sdg: h:b:t:l = 4:0:1:3
sdg: tgt_node_name = 0x50014380013be3f0
sdg: serial = P5512G29SVP01O
sdg: path checker = readsector0 (controller setting)
sdg: checker timeout = 60000 ms (sysfs setting)
sdg: state = 2
sdg: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdg: uid = 3600508b4000892b90002a00000140000 (callout)
sdg: getprio = NULL (internal default)
sdg: prio = 1
sdh: not found in pathvec
sdh: mask = 0x1f
sdh: bus = 1
sdh: dev_t = 8:112
sdh: size = 209715200
sdh: vendor = HP
sdh: product = HSV300
sdh: rev = 0952
sdh: h:b:t:l = 5:0:0:1
sdh: tgt_node_name = 0x50014380013be3f0
sdh: serial = P5512G29SVP02Q
sdh: path checker = readsector0 (controller setting)
sdh: checker timeout = 60000 ms (sysfs setting)
sdh: state = 2
sdh: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdh: uid = 3600508b4000892b90002a00000050000 (callout)
sdh: getprio = NULL (internal default)
sdh: prio = 1
sdi: not found in pathvec
sdi: mask = 0x1f
sdi: bus = 1
sdi: dev_t = 8:128
sdi: size = 419430400
sdi: vendor = HP
sdi: product = HSV300
sdi: rev = 0952
sdi: h:b:t:l = 5:0:0:2
sdi: tgt_node_name = 0x50014380013be3f0
sdi: serial = P5512G29SVP02Q
sdi: path checker = readsector0 (controller setting)
sdi: checker timeout = 60000 ms (sysfs setting)
sdi: state = 2
sdi: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdi: uid = 3600508b4000892b90002a00000090000 (callout)
sdi: getprio = NULL (internal default)
sdi: prio = 1
sdj: not found in pathvec
sdj: mask = 0x1f
sdj: bus = 1
sdj: dev_t = 8:144
sdj: size = 209715200
sdj: vendor = HP
sdj: product = HSV300
sdj: rev = 0952
sdj: h:b:t:l = 5:0:0:3
sdj: tgt_node_name = 0x50014380013be3f0
sdj: serial = P5512G29SVP02Q
sdj: path checker = readsector0 (controller setting)
sdj: checker timeout = 60000 ms (sysfs setting)
sdj: state = 2
sdj: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdj: uid = 3600508b4000892b90002a00000140000 (callout)
sdj: getprio = NULL (internal default)
sdj: prio = 1
sdk: not found in pathvec
sdk: mask = 0x1f
sdk: bus = 1
sdk: dev_t = 8:160
sdk: size = 209715200
sdk: vendor = HP
sdk: product = HSV300
sdk: rev = 0952
sdk: h:b:t:l = 5:0:1:1
sdk: tgt_node_name = 0x50014380013be3f0
sdk: serial = P5512G29SVP01O
sdk: path checker = readsector0 (controller setting)
sdk: checker timeout = 60000 ms (sysfs setting)
sdk: state = 2
sdk: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdk: uid = 3600508b4000892b90002a00000050000 (callout)
sdk: getprio = NULL (internal default)
sdk: prio = 1
sdl: not found in pathvec
sdl: mask = 0x1f
sdl: bus = 1
sdl: dev_t = 8:176
sdl: size = 419430400
sdl: vendor = HP
sdl: product = HSV300
sdl: rev = 0952
sdl: h:b:t:l = 5:0:1:2
sdl: tgt_node_name = 0x50014380013be3f0
sdl: serial = P5512G29SVP01O
sdl: path checker = readsector0 (controller setting)
sdl: checker timeout = 60000 ms (sysfs setting)
sdl: state = 2
sdl: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdl: uid = 3600508b4000892b90002a00000090000 (callout)
sdl: getprio = NULL (internal default)
sdl: prio = 1
sdm: not found in pathvec
sdm: mask = 0x1f
sdm: bus = 1
sdm: dev_t = 8:192
sdm: size = 209715200
sdm: vendor = HP
sdm: product = HSV300
sdm: rev = 0952
sdm: h:b:t:l = 5:0:1:3
sdm: tgt_node_name = 0x50014380013be3f0
sdm: serial = P5512G29SVP01O
sdm: path checker = readsector0 (controller setting)
sdm: checker timeout = 60000 ms (sysfs setting)
sdm: state = 2
sdm: getuid = /sbin/scsi_id -g -u -s /block/%n (controller setting)
sdm: uid = 3600508b4000892b90002a00000140000 (callout)
sdm: getprio = NULL (internal default)
sdm: prio = 1
sr0: blacklisted
===== paths list =====
uuid hcil dev dev_t pri dm_st chk_st vend/pr
3600508b4000892b90002a00000050000 4:0:0:1 sdb 8:16 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000090000 4:0:0:2 sdc 8:32 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000140000 4:0:0:3 sdd 8:48 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000050000 4:0:1:1 sde 8:64 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000090000 4:0:1:2 sdf 8:80 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000140000 4:0:1:3 sdg 8:96 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000050000 5:0:0:1 sdh 8:112 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000090000 5:0:0:2 sdi 8:128 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000140000 5:0:0:3 sdj 8:144 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000050000 5:0:1:1 sdk 8:160 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000090000 5:0:1:2 sdl 8:176 1 [undef][ready] HP,HSV3
3600508b4000892b90002a00000140000 5:0:1:3 sdm 8:192 1 [undef][ready] HP,HSV3
params = 0 0 1 1 round-robin 0 4 1 8:32 1000 8:80 1000 8:128 1000 8:176 1000
status = 2 0 0 0 1 1 A 0 4 0 8:32 A 0 8:80 A 0 8:128 A 0 8:176 A 0
params = 0 0 1 1 round-robin 0 4 1 8:16 1000 8:64 1000 8:112 1000 8:160 1000
status = 2 0 0 0 1 1 A 0 4 0 8:16 A 0 8:64 A 0 8:112 A 0 8:160 A 0
params = 0 0 1 1 round-robin 0 4 1 8:48 1000 8:96 1000 8:144 1000 8:192 1000
status = 2 0 0 0 1 1 A 0 4 0 8:48 A 0 8:96 A 0 8:144 A 0 8:192 A 0
sdb: ownership set to comsys-dm0
sdb: not found in pathvec
sdb: mask = 0xc
sdb: state = 2
sdb: prio = 1
sde: ownership set to comsys-dm0
sde: not found in pathvec
sde: mask = 0xc
sde: state = 2
sde: prio = 1
sdh: ownership set to comsys-dm0
sdh: not found in pathvec
sdh: mask = 0xc
sdh: state = 2
sdh: prio = 1
sdk: ownership set to comsys-dm0
sdk: not found in pathvec
sdk: mask = 0xc
sdk: state = 2
sdk: prio = 1
comsys-dm0: pgfailover = -1 (internal default)
comsys-dm0: pgpolicy = multibus (LUN setting)
comsys-dm0: selector = round-robin 0 (LUN setting)
comsys-dm0: features = 0 (internal default)
comsys-dm0: hwhandler = 0 (internal default)
comsys-dm0: rr_weight = 1 (internal default)
comsys-dm0: minio = 1000 (config file default)
comsys-dm0: no_path_retry = NONE (internal default)
pg_timeout = NONE (internal default)
comsys-dm0: set ACT_NOTHING (map unchanged)
sdc: ownership set to comsys-dm1
sdc: not found in pathvec
sdc: mask = 0xc
sdc: state = 2
sdc: prio = 1
sdf: ownership set to comsys-dm1
sdf: not found in pathvec
sdf: mask = 0xc
sdf: state = 2
sdf: prio = 1
sdi: ownership set to comsys-dm1
sdi: not found in pathvec
sdi: mask = 0xc
sdi: state = 2
sdi: prio = 1
sdl: ownership set to comsys-dm1
sdl: not found in pathvec
sdl: mask = 0xc
sdl: state = 2
sdl: prio = 1
comsys-dm1: pgfailover = -1 (internal default)
comsys-dm1: pgpolicy = multibus (LUN setting)
comsys-dm1: selector = round-robin 0 (LUN setting)
comsys-dm1: features = 0 (internal default)
comsys-dm1: hwhandler = 0 (internal default)
comsys-dm1: rr_weight = 1 (internal default)
comsys-dm1: minio = 1000 (config file default)
comsys-dm1: no_path_retry = NONE (internal default)
pg_timeout = NONE (internal default)
comsys-dm1: set ACT_NOTHING (map unchanged)
sdd: ownership set to comsys-backup
sdd: not found in pathvec
sdd: mask = 0xc
sdd: state = 2
sdd: prio = 1
sdg: ownership set to comsys-backup
sdg: not found in pathvec
sdg: mask = 0xc
sdg: state = 2
sdg: prio = 1
sdj: ownership set to comsys-backup
sdj: not found in pathvec
sdj: mask = 0xc
sdj: state = 2
sdj: prio = 1
sdm: ownership set to comsys-backup
sdm: not found in pathvec
sdm: mask = 0xc
sdm: state = 2
sdm: prio = 1
comsys-backup: pgfailover = -1 (internal default)
comsys-backup: pgpolicy = multibus (LUN setting)
comsys-backup: selector = round-robin 0 (LUN setting)
comsys-backup: features = 0 (internal default)
comsys-backup: hwhandler = 0 (internal default)
comsys-backup: rr_weight = 1 (internal default)
comsys-backup: minio = 1000 (config file default)
comsys-backup: no_path_retry = NONE (internal default)
pg_timeout = NONE (internal default)
comsys-backup: set ACT_NOTHING (map unchanged)
下面是相关参数的标准文档的介绍:
Attribute |
Description |
|||||||||
wwid |
Specifies the WWID of the multipath device to which themultipath attributes apply. This parameter is mandatory for this section of themultipath.conf file. |
|||||||||
alias |
Specifies the symbolic name for the multipath device to which themultipath attributes apply. If you are usinguser_friendly_names, do not set this value tompathn; this may conflict with an automatically assigned user friendly name and give you incorrect device node names. |
|||||||||
path_grouping_policy |
|
|||||||||
path_selector |
|
|||||||||
failback |
|
|||||||||
prio |
|
|||||||||
no_path_retry |
|
|||||||||
rr_min_io |
Specifies the number of I/O requests to route to a path before switching to the next path in the current path group. This setting is only for systems running kernels older that 2.6.31. Newer systems should userr_min_io_rq. The default value is 1000. |
|||||||||
rr_min_io_rq |
Specifies the number of I/O requests to route to a path before switching to the next path in the current path group, using request-based device-mapper-multipath. This setting should be used on systems running current kernels. On systems running kernels older than 2.6.31, use rr_min_io. The default value is 1. |
|||||||||
rr_weight |
If set to priorities, then instead of sending rr_min_iorequests to a path before calling path_selector to choose the next path, the number of requests to send is determined byrr_min_io times the path's priority, as determined by theprio function. If set to uniform, all path weights are equal. |
|||||||||
flush_on_last_del |
If set to yes, then multipath will disable queueing when the last path to a device has been deleted. |
3、启动multipathd服务并设置其自动启动
[root@seaing ~]#service multipathd restart
[root@seaing ~]#chkconfig --level 345 multipathd on
[root@seaing ~]#chkconfig --list | grep multipathd
4、检查multipath聚合后的设备名,以及设备对应的链路情况
[root@seaing ~]# multipath -ll
comsys-dm1 (3600508b4000892b90002a00000090000) dm-3 HP,HSV300
[size=200G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
\_ 4:0:0:2 sdc 8:32 [active][ready]
\_ 4:0:1:2 sdf 8:80 [active][ready]
\_ 5:0:0:2 sdi 8:128 [active][ready]
\_ 5:0:1:2 sdl 8:176 [active][ready]
comsys-dm0 (3600508b4000892b90002a00000050000) dm-2 HP,HSV300
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
\_ 4:0:0:1 sdb 8:16 [active][ready]
\_ 4:0:1:1 sde 8:64 [active][ready]
\_ 5:0:0:1 sdh 8:112 [active][ready]
\_ 5:0:1:1 sdk 8:160 [active][ready]
comsys-backup (3600508b4000892b90002a00000140000) dm-4 HP,HSV300
[size=100G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
\_ 4:0:0:3 sdd 8:48 [active][ready]
\_ 4:0:1:3 sdg 8:96 [active][ready]
\_ 5:0:0:3 sdj 8:144 [active][ready]
\_ 5:0:1:3 sdm 8:192 [active][ready]
5、检查配置是否成功
如果配置正确的话就会在/dev/mapper/目录下多出mpath0、mpath1(自动分配的名称)等之类设备,但是因为作者在配置的时候,起了别名,所以会使用别名来代替自动分配的名称
[root@seaing ~]# ll /dev/mapper/
total 0
brw-rw---- 1 root disk 253, 4 Oct 26 14:30 comsys-backup
brw-rw---- 1 root disk 253, 2 Oct 26 14:30 comsys-dm0
brw-rw---- 1 root disk 253, 3 Oct 26 14:30 comsys-dm1
crw------- 1 root root 10, 63 Oct 26 14:30 control
brw-rw---- 1 root disk 253, 0 Oct 26 14:30 VolGroup00-LogVol00
brw-rw---- 1 root disk 253, 1 Oct 26 14:30 VolGroup00-LogVol01
用fdisk -l命令可以看到多路径软件创建的磁盘,如下图中的/dev/dm-[0-3]
[root@seaing ~]# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 60801 488279610 8e Linux LVM
Disk /dev/sdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sde doesn't contain a valid partition table
Disk /dev/sdf: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdf doesn't contain a valid partition table
Disk /dev/sdg: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdg doesn't contain a valid partition table
Disk /dev/sdh: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdh doesn't contain a valid partition table
Disk /dev/sdi: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdi doesn't contain a valid partition table
Disk /dev/sdj: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdj doesn't contain a valid partition table
Disk /dev/sdk: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdk doesn't contain a valid partition table
Disk /dev/sdl: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdl doesn't contain a valid partition table
Disk /dev/sdm: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdm doesn't contain a valid partition table
Disk /dev/dm-2: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-2 doesn't contain a valid partition table
Disk /dev/dm-3: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-3 doesn't contain a valid partition table
Disk /dev/dm-4: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-4 doesn't contain a valid partition table
[root@seaing ~]# ll /dev/mpath/
total 0
lrwxrwxrwx 1 root root 7 Oct 26 14:30 comsys-backup -> ../dm-4
lrwxrwxrwx 1 root root 7 Oct 26 14:30 comsys-dm0 -> ../dm-2
lrwxrwxrwx 1 root root 7 Oct 26 14:30 comsys-dm1 -> ../dm-3
multipath基本操作命令
[root@seaing ~]#/etc/init.d/multipathd start #开启mulitipath服务
[root@seaing ~]#multipath -F #删除现有路径
[root@seaing ~]#multipath -v2 #格式化路径
[root@seaing ~]#multipath -ll #查看多路径
三、multipath的使用案例
要对多路径软件生成的磁盘进行操作直接操作/dev/mapper/目录下的磁盘就行。在对多路径软件生成的磁盘进行分区之前最好运行一下pvcreate命令:
用fdisk对多路径软件生成的磁盘进行分区保存时会有一个报错,此报错不用理会。
fdisk对多路径软件生成的磁盘进行分区之后,所生成的磁盘分区并没有马上添加到/dev/目录下,此时我们要重启IPSAN或者FCSAN的驱动,如果是用iscsi-initiator来连接IPSAN的重启ISCSI服务就可以发现所生成的磁盘分区了;如果是FCSAN的话,需要重新启动操作系统才能识别到。
对comsys-dm0p1分区格式化成ext3文件系统
当然,也可以将磁盘创建成物理卷,然后在物理卷基础上创建卷组,然后创建逻辑卷,最后在格式化成文件系统进行挂载,下面的案例就是通过这种方法实现的(注意:下面的案例与上面的案例并没有联系,读者朋友请注意!)
----------------------------------------------------------
《高性能SQL调优精要与案例解析》
blog1:http://www.cnblogs.com/lhdz_bj
blog2:http://blog.itpub.net/8484829
blog3:http://blog.csdn.net/tuning_optmization