| 备注 | 修改日期 | 修改人 |
| 创建版本 | 2025-04-17 13:50:11[当前版本] | 李永鑫 |
使用设备映射器多路径(DM Multipath),您可以将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。
多路径聚合了 I/O 路径并生成由聚合路径组成的新设备。
| 组件 | 描述 |
|---|---|
|
为路径和路径组群重新路由 I/O 并支持故障切换。 |
|
配置并启用设备映射器多路径。 |
|
列出并配置多路径设备。每当添加块设备时,它也由 |
|
自动创建和删除多路径设备并监控路径;作为路径失败,可以更新多路径设备。允许对多路径设备进行交互式的修改。如果 |
|
为设备中的分区创建设备映射器设备。当创建了多路径设备以便在其之上创建分区设备时,该命令将由 |
|
在多路径设备中设置 |
multipath 命令用于检测和组合到设备的多个路径。它提供不同的选项来管理您的多路径设备。
下表描述了可能会用到的 multipath 命令的一些选项。
| 选项 | 描述 |
|---|---|
|
显示 |
|
显示来自 |
|
删除命名的多路径设备。 |
|
删除所有未使用的多路径设备。 |
|
从 |
|
重置 |
|
强制重新载入多路径设备。 |
要有效地监控路径,对多路径问题进行故障排除,或者检查多路径配置是否正确,您可以显示多路径拓扑。
流程
显示多路径设备拓扑:
# multipath -ll mpatha (3600d0230000000000e13954ed5f89300) dm-4 WINSYS,SF2372 size=233G features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active `- 6:0:0:0 sdf 8:80 active ready running
输出可以被分成三个部分。每个部分都显示以下组的信息:
多路径设备信息:
mpatha (3600d0230000000000e13954ed5f89300): 别名 (如果与别名不同,则为 wwid) dm-4: dm 设备名称 WINSYS,SF2372: 供应商,产品 size=233G: 大小 features='1 queue_if_no_path': 功能 hwhandler='0': 硬件处理器 wp=rw: 写权限 路径组信息:
policy='service-time 0': 调度策略 prio=1 :路径组优先级 status=active: 路径组状态 路径信息:
6:0:0:0: host:channellun
sdf: devnode
8:80: major:minor 号
active: dm status
ready :路径状态
running :在线状态
有关 dm、路径和在线状态的更多信息,请参阅 路径状态。
用于列出、创建或重新载入多路径设备的其他多路径命令也会显示设备拓扑。但是,某些信息可能未知,并在输出中显示为 undef。这是正常的行为。使用 multipath -ll 命令查看正确的状态。
注意:
在某些情况下,如创建多路径设备,多路径拓扑会显示一个参数,这代表是否采取了任何操作。例如,以下命令输出显示create: 参数,来表示创建了一个多路径设备:
create: mpatha (3600d0230000000000e13954ed5f89300) undef WINSYS,SF2372 size=233G features='1 queue_if_no_path' hwhandler='0' wp=undef `-+- policy='service-time 0' prio=1 status=undef `- 6:0:0:0 sdf 8:80 undef ready running
multipathd 守护进程会根据 /etc/multipath.conf 文件中定义的轮询间隔定期对路径状态进行更新。就内核而言,dm 状态与路径状态类似。dm 状态将保留其当前状态,直到路径检查程序完成为止。
路径状态
ready, ghost该路径已启动并准备好进行 I/O。
faulty, shaky路径为停用。
i/o pending检查程序正积极检查此路径,状态将很快更新。
i/o timeout检查程序在超时之前没有返回success/failure。这被认为与 faulty 一样。
removed该路径已从系统中删除,很快也将从多路径设备中删除。这被认为与 faulty 一样。
wild multipathd 无法运行路径检查程序,因为内部错误或配置问题。这与 faulty 相同,除了多路径会跳过路径上的许多操作。
unchecked路径检查程序还没有在此路径上运行,要么是因为它刚刚被发现,还没有一个分配的路径检查程序,要么是路径检查程序遇到了错误。这与 wild 相同。
delayed路径检查程序返回路径已启动,但多路径会延迟路径的恢复,因为路径最近失败了多次,且多路径已被配置为在此种情况下延迟路径。这被认为与 faulty 一样。
DM 状态
Active映射到 ready 和 ghost 路径状态。
Failed映射到所有其他路径的状态,除了 没有等效的 dm 状态的 i/o pending 。
在线状态
Running设备已启用。
Offline设备已禁用。
老版本: # yum install device-mapper-multipath 8之后: # dnf install device-mapper-multipath
$ sudo apt-update $ sudo apt-get install multipath-tools multipath-tools-boot
第一次安装multipath后,是没有配置文件/etc/multipath.conf的,可以手动创建或者从模板拷贝。
# mpathconf --enable
# mpathconf --enable --user_friendly_names n
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf
1.手动创建一个空的multipath.conf文件
# touch /etc/multipath.conf
2.使用如下命令获取内置配置
# echo "show config" | multipathd -k >/etc/multipath.conf
重新载入配置
# systemctl reload multipathd.service # systemctl start multipathd.service
验证配置结果
# ls /dev/mapper/
# multipath -t
# cp /usr/share/doc/multipath-tools/examples /etc/multipath.conf
# touch /etc/multipath.conf --//创建一个空配置 # systemctl restart multipath-tools.service --//重启服务 # echo 'show config' | multipathd -k > multipath.conf-live --//生成内部配置
重启服务,重新加载配置
# systemctl restart multipath-tools.service
# multipathd show config # multipath -t
在DM的配置文件中可以有以下几类配置项:
blacklist
不视为多路径的特定设备列表。
blacklist_exceptions
根据 blacklist 部分的参数,列出其他将被忽略的多路径设备。
defaults
DM 多路径的常规默认设置。
multipaths
各个多路径设备特性的设置。这些值会覆盖在配置文件中的 overrides, devices, 和 defaults 部分指定的值。
devices
各个存储控制器的设置。这些值覆盖了在 配置文件的 defaults 部分中指定的内容。如果您使用默认不支持的存储阵列,您可能需要为阵列创建 devices 子部分。
overrides
适用于所有设备的设置。这些值覆盖了在配置文件的 devices 和 defaults 部分中指定的值。
当系统决定多路径设备的属性时,它会按照以下顺序检查 multipath.conf 文件中的单独部分的设置:
multipaths 部分 overrides 部分 devices 部分 defaults 部分 blacklist中设置不被DM配置的本地磁盘设备,通常有以下几种方式:
通过设备的WWID设置
获取到本地设备,如sda的wwid
# multipathd show paths raw format "%d %w" | grep sda sda WDC_WD800JD-75MSA3_WD-WMAM9FU71040
编辑/etc/multipath.conf文件如下:
blacklist {
wwid WDC_WD800JD-75MSA3_WD-WMAM9FU71040
}
通过设备名称设置
使用devnode 本地磁盘设备名称设置blacklist。
blacklist {
devnode "^sd[a-z]"
}
此方式不太推荐,因为如果某些设备不经udev规则绑定,可能在系统重启后,设备名称会发生变化。
通过设备类型设置
通过特定的设备类型,屏蔽某些特定型号的设备。
blacklist {
device {
vendor "IBM"
product "3S42" #DS4200 Product 10
}
device {
vendor "HP"
product "*"
}
}
参见文档: multipath默认参数值.xlsx
使用 multipath.conf 配置文件的 multipaths 部分设置单个多路径设备的属性。设备映射器(DM)多路径使用这些属性覆盖所有其他配置设置,包括 overrides 部分中的设置。
multipaths 部分仅将 multipath 子部分识别为属性。下表显示了您可以在 multipath 子部分中为每个特定多路径设备设置的属性。
| 属性 | 描述 |
|---|---|
|
指定多路径设备的 WWID,多路径属性应用到其中。这个参数对于 |
|
指定多路径设备的符号名称,多路径属性应用到其中。如果您使用 |
以下列表中的属性是可选的。如果没有设置它们,则会应用来自 overrides, devices, 或 defaults 部分中的默认值。以下这些属性的设置可以参考 配置默认设置 章节
path_grouping_policy path_selector prio prio_args failback no_path_retry rr_min_io rr_min_io_rq flush_on_last_del features reservation_key user_friendly_names deferred_remove san_path_err_threshold san_path_err_forget_rate san_path_err_recovery_time marginal_path_err_sample_time marginal_path_err_rate_threshold marginal_path_err_recheck_gap_time marginal_path_double_failed_time delay_watch_checks delay_wait_checks skip_kpartx max_sectors_kb ghost_delay 使用 multipath.conf 配置文件的 devices 部分为单个存储控制器类型定义设置。本节中设置的值覆盖 defaults 部分中的指定的值。系统根据 vendor, product, 和 revision 关键字标识存储控制器类型。这些关键字是正则表达式,必须与有关特定设备的 sysfs 信息匹配。
devices 部分仅将 device 子部分识别为属性。如果某个设备有多个关键字匹配,则所有匹配条目的属性都将应用到其中。如果在多个匹配的 device 子部分中指定属性,则后续版本的条目优先于任何之前条目。
| 属性 | 描述 |
|---|---|
vendor |
指定与设备厂商名称匹配的正则表达式。这是一个必需属性。 |
product |
指定与设备产品名称匹配的正则表达式。这是一个必需属性。 |
revision |
指定与设备产品修订匹配的正则表达式。如果缺少 revision 属性,则所有设备修订都匹配。 |
product_blacklist |
多路径使用此属性创建具有 vendor 属性的设备 blacklist 项,它与这个设备项的 vendor 属性匹配,以及一个 product 属性,它与这个 product_blacklist 属性匹配。 |
vpd_vendor |
使用 VPD 页缩写来显示特定于供应商的 Vital 产品数据(VPD) 页面信息。 |
multipathd 守护进程使用此信息来收集设备特定信息。目前只支持 hp3par VPD 页面。 |
|
hardware_handler |
指定用于特定设备类型的硬件处理器。所有可能的值都依赖于硬件,包括: |
emc:DGC 类数组的硬件处理程序,如 CLARiiON CX/AX 和 EMC VNX 和 unity 系列。 |
|
rdac :LSI/Engenio/NetApp RDAC 类的硬件处理器,如 NetApp SANtricity E/EF 系列,以及 IBM DELL SGI STK 和 SUN 的 OEM 阵列。 |
|
hp_sw: HP/COMPAQ/DEC HSG80 和 MSA/HSV 阵列的硬件处理程序,只使用 Active/Standby 模式。 |
|
alua:SCSI-3 ALUA 兼容阵列的硬件处理程序. |
|
ana: NVMe ANA 兼容阵列的硬件处理程序。 |
|
默认值为 unset。 |
Linux 内核,版本 4.3 及更新版本会自动将设备处理程序附加到已知设备。这包括支持 SCSI-3 ALUA 的所有设备。之后,内核不会启用更改处理程序。在这些内核上设置此类设备的 hardware_handler 属性不会起作用。
以下列表中的属性是可选的。如果没有设置它们,则应用 defaults 部分中的默认值。有关这些属性的完整描述,请参阅配置文件默认值。
path_grouping_policy uid_attribute getuid_callout path_selector path_checker prio prio_args failback alias_prefix no_path_retry rr_min_io rr_min_io_rq flush_on_last_del features reservation_key user_friendly_names deferred_remove san_path_err_threshold san_path_err_forget_rate san_path_err_recovery_time marginal_path_err_sample_time marginal_path_err_rate_threshold marginal_path_err_recheck_gap_time marginal_path_double_failed_time delay_watch_checks delay_wait_checks skip_kpartx max_sectors_kb ghost_delay all_tg_pt overrides 部分可以识别可选的 protocol 子部分,并可包含多个 protocol 子部分。系统使用强制 type 属性将路径设备与 protocol 子匹配。匹配 protocol 子部分中的属性优先于其它 overrides 部分中的属性。如果有多个匹配的 protocol 子部分,则后续条目具有更高的优先级。
protocol 子部分识别以下强制属性:
| 属性 | 描述 |
|---|---|
type |
指定与设备厂商名称匹配的正则表达式。这是一个必需属性。 |
scsi:fcp, scsi:spi, scsi:ssa, scsi:sbp, scsi:srp, scsi:iscsi, scsi:sas, scsi:adt, scsi:ata, scsi:unspec, ccw, cciss, nvme, undef |
|
此属性不是正则表达式。路径设备协议字符串必须完全匹配。 |
以下列表中的属性对于 protocol 子部分是可选的。如果没有设置它们,则应用来自 overrides, devices 或 defaults 部分中的默认值。
fast_io_fail_tmo dev_loss_tmo eh_deadline 查看当前多路径拓扑,显示当前所有可用路径
# multipath -ll
清除所有未使用的路径,然后重新扫描路径
# multipath -F && multipath -rr
显示检测路径,合并路径等过程信息
# multipath -v2 # multipath -v3
显示路径
# multipathd show paths
显示multipathd后台服务的PID
# multipathd show daemon
显示当前多路径加载的所有配置
# echo 'show config' | multipathd -k
存储侧resize LUN设备
主机侧执行
# multipath -l
查看当前多路径拓扑
主机侧执行
# echo 1 > /sys/block/device_name/device/rescan
向rescan文件写入1,触发SCSI驱动器重新扫描SCSI设备。
resize 多路径设备
# multipathd -k 'resize map mpatha'
resize文件系统
# resize2fs /dev/mapper/mpatha