LINUX下多路径MULTIPATH配置文档和相关概念
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、为什么使用multipath
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提 供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的 话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要 单独的购买license。 其中,EMC提供的就是PowerPath,HDS提供的就是HDLM,更多的存储厂商提供的软件,可参 考这里。 当然,使用系统自带的免费多路径软件包,同时也是一个比较通用的包,可以支持大多数 存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以 支持并运行的很好的。 ※ 请与IBM的RDAC、Qlogic的failover驱动区分开,它们都仅提供了Failover的功能,不 支持Load Balance负载均衡方式。但multipath根据选择的策略不同,可支持多种方式,如: Failover、Multipath等。 Failover 的功能解释:通俗地说,即当 A 无法为客户服务时,系统能够自动地切换,使 B 能够 及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。这里的
6、分区或创建lvm
以前,我考虑到从系统iostat看到的都是dm-n的设备,所以一直都是直接对dm-n操作。但 这会产生一个问题,就是没法分区。而对/dev/mapper/mpathn设备操作就没有这问题。只 要要注意,用fdisk分区并保存后,必须刷新multipath的映射表,以便其创建分区对应的 设备符,例如: # fdisk -l /dev/mapper/mpath0 Disk /dev/mapper/mpath0: 214.7 GB, 214748364800 bytes 255 heads, 63 sectors/track, 26108 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来 的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导 内核驱动的行为,比如如何创建mappered device,这些device的属性等。 用户空间部分包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置 mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配 置mappered device。device-mapper-multipath的程序中就需要调用这些库;
一、什么是multipath
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组 成的SAN环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。 也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选 择。 既然,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量 如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操 作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已, 这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而 生的。多路径的主要功能就是和存储设备一起配合实现如下功能: 1. 故障的切换和恢复 2. IO流量的负载均衡 3. 磁盘的虚拟化
所以,我们需要修改默认的规则:
defaults {
udev_dir
/dev
path_grouping_policy multibus
failback
immediate
no_path_retry
fail
user_friendly_name
yes
}
关键是path_grouping_policy一项,其他选项可参考说明文档。
3. 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是否已经成功得到。
3、启动服务及生成映射
# modprobe dm-multipath # service multipathd restart # multipath -v0
4、查看复合后的设备
# multipath -ll
会看到类似下面的信息:
mpath0 (360060e80058e980000008e9800000007)
四、配置multipath
原理看了一堆,实际配置还是比较简单的。配置文件只有一个:/etc/multipath.conf 。 配置前,请用fdisk -l 确认已可正确识别盘柜的所有LUN逻辑单元号,HDS支持多链路负载 均衡,因此每条链路都是正常的;而如果是类似EMC CX300这样仅支持负载均衡的设备,则 冗余的链路会出现I/O Error的错误。 multipath.conf的配置参数、默认值,可参考:
\_ round-robin 0 [prio=1][enabled]
\_ 5:0:0:7 sdbk 67:224 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 2:0:0:7 sdi 8:128 [active][ready]
这说明,已由四条链路sdaa/sdas/sdbk/sdi复合成一条链路,设备名为mpath0。
状态正常的话,把multipathd设置为自启动:
# chkconfig multipathd on
# mkdir /oradata
# mkfs.ext3 /dev/mapper/mpath0
# mkfs.ext3 /dev/mapper/mpath1
# blkid /dev/mapper/mpath0 生成该存储设备的UUID
1、编辑黑名单
默认情况下,multipath会把所有设备都加入到黑名单(devnode "*"),也就是禁止使用。 所以,我们首先需要取消该设置,把配置文件修改为类似下面的内容: # vim /etc/multipath.conf devnode_blacklist {
#devnode "*"
用#将此行注释掉
# uname -a
Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009
x86_64 x86_64 x86_64 GNU/Linux
# rpm -qa|grep device
device-mapper-event-1.02.32-1.el5
5、使用mpath设备
用multipath生成映射后,会在/dev目录下产生多个指向同一条链路的设备: /dev/mapper/mpathn /dev/mpath/mpathn /dev/dm-n
但它们的来源是完全不同的: /dev/mapper/mpathn 是multipath虚拟出来的多路径设备,我们应该使用这个设备; /dev/mpath/mpathn 是udev设备管理器创建的,实际上就是指向下面的dm-n设备,仅为了 方便,不能用来挂载; /dev/dm-n 是软件内部自身使用的,不能被软件以外使用,不可挂载。 简单来说,就是我们应该使用/dev/mapper/下的设备符。对该设备即可用fdisk进行分区, 或创建为pv。
2. device-mapper
device-mapper包括两大部分:内核部分和用户部分。 内核部分由device-mapper核心(multipath.ko)和一些target driver(dm-multipath.ko) 构成。dm-mod.ko是实现multipath的基础,dm-multipath其实是dm的一个target驱动。核
A 和 B 可以存在于各种领域,但一般 fail-over 特指计算机领域的数据库、应用服务、硬件设 备等的失效转移。
三、multipath的组成
我这里以红帽x86_64为例,虽然版本比较老,但下面的配置方式基本适用后面的所有版本。
引用
# cat /etc/redflag-release
Red Flag DC Server release 5.0 (Trinity SP2)
[size=20 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [prio=1][active]
\_ 3:0:0:7 sdaa 65:160 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 4:0:0:7 sdas 66:192 [active][ready]
ຫໍສະໝຸດ Baidu
Device Boot
Start
End
Blocks Id System
/dev/mapper/mpath0p1
1
26108 209712478+ 83 Linux
2、编辑默认规则
不同的device-mapper-multipath或操作系统发行版,其默认的规则都有点不同,以RedHat
x86_64为例,其path_grouping_policy默认为failover失效转移,也就是主备的方式。这
明显不符合我们的要求。(HDS支持多路径负载均衡,EMC CX300等只支持Failover)。
devnode "hda"
wwid 3600508e000000000dc7200032e08af0b
}
这里禁止使用hda,也就是光驱。另外,还限制使用本地的sda设备,这个wwid,可通过下面
的命令获得:
# scsi_id -g -u -s /block/sda
3600508e000000000dc7200032e08af0b
device-mapper-1.02.32-1.el5
device-mapper-multipath-0.4.7-30.el5
device-mapper-1.02.32-1.el5
这些是需要安装的安装包,如果没有安装需要到安装光盘中 # rpm -ivh device-mapper-* 将以上这些包全部安装 # chkconfig --list |grep multipath multipathd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 # chkconfig multipathd on
# blkid /dev/mapper/mpath1
# vim /etc/fstab
(修改该配置文件并添加如下)
UUID=47931c90-140b-45fe-9dfa-5a0f56810db3 /oradata ext3 defaults 0 0
保存退出
# mount -a
注意:要使用哪块存储设备就在fastab里面挂载就可以了
可见,一套完整的multipath由下面几部分组成:
6:关闭
1. device-mapper-multipath
提供multipathd和multipath等工具和multipath.conf等配置文件。这些工具通过device mapper的ioctr的接口创建和配置multipath设备(调用device-mapper的用户空间库。创建 的多路径设备会在/dev/mapper中);
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提 供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的 话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要 单独的购买license。 其中,EMC提供的就是PowerPath,HDS提供的就是HDLM,更多的存储厂商提供的软件,可参 考这里。 当然,使用系统自带的免费多路径软件包,同时也是一个比较通用的包,可以支持大多数 存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以 支持并运行的很好的。 ※ 请与IBM的RDAC、Qlogic的failover驱动区分开,它们都仅提供了Failover的功能,不 支持Load Balance负载均衡方式。但multipath根据选择的策略不同,可支持多种方式,如: Failover、Multipath等。 Failover 的功能解释:通俗地说,即当 A 无法为客户服务时,系统能够自动地切换,使 B 能够 及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。这里的
6、分区或创建lvm
以前,我考虑到从系统iostat看到的都是dm-n的设备,所以一直都是直接对dm-n操作。但 这会产生一个问题,就是没法分区。而对/dev/mapper/mpathn设备操作就没有这问题。只 要要注意,用fdisk分区并保存后,必须刷新multipath的映射表,以便其创建分区对应的 设备符,例如: # fdisk -l /dev/mapper/mpath0 Disk /dev/mapper/mpath0: 214.7 GB, 214748364800 bytes 255 heads, 63 sectors/track, 26108 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来 的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导 内核驱动的行为,比如如何创建mappered device,这些device的属性等。 用户空间部分包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置 mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配 置mappered device。device-mapper-multipath的程序中就需要调用这些库;
一、什么是multipath
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组 成的SAN环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。 也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选 择。 既然,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O流量 如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操 作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已, 这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而 生的。多路径的主要功能就是和存储设备一起配合实现如下功能: 1. 故障的切换和恢复 2. IO流量的负载均衡 3. 磁盘的虚拟化
所以,我们需要修改默认的规则:
defaults {
udev_dir
/dev
path_grouping_policy multibus
failback
immediate
no_path_retry
fail
user_friendly_name
yes
}
关键是path_grouping_policy一项,其他选项可参考说明文档。
3. 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是否已经成功得到。
3、启动服务及生成映射
# modprobe dm-multipath # service multipathd restart # multipath -v0
4、查看复合后的设备
# multipath -ll
会看到类似下面的信息:
mpath0 (360060e80058e980000008e9800000007)
四、配置multipath
原理看了一堆,实际配置还是比较简单的。配置文件只有一个:/etc/multipath.conf 。 配置前,请用fdisk -l 确认已可正确识别盘柜的所有LUN逻辑单元号,HDS支持多链路负载 均衡,因此每条链路都是正常的;而如果是类似EMC CX300这样仅支持负载均衡的设备,则 冗余的链路会出现I/O Error的错误。 multipath.conf的配置参数、默认值,可参考:
\_ round-robin 0 [prio=1][enabled]
\_ 5:0:0:7 sdbk 67:224 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 2:0:0:7 sdi 8:128 [active][ready]
这说明,已由四条链路sdaa/sdas/sdbk/sdi复合成一条链路,设备名为mpath0。
状态正常的话,把multipathd设置为自启动:
# chkconfig multipathd on
# mkdir /oradata
# mkfs.ext3 /dev/mapper/mpath0
# mkfs.ext3 /dev/mapper/mpath1
# blkid /dev/mapper/mpath0 生成该存储设备的UUID
1、编辑黑名单
默认情况下,multipath会把所有设备都加入到黑名单(devnode "*"),也就是禁止使用。 所以,我们首先需要取消该设置,把配置文件修改为类似下面的内容: # vim /etc/multipath.conf devnode_blacklist {
#devnode "*"
用#将此行注释掉
# uname -a
Linux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009
x86_64 x86_64 x86_64 GNU/Linux
# rpm -qa|grep device
device-mapper-event-1.02.32-1.el5
5、使用mpath设备
用multipath生成映射后,会在/dev目录下产生多个指向同一条链路的设备: /dev/mapper/mpathn /dev/mpath/mpathn /dev/dm-n
但它们的来源是完全不同的: /dev/mapper/mpathn 是multipath虚拟出来的多路径设备,我们应该使用这个设备; /dev/mpath/mpathn 是udev设备管理器创建的,实际上就是指向下面的dm-n设备,仅为了 方便,不能用来挂载; /dev/dm-n 是软件内部自身使用的,不能被软件以外使用,不可挂载。 简单来说,就是我们应该使用/dev/mapper/下的设备符。对该设备即可用fdisk进行分区, 或创建为pv。
2. device-mapper
device-mapper包括两大部分:内核部分和用户部分。 内核部分由device-mapper核心(multipath.ko)和一些target driver(dm-multipath.ko) 构成。dm-mod.ko是实现multipath的基础,dm-multipath其实是dm的一个target驱动。核
A 和 B 可以存在于各种领域,但一般 fail-over 特指计算机领域的数据库、应用服务、硬件设 备等的失效转移。
三、multipath的组成
我这里以红帽x86_64为例,虽然版本比较老,但下面的配置方式基本适用后面的所有版本。
引用
# cat /etc/redflag-release
Red Flag DC Server release 5.0 (Trinity SP2)
[size=20 GB][features="0"][hwhandler="0"]
\_ round-robin 0 [prio=1][active]
\_ 3:0:0:7 sdaa 65:160 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 4:0:0:7 sdas 66:192 [active][ready]
ຫໍສະໝຸດ Baidu
Device Boot
Start
End
Blocks Id System
/dev/mapper/mpath0p1
1
26108 209712478+ 83 Linux
2、编辑默认规则
不同的device-mapper-multipath或操作系统发行版,其默认的规则都有点不同,以RedHat
x86_64为例,其path_grouping_policy默认为failover失效转移,也就是主备的方式。这
明显不符合我们的要求。(HDS支持多路径负载均衡,EMC CX300等只支持Failover)。
devnode "hda"
wwid 3600508e000000000dc7200032e08af0b
}
这里禁止使用hda,也就是光驱。另外,还限制使用本地的sda设备,这个wwid,可通过下面
的命令获得:
# scsi_id -g -u -s /block/sda
3600508e000000000dc7200032e08af0b
device-mapper-1.02.32-1.el5
device-mapper-multipath-0.4.7-30.el5
device-mapper-1.02.32-1.el5
这些是需要安装的安装包,如果没有安装需要到安装光盘中 # rpm -ivh device-mapper-* 将以上这些包全部安装 # chkconfig --list |grep multipath multipathd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 # chkconfig multipathd on
# blkid /dev/mapper/mpath1
# vim /etc/fstab
(修改该配置文件并添加如下)
UUID=47931c90-140b-45fe-9dfa-5a0f56810db3 /oradata ext3 defaults 0 0
保存退出
# mount -a
注意:要使用哪块存储设备就在fastab里面挂载就可以了
可见,一套完整的multipath由下面几部分组成:
6:关闭
1. device-mapper-multipath
提供multipathd和multipath等工具和multipath.conf等配置文件。这些工具通过device mapper的ioctr的接口创建和配置multipath设备(调用device-mapper的用户空间库。创建 的多路径设备会在/dev/mapper中);