继续昨天的话题,还是mdadm的使用。之前,我们一直都是用mdadm创建RAID阵列。其实,mdadm还有一个选项:multipath。它可以实现硬件支持的多I/O路径指向单SCSI LUNs的功能,用于创建多路径访问的磁盘设备。
一、原理
多路径存储是为了实现当有硬件损坏或单个SCSI LUNs饱和时,仍可以对数据进行访问。要实现multipath,前提是必须有对应的硬件支持。
举个例:我们有一个光纤盘柜,主机通过2块HBA卡通过光纤交换机连接到盘柜上,通过配置光纤交换机实现这样的结果:
引用
/dev/sdb-
|--光纤交换机--200G(盘柜上的同一个空间)
/dev/sdc-
也就是说,
在系统中是看到虽然是分别看到sdb和sdc,但其实他们都是通过光纤交换机,指向同一个盘柜空间。只是访问的路径不同而已。 有了上述的硬件支持,我们就可以通过mdadm进行配置了。
二、创建
mdadm -C /dev/md0 --level=multipath --raid-devices=2 /dev/sd[bc]1
--level=multipath,会告诉linux内核的md层,在出现I/O路径故障的时候,选择新的访问路径。
echo DEVICE /dev/sd[bc]1 >> /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf
修改/etc/mdadm.conf文件,方便以后识别。
mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Wed Jun 14 14:58:54 2006
Raid Level : multipath
Array Size : 1044096 (1019.63 MiB 1069.15 MB)
Raid Devices : 1
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Wed Jun 14 15:44:59 2006
State : clean
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdb1
1 8 17 1 spare /dev/sdc1
UUID : 8aca2297:510fe735:0b224387:33e20925
Events : 0.1
※请注意差别。看上去这些命令和建立RAID1很像。但其实有很大差别:在做RAID时,每个sd设备号都是代表不同的物理磁盘;但在做Multipath时,使用到的sd设备号都是指向相同的公用磁盘驱动器。三、代替
今后,我们通过访问/dev/md0,即可对公用的SCSI LUN进行访问,Linux内核会通过每个路径检测到共享的驱动器。当出现硬件故障,或但SCSI LUNs饱和时,即会切换到另一条链路进行访问。
该方法可替代未能实现failover的HBA卡驱动问题。