打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux Device Mapper Multipathing技术

在SAN存储网络中,冗余地访问存储设备是整个系统的关键技术之一,在Linux平台,开源的解决方案之一是DM-Multipath。

Device Mapper Multipathing ( DM-Multipath )允许在服务器节点和存储阵列之间配置多个I/O路径但仍视为一个单一存储设备。这些I/O路径是物理SAN连接,可以包含独立的数据线,交换机和控制 器。多路径集成了I/O路径,创建了包含集成多路径的一个新设备。

本文主体是基于Red Hat管理手册 Red Hat Enterprise Linux 5 DM Multipath – DM Multipath Configuration and Administration Edition 3 结合项目实施过程中的实践撰写的。文档以Red Hat英文管理手册翻译为主,并完整经过实践。

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/Passive Mulstipath Configuration with one RAID Devices


配置说明:

    • 提供了HBA,FC cable,SAN switch和阵列控制器failover
    • 不支持硬件存储阵列故障failover
  • 更为复杂的 Active/Passive Mulstipath Configuration with one RAID Devices


配置说明:

    • 支持全冗余硬件failover
    • 数据冗余需要通过软件来实现
存储阵列支持

默认情况 下, 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 配置文件:
    • 去掉默认的blacklist
    • 修改需要的现有默认配置
    • 保存配置文件
  • 启动multipath服务
  • 使用 multipath 命令创建多路径设备
多路径设备

当没有使用 DM-Multipath 时,任何从服务器节点到一个存储控制器的路径都会被视为系统一个独立的设备,甚至这些I/O路径连接相同的服务器节点到相同的存储控制器。 DM-Multipath 通过创建在底层设备上再一个多路径设备,提供了一个在逻辑上组织I/O路径的方法。

多路径设备标识

每个多路径设备都具备一个 全局标识(WWID, World Wide Identifir),这个标识生成后是全局唯一并且不能修改。默认情况下,一个多路径设备是设置为它的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_namesalias 选项,一个多路径设备具有数字属性。可以在多路径配置文件的multipaths 部分对一个特定的多路径设备创建一个设备项来修改这些属性。

在逻辑卷中使用多路径设备

在创建多路径设备后,可以使用多路径设 备作为一个物理设备命名来创建一个LVM逻辑卷管理。例如,如果/dev/mapper/mpath0 是一个多路径设备,则以下命令可以把 /dev/mapper/mpath0 作为一个物理卷。

1pvcreate /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 配置部分

1filter = [ 'r/disk/', 'r/sd.*/', 'a/.*/' ]



注意在实际环境中,需要指定特定的SCSI设备

设置 DM-Multipath在设置系统的DM-Multipath之前,确保系统已经 升级并包括 device-mapper-mulipath 软件包。

使用以下过 程设置 DM-Multipath 的一个基本failover配置

  • 编辑 /etc/multipath.conf 启用文件的头部配置,配置文件的部分,在初始状态,blacklist所有设备。必须先注释掉以下配置启用来激活multipath。

1blacklist {

2        devnode '*'

3}



修改为

1# blacklist {

2#        devnode '*'

3# }



  • 默认的DM-Multipath配置已经编译到系统中并且不需要预先在 /etc/multipath.conf 配置中设置。

默认的 path_grouping_policy 已经设置了 failover ,所以在配置中不需要修改默认值。
配置文件中的初 始默认部分配置了系统的多路径设备格式 mpathn ,没有这个配置,那么多路径设备的名字将被设置为WWID的别名。

  • 执行以下命令
1modprobe dm-multipath

2service multipathd start

3multipath -v2



以上命令 multipath -v2 打印出具备多路径的设备。如果该命令没有输出任何信息,则要确认所有的SAN连接已经正确设置并且系统是 multipathed 的。

    • 执行 multipath -v2 显示输出
1multipath -v2



sdc: checker msg is 'readsector0 checker reports path is down'sdd: checker msg is 'readsector0 checker reports path is down'

此时,再使用 fdisk -l 命令,则原来显示的

Disk /dev/sda: 21.4 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/sda1   *           1        2087    16763796   83  Linux/dev/sda2            2088        2609     4192965   82  Linux swap / SolarisDisk /dev/sdb: 577.4 GB, 577404665856 bytes255 heads, 63 sectors/track, 70198 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  SystemDisk /dev/sdc: 2199.0 GB, 2199023255552 bytes255 heads, 63 sectors/track, 267349 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDisk /dev/sdc doesn't contain a valid partition tableDisk /dev/sdd: 2199.0 GB, 2199023255552 bytes255 heads, 63 sectors/track, 267349 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDisk /dev/sdd doesn't contain a valid partition table

则在后面增加显示了

Disk /dev/dm-0: 577.4 GB, 577404665856 bytes255 heads, 63 sectors/track, 70198 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes     Device Boot      Start         End      Blocks   Id  SystemDisk /dev/dm-1: 2199.0 GB, 2199023255552 bytes255 heads, 63 sectors/track, 267349 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDisk /dev/dm-1 doesn't contain a valid partition table

这表明默认情况下,所有没有分配的块设备都被识别为多路径设备。但是,需要注意的是
'readsector0 checker reports path is down'
这表明SAN设备尚不能判断路径是否可用。

    • 使用 multipath -l 检查设备
1multipath -l



mpath2 (360022a11000120094e3181b800000000) dm-1 HUAWEI,S5600[size=2.0T][features=0][hwhandler=0][rw]\_ round-robin 0 [prio=0][active] \_ 3:0:0:0 sdc 8:32  [active][undef]\_ round-robin 0 [prio=0][enabled] \_ 3:0:1:0 sdd 8:48  [active][undef]mpath1 (360026b90596a0f00134750591a3c2a3c) dm-0 DELL,PERC 6/i[size=538G][features=0][hwhandler=0][rw]\_ round-robin 0 [prio=0][active] \_ 0:2:1:0 sdb 8:16  [active][undef]

其中,前者是华为SAN存储输出的多路径存储阵列,其中 /dev/sdc 和 /dev/sdd 是同一个设备(WWID相同)。后者是本地设备由Dell PERC 6内建的RAID1 SCSI存储。


单路径配置

有关如何显示 SCSI设备的UUID或WWID,参考 7.3. Configuring persistent storage in a Red Hat Enterprise Linux 5 environment
在不使用multipath的系统中,udev是一个实现LUN永久化的 好方法。

  • 编辑 /etc/scsi_id.config 配置文件,确保注释掉如下配置
1# options=-b



  • 添加以下行到 /etc/scsi_id.config
1options=-g



以上配置可以让udev假设所有连接的SCSI设备将返回UUID(唯一设备标识)。

  • 通过执行以下命令 scsi_id -g -s /block/sdc 来显示

类似

1scsi_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个设备:

01multipaths {

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 。系统重启后,这些新命名将持久化。


  • 执行以下命令确保多路径服务在启动时启动
1chkconfig multipathd on



由于 user_friendly_name 设置为 yes ,所以多路径设备创建为 /dev/mapper/mpathn


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下多路径Multipath的简单配置
Linux下multipath多路径配置
linux下磁盘多路径
LINUX自带多路径详解
CentOS6.7配置multipath多路径
Linux平台的多路径软件multipath的使用案例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服