Linux下多路径multipath配置文档和相关概念要点_第1页
Linux下多路径multipath配置文档和相关概念要点_第2页
Linux下多路径multipath配置文档和相关概念要点_第3页
Linux下多路径multipath配置文档和相关概念要点_第4页
Linux下多路径multipath配置文档和相关概念要点_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、什么是 multipath 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组 成的SA环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的10由多条路径可以选择。既然,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/0 流量如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来看,每条路径,操 作系统会认为是一个实际存在的物理盘, 但实际上只是通向同一个物理盘的不同路径而已, 这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应

2、运而 生的。多路径的主要功能就是和存储设备一起配合实现如下功能:1. 故障的切换和恢复2. I0 流量的负载均衡3. 磁盘的虚拟化二、为什么使用 multipath 由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提 供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的 话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要 单独的购买 license 。其中,EMC提供的就是PowerPath,HDSI供的就是HDLM更多的存储厂商提供的软件,可参 考这里。当然,使用系统自带的免费多路径软件包,同时

3、也是一个比较通用的包,可以支持大多数 存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以 支持并运行的很好的。% 请与IBM的RDAC Qlogic的failover驱动区分开,它们都仅提供了 Failover的功能,不 支持Load Bala nee负载均衡 方式。但multipath根据选择的策略不同,可支持多种方式,如: Failover 、Multipath 等。Failover 的功能解释:通俗地说,即当 A 无法为客户服务时,系统能够自动地切换,使B 能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。这里的A和B可以存在于各

4、种领域,但一般 fail-over 特指计算机领域的数据库、应用服务、硬件设 备等的失效转移。三、multipath 的组成我这里以红帽x86_64为例,虽然版本比较老,但下面的配置方式基本适用后面的所有版本。引用# cat /etc/redflag-releaseRed Flag DC Server release 5.0 (Trinity SP2)# uname -aLinux localhost.localdomain 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009x86_64 x86_64 x86_64 GNU/Linux# rpm

5、 -qa|grep devicedevice-mapper-event-1.02.32-1.el5device-mapper-1.02.32-1.el5device-mapper-multipath-0.4.7-30.el5device-mapper-1.02.32-1.el5 这些是需要安装的安装包,如果没有安装需要到安装光盘中# rpm -ivh device-mapper-*将以上这些包全部安装# chkconfig -list |grep multipathmultipathd0:关闭 1:关闭 2:关闭 3:关闭 4:关闭5:关闭 6:关闭# chkconfig multipathd

6、 on可见,一套完整的 multipath 由下面几部分组成:1. device-mapper-multipath提供 multipathd 和 multipath 等工具和 multipath.conf 等配置文件。这些工具通过 device mapper的ioctr的接口创建和配置 multipath 设备(调用device-mapper的用户空间库。创建 的多路径设备会在 /dev/mapper 中);2. device-mapperdevice-mapper 包括两大部分:内核部分和用户部分。内核部分由 device-mapper 核心( multipath.ko )和一些 targe

7、t driver ( dm-multipath.ko ) 构成。dm-mod.ko是实现multipath 的基础,dm-multipath 其实是dm的个target驱动。核心完成设备的映射,而 target 根据映射关系和自身特点具体处理从 mappered device 下来 的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导内核驱动的行为,比如如何创建mappered device,这些device的属性等。用户空间部分包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置 mappered device 的库。这些库主

8、要抽象,封装了与 ioctr 通信的接口,以便方便创建和配 置mappered device。device-mapper-multipath的程序中就需要调用这些库;3. scsi_id其包含在udev程序包中,可以在 multipath.conf中配置该程序来获取scsi设备的序号。通过序号,便可以判断多个路径对应了同一设备。这个是多路径实现的关键。scsi_id 是通过sg驱动,向设备发送 EVPDpage80或page83的in query命令来查询scsi设备的标识。但一些 设备并不支持EVPD的in query命令,所以他们无法被用来生成 multipath设备。但可以改写 scsi

9、_id ,为不能提供 scsi 设备标识的设备虚拟一个标识符,并输出到标准输出。multipath 程序在创建 multipath 设备时,会调用 scsi_id ,从其标准输出中获得该设备的 scsi id 。在改写时,需要修改 scsi_id 程序的返回值为 0。因为在 multipath 程序中,会检 查该直来确定 scsi id 是否已经成功得到。四、配置 multipath原理看了一堆,实际配置还是比较简单的。配置文件只有一个: /etc/multipath.conf 。 配置前,请用fdisk -l确认已可正确识别盘柜的所有 LUN逻辑单元号,HD支持多链路负载均衡,因此每条链路都

10、是正常的;而如果是类似EMCCX30C这样仅支持负载均衡的设备,则冗余的链路会出现 I/O Error 的错误。multipath.conf 的配置参数、默认值,可参考:1、编辑黑名单默认情况下, multipath 会把所有设备都加入到黑名单( devnode "*" ),也就是禁止使用。 所以,我们首先需要取消该设置,把配置文件修改为类似下面的内容:# vim /etc/multipath.confdevnode_blacklist #dev node "*"用#将此行注释掉devnode "hda"wwid 3600508e00

11、0000000dc7200032e08af0b 这里禁止使用hda,也就是光驱。另外,还限制使用本地的sda设备,这个wwid,可通过下面的命令获得:# scsi_id -g -u -s /block/sda3600508e000000000dc7200032e08af0b2、编辑默认规则不同的device-mapper-multipath或操作系统发行版,其默认的规则都有点不同,以RedHatx86_64为例,其path_grouping_policy默认为failover 失效转移,也就是主备的方式。这明显不符合我们的要求。(HD支持多路径负载均衡,EMC CX30等只支持Failover

12、 )。 所以,我们需要修改默认的规则:defaults udev_dir/devpath_group in g_policy multibusfailbackimmediaten o_path_retry failuser_frie ndly_ nameyes关键是path_grouping_policy 项,其他选项可参考说明文档。3、启动服务及生成映射# modprobe dm-multipath# service multipathd restart# multipath -v04、查看复合后的设备# multipath -ll会看到类似下面的信息:mpath0 (360060e8005

13、8e980000008e9800000007)size=20 GBfeatures="0"hwhandler="0"_ round-robin 0 prio=1active_ 3:0:0:7 sdaa 65:160 activeready_ round-robin 0 prio=1enabled_ 4:0:0:7 sdas 66:192 activeready_ round-robin 0 prio=1enabled_ 5:0:0:7 sdbk 67:224 activeready_ round-robin 0 prio=1enabled_ 2:0:0:

14、7 sdi 8:128 activeready这说明,已由四条链路 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# blkid /dev/mapper/mpath1# vim /etc/fstab( 修改该配置文件并添加如下 )U

15、UID=47931c90-140b-45fe-9dfa-5a0f56810db3 /oradata ext3 defaults 0 0 保存退出# mount -a注意:要使用哪块存储设备就在 fastab 里面挂载就可以了5、使用mpath设备用multipath生成映射后,会在/dev目录下产生多个指向同一条链路的设备:/dev/mapper/mpath n/dev/mpath/mpath n /dev/dm-n/dev/mpath/mpath n是udev设备管理器创建的,实际上就是指向下面的dm-n设备,仅为了方便,不能用来挂载;/dev/dm-n是软件内部自身使用的,不能被软件以外使

16、用,不可挂载。简单来说,就是我们应该使用/dev/mapper/下的设备符。对该设备即可用fdisk进行分区,或创建为pv。6、分区或创建lvm以前,我考虑到从系统iostat看到的都是dm-n的设备,所以一直都是直接对 dm-n操作。但 这会产生一个问题,就是没法分区。而对/dev/mapper/mpathn设备操作就没有这问题。只要要注意,用fdisk分区并保存后,必须刷新 multipath的映射表,以便其创建分区对应的 设备符,例如:# fdisk -l /dev/mapper/mpathODisk /dev/mapper/mpath0: 214.7 GB, 214748364800

17、bytes255 heads, 63 sectors/track, 26108 cyli ndersUnits = cyli nders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System/dev/mapper/mpath0p1126108 209712478+ 83 Linux# multipath -F#删除现有路径两个新的路径就会被删除# multipath -v0#格式化路径# ll /dev/mapper/mpath0p1brw-rw- 1 root disk 253, 2 5月 7 07:40 /

18、dev/mapper/mpath0p1同样的,mpath n或其分区都可用来做pv使用:# pvcreate /dev/mapper/mpath0p1# vgcreate test /dev/mapper/mpath0p1# lvcreate -L 1g -n lv1 test# lvdisplay # mkfs.ext3 /dev/test/lv1 注意: 根据网上的资料,有部分 multipath 版本存在与 lvm 兼容的问题。具体表现是,使用 device-mapper设备创建lvm完成,重启后,虽然lvm仍存在,但/dev/mapper下的设备丢失。 为了防止可能的意外,建议还是修改

19、一下lvm的配置文件/etc/lvm/lvm.conf,加入:types="device-mapper", 17、其他最简单的测试方法,是用dd往磁盘读写数据,然后用iostat观察各通道的流量和状态,以 判断 Failover 失效转移 或负载均衡方式是否正常:# dd if=/dev/zero of=/dev/mapper/mpath0# iostat -k 2另外,如果是在由多台服务器构建集群环境中,为了让每台服务器识别的mpathn设备顺序一致,需进行wwid的绑定工作,请参考后面 自定义设备名称"中的内容。五、答疑1、为什么黑名单中不直接使用 devno

20、de "sda" 呢?因为按Linux对设备的编号,当设备从 sda到sdz时,后一个设备应该是sdaa。而multipath 对黑名单的设置是以匹配的方式进行的,也就是说,如果你设置为 devnode "sda" ,那么除 了sda为,sdaa、sdab等的设备(通道)都会被加入到黑名单中,而禁止使用。当然,你也 可以参考配置文件中的样式,以正规表达式的形式进行描述:dev node "Asda$"。但考虑到每次重启后,udev分配的盘符可能都不同(没有做 udev绑定的情况),所以,我 觉得以wwid的方式处理更可靠。2、为存储定

21、制特定的策略在前面的配置中,我们已经在 /etc/mulitpah.conf 中配置了多路径的默认path_grouping_policy 为multibus。但有时候,同一台机器上如果连接了一个以上的存储 时,可能默认规则并不完全适用。这时,我们可以给特定的存储定制多路径符合的策略。 a、 mulipath 命令 该命令提供了一个 -p 的参数,可以修改默认策略,参数有: -p policy force all maps to specified policy :failover 1 path per priority group multibusall paths in 1 priorit

22、y groupgroup_by_serial 1 priority group per serial group_by_prio1 priority group per priority lvlgroup_by_node_name 1 priority group per target node例如,执行:# multipath -F# multipath -p failover -v0 有如下结果:引用mpath18 (360060e8010463ef004f2b79f00000006) size=320 GBfeatures="0"hwhandler="0&q

23、uot;_ round-robin 0 prio=2active_ 5:0:0:6 sdaf 65:240 activeready_ 4:0:0:6 sdv 65:80 activeready_ round-robin 0 enabled_ 2:0:0:6 sdb 8:16 activeready_ 3:0:0:6 sdl 8:176 activeready这说明,当你对mpath18设备读写时,sdaf、sdv会处于active状态,都有数据流,但sdb、 sdl 组成的链路是 enabled ,作为 ready 情况。这为 Failover (主备)情况,仅当 sdaf 、 sdv 组成的

24、链路出现问题时,才会切换到 sdb、 sdl 的链路上。b、修改配置文件看看存储的可以在配置文件中为指定的存储定义策略。首先,可以用multipath -v3 -ll信息,例如,我这里的机器就同时连接了两个不同的存储:= path info sdaa (mask 0x5) = bus = 1 dev_t = 65:160 size = 10487040 vendor = HITACHI product = OPEN-V rev = 6006 h:b:t:l = 2:0:1:24 tgt_node_name = 0x50060e80058e9800 path checker = readsect

25、or0 (internal default) state = 2 uid = 360060e80058e980000008e9800000058 (cache) = path info sdaf (mask 0x5) = bus = 1 dev_t = 65:240 size = 671088640 vendor = HITACHI product = DF600F rev = 0000 h:b:t:l = 3:0:0:6 tgt_node_name = 0x50060e8010463ef1 path checker = readsector0 (internal default) state

26、 = 2 uid = 360060e8010463ef004f2b79f00000006 (cache)默认情况下, multipath 已经支持大部分常见的存储型号 (可见 multipath.conf.defaults ), 但不同的 multipath 版本可能都有些不同。这时,建议参考存储的官方文档: devices device vendor"HITACHI"/product "OPEN-V" / path_grouping_policy group_by_prio /getuid_callout "/sbin/scsi_id -p

27、0x80 -g -u -s /block/%n" /一设备号使用的默认程序path_checker readsector0 /path_selector "round-robin 0" prio_callout "/sbin/mpath_prio_alua 程序failback immediate /hardware_handler"0"/特定的操作的模块。no_path_retryqueue/效路径的次数的数值rr_min_io 100 / 路径之前的 IO 请求的数目 千万不要写错 path_checker (可能值有:厂商名称产品型号默认的路径组策略获得唯决定路径状态的方法/选择那条路径进行下一个10操作的方法/dev/%n" / 获取有限级数值使用的默认故障恢复的模式确认用来在路径切换和10错误时,执行在 disable queue 之前系统尝试使用失在当前的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论