在Linux平台一部分存储产品使用操作系统自带的多路径软件,包括最常见的HP和IBM的部分存储产品,在Linux自带的多路径软件叫做multipath。

什么是多路径?

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

在redhat、CentOS中,安装操作系统的时候multipath已经默认被安装。

以下操作都是在root下进行。

##查看安装情况
# rpm -qa | grep device-mapper
device-mapper-event-libs-1.02.140-8.el7.x86_64
device-mapper-event-1.02.140-8.el7.x86_64
device-mapper-libs-1.02.140-8.el7.x86_64
device-mapper-1.02.140-8.el7.x86_64
device-mapper-persistent-data-0.7.0-0.1.rc6.el7.x86_64
device-mapper-multipath-libs-0.4.9-111.el7.x86_64
device-mapper-multipath-0.4.9-111.el7.x86_64

device-mapper-multipath:即multipath-tools。主要提供multipathd和multipath等工具和 multipath.conf等配置文件。创建的多路径设备会在/dev/mapper中。

scsi_id: 包含在udev程序包中,可以在multipath.conf中配置该程序来获取scsi设备的序号。通过序号,便可以判断多个路径对应了同一设备。这个是多路径实现的关键。multipath程序在创建multipath设备时,会调用scsi_id,从其标准输出中获得该设备的scsi_id。在改写时,需要修改scsi_id程序的返回值为0。因为在multipath程序中,会检查该值来确定scsi_id是否已经成功得到。

device-mapper:主要包括两大部分:内核部分和用户部分。

内核部分主要包括device mapper核心(dm.ko)和一些target driver(md-multipath.ko)。核心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来的i/o。

用户空间部分主要包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配置mappered device。multipath-tool的程序中就需要调用这些库。

安装multipath多路径。(device mapper :设备映射器)

##安装 device mapper
##如果已安装,则提示已存在最新版本等
# yum install -y device-mapper*
Loaded plugins: fastestmirror, langpacks
local | 2.9 kB 00:00:00
Loading mirror speeds from cached hostfile
Package device-mapper-persistent-data-0.7.0-0.1.rc6.el7.x86_64 already installed and latest version
Package 7:device-mapper-event-libs-1.02.140-8.el7.x86_64 already installed and latest version
Package 7:device-mapper-1.02.140-8.el7.x86_64 already installed and latest version
Package 7:device-mapper-libs-1.02.140-8.el7.x86_64 already installed and latest version
Package device-mapper-multipath-libs-0.4.9-111.el7.x86_64 already installed and latest version
Package 7:device-mapper-event-1.02.140-8.el7.x86_64 already installed and latest version
Package device-mapper-multipath-0.4.9-111.el7.x86_64 already installed and latest version
Nothing to do
##配置 multipath 基本故障切换
mpathconf --enable --with_multipathd y

配置/etc/multipath.conf多路径文件

##查看共享盘的scsi_id,获取wwid
# /usr/lib/udev/scsi_id -g -u -d /dev/sdb
289a38dab8d20f7ef
# /usr/lib/udev/scsi_id -g -u -d /dev/sdc
228fac71ac2f36e17
# /usr/lib/udev/scsi_id -g -u -d /dev/sdd
245c5c9be46f1254a
# /usr/lib/udev/scsi_id -g -u -d /dev/sde
28e81ce897af2f1e4
# vi /etc/multipath.conf
defaults {
user_friendly_names yes
}

blacklist {
devnode "^sda"
}

multipaths {
multipath {
wwid "289a38dab8d20f7ef" ##磁盘的UUID
alias asm_ocr ##映射后的别名,需要自己命名
}
multipath {
wwid "228fac71ac2f36e17"
alias asm_data
}
multipath {
wwid "245c5c9be46f1254a"
alias asm_data1
}
multipath {
wwid "28e81ce897af2f1e4"
alias asm_archive
}

}

激活 multipath 多路径服务

##启用多路径
systemctl enable multipathd.service

##启动多路径
systemctl start multipathd.service

生产环境下,不建议使用 multipath -F

## -F删除所有不使用的多路径设备
multipath -F

##查看生成的多路径盘符
multipath -v2

##显示来自 sysfs 、设备映射器以及系统中其他所有可用组件的当前多路径配置状态
##显示multipath聚合后的设备名,以及设备对应的链路情况
multipath -ll

查看是否配置成功

关于dm-*设备:dm是Device Mapper的缩写,Device Mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。

dm-*与哪些磁盘是映射关系呢?通过以下命令,可以找到其中的关系。以asm_archive磁盘为例。

1.在命令 lsblk 中的对应关系是asm_archive的MAJ:MIN是253:5

2.在命令 ll /dev/mapper 中的对应关系是 asm_archive -> ../dm-5

3.在命令 dmsetup ls 的对应关系是 asm_archive     (253:5)

4.在 dmsetup info asm_archivek 中的对应关系是 asm_archive 的 Major, minor:      253, 5

其实,使用以上的任何一个命令,都可以获得其对应关系。

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 762M 0 part /boot
└─sda2 8:2 0 79.3G 0 part
├─centos-root 253:0 0 71.6G 0 lvm /
└─centos-swap 253:1 0 7.6G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
└─asm_ocr 253:2 0 5G 0 mpath
sdc 8:32 0 10G 0 disk
└─asm_data 253:3 0 10G 0 mpath
sdd 8:48 0 5G 0 disk
└─asm_data1 253:4 0 5G 0 mpath
sde 8:64 0 5G 0 disk
└─asm_archive 253:5 0 5G 0 mpath
sr0 11:0 1 4.2G 0 rom
# ll /dev/mapper/
total 0
lrwxrwxrwx 1 root root 7 Aug 27 19:10 asm_archive -> ../dm-5
lrwxrwxrwx 1 root root 7 Aug 27 19:02 asm_data -> ../dm-3
lrwxrwxrwx 1 root root 7 Aug 27 19:10 asm_data1 -> ../dm-4
lrwxrwxrwx 1 root root 7 Aug 27 19:10 asm_ocr -> ../dm-2
lrwxrwxrwx 1 root root 7 Aug 27 11:11 centos-root -> ../dm-0
lrwxrwxrwx 1 root root 7 Aug 27 11:11 centos-swap -> ../dm-1
crw------- 1 root root 10, 236 Aug 27 11:11 control
# dmsetup ls
asm_archive (253:5)
asm_ocr (253:2)
asm_data (253:3)
asm_data1 (253:4)
centos-swap (253:1)
centos-root (253:0)
# dmsetup info asm_archive
Name: asm_archive
State: ACTIVE
Read Ahead: 8192
Tables present: LIVE
Open count: 6
Event number: 0
Major, minor: 253, 5
Number of targets: 1
UUID: mpath-28e81ce897af2f1e4

查看磁盘情况

lsblk
fdisk -l

参考资料:详解Linux Multipath多路径配置:概念、配置、常用维护命令等,_Linux教程 | LinuxBoy

参考资料:Linux系统中的Device Mapper学习 - 潇湘隐者 - 博客园 (cnblogs.com)

>>>如果文章对你有所帮助,欢迎关注点赞收藏、评论,谢谢!<<<