22.3.2. 使用 mdadm 来创建多路径设备
除去建立 RAID 阵列,mdadm 还可以用来实现硬件支持的多 I/O 路径指向单 SCSI LUNs (磁盘驱动器) 的功能。多路径存储是为了实现当有硬件损坏或是单 SCSI LUNs (磁盘驱动器) 饱和时,仍然可以对数据进行访问。由于这个设置中包括了多路径(每个路径做为一个独立的虚拟控制器) 对一个公用的 SCSI LUN (磁盘驱动器) 的访问,Linux 内核会通过每个路径检测到每个共享的驱动器。换句话说,根据相关的配置,名为 /dev/sda 的 SCSI LUN (磁盘驱动器) 可以被做为 /dev/sdb, /dev/sdc 或其它名字来访问。
一个设备需要在一个 I/O 路径出现故障的时候仍然可以被访问到。mdadm 提供了一个 level 选项的额外参数来实现这个功能。如果一个 I/O 路径出现故障,这个参数 multipath 会指示 Linux 内核的 md 层去选择新的访问路径。
为建立一个多路径设备,你需要根据你的硬件配置来设置 /etc/mdadm.conf 文件中的 DEVICE 和 ARRAY 两行的设置。
在以前的 RAID 例子中,在 /etc/mdadm.conf 指定的每一个设备必须代表不同的物理磁盘驱动器。和这些以前的例子不同,现在每个在这个文件中指定的设备都指向相同的公用磁盘驱动器。
用于建立多路径设备的命令和建立 RAID 设备的命令很相似。你所要做的只是用 multipath 的参数去替换 RAID 层的参数。
mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 Continue creating array? yes mdadm: array /dev/md0 started.
由于 mdadm 的命令行比较长,它被分为了两行
在这个例子中,硬件中包括了一个由 SCSI LUN 来代表的 4 个独立的 SCSI 设备,每个设备都使用自己不同的路径来访问同一个存储设备。当多路径设备 /dev/md0 建立好后,所有指向 /dev/md0 的 I/O 操作都会被指向 /dev/sda1,/dev/sdb1,/dev/sdc1,或 /dev/sdd1 (取决于当前哪个路径是可以正常运行并且是被激活的)
你可以用 mdadm --detail /dev/md0 命令检查 /dev/md0 的配置,来验证现在是一个多路径设备。
/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar 2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Mar 2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
1 8 17 1 spare /dev/sdb1
2 8 33 2 spare /dev/sdc1
3 8 1 3 spare /dev/sda1
UUID : 4b564608:fa01c716:550bd8ff:735d92dc
Events : 0.1
mdadm 的另一个功能是从操作配置中强制删除一个设备 (这个设备是 RAID 阵列中的一部分或是多路径设置中的一部分)。在下面的例子中,/dev/sda1 被标识为故障,然后被删除掉,最后又被再次添加到配置中。对于一个多路径的配置,这些行动不会影响到当前正在进行的 I/O 操作。
# mdadm /dev/md0 -f /dev/sda1 mdadm: set /dev/sda1 faulty in /dev/md0 # mdadm /dev/md0 -r /dev/sda1 mdadm: hot removed /dev/sda1 # mdadm /dev/md0 -a /dev/sda1 mdadm: hot added /dev/sda1 #