2、multipath-多路径软件
更新于:2023年12月6日
multipath-多路径软件
目录
[toc]
1、什么是multipath
multipath是linux系统中用于实现设备路径冗余和负载均衡的一种机制。通过multipath机制,能够实现在系统中同一个设备可以存在多条路径,并且可以通过系统内部自己实现的算法,实现这些路径上的读写或访问负载均衡。同时,如果某些路径出现故障,系统也可以自动切换到其他可用的路径上。这样,可以提高系统的可靠性以及存储的效率。
2、multipath配置文件
要配置multipath,需要使用multipath.conf
配置文件。该文件位于/etc/multipath.conf中。该文件中包含了一些关于multipath的基本参数设置,同时还包含了一些不同存储设备的类型信息以及对应的路径优先级,这些参数可以通过修改multipath.conf来实现。
demo1(最小化配置)
[root@docker ~]#cat /etc/multipath.conf
defaults {
user_friendly_names yes
find_multipaths yes
}
demo2
下面是multipath.conf文件的一个示例:
defaults {
user_friendly_names yes
find_multipaths yes
path_grouping_policy group_by_prio
path_selector "round-robin 0"
failback immediate
rr_min_io 100
}
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*"
devnode "^cciss!c[0-9]*d[0-9]*"
devnode "^ssv-(.*)(zer|tic)"
}
blacklist_exceptions {
wwid ".*"
}
devices {
device {
vendor "NETAPP"
product "LUN"
path_grouping_policy group_by_prio
prio "alua"
features "1 queue_if_no_path"
hardware_handler "1 alua"
}
}
可以看到,multipath.conf文件包括了以下几个部分:
- defaults: 这个部分包含了一些默认设置,如user_friendly_names(指是否启用友好设备名称)、find_multipaths(指是否查找多路径)等。
- blacklist: 这个部分包含了需要屏蔽的设备类型或名称。在上面的示例中,会屏蔽一些设备类型和名称,如ram、raw、loop、fd等。
- blacklist_exceptions: 这个部分包含了不需要屏蔽的设备类型或名称。在上面的示例中,所有的设备都不需要屏蔽。
- devices: 这个部分包含了需要配置的设备信息。在上面的示例中,我们定义了一个设备,并指定了它的厂商、产品名称以及一些其他参数。
demo3
blacklist {
wwid 3600508b1001c044c39717726236c68d5
}
defaults {
user_friendly_names yes
polling_interval 10
queue_without_daemon no
flush_on_last_del yes
checker_timeout 120
}
devices {
device {
vendor "3par8400"
product "HP"
path_grouping_policy asmdisk
no_path_retry 30
prio hp_sw
path_checker tur
path_selector "round-robin 0"
hardware_handler "0"
failback 15
}
}
multipaths {
multipath {
wwid 360002ac0000000000000000300023867
alias mpathdisk01
}
}
如果有两个或者多个就再加一条即可。
multipaths {
multipath {
wwid 360002ac0000000000000000400023867
alias mpathdisk02
}
}
字段解析
这段代码是一个 multipath.conf 配置文件,用于配置 Linux 操作系统中的多路径设备。以下是每个字段的含义:
blacklist:定义了一些被禁用的设备,只要 WWID 匹配了列表中的任何一个,它就会被黑名单所拒绝。 wwid:唯一标识多路径设备的 32 位十六进制字符串。 defaults:定义了一些默认设置,这些设置可以在其他部分被重写。 user_friendly_names:使多路径设备更易于理解和使用。 polling_interval:检查路径状态的频率(以秒为单位)。 queue_without_daemon:定义了当 multipathd 守护程序处于未运行状态时处理 I/O 请求的行为。 flush_on_last_del:在删除最后一个路径时是否刷新 IO 缓存。 checker_timeout:指定检查器超时的时间。 devices:包含一个或多个 device 块,每个块都描述了一个特定的多路径设备。 device:描述了一个多路径设备及其属性。 vendor、product:设备的制造商和产品名称。 path_grouping_policy:指定将路径分组到哪个组中。 no_path_retry:当无法访问某个路径时进行重试的次数。 prio:指定优先级算法,如 alua、emc、hp_sw 等。 path_checker:指定 IO 路径检查器的类型。 path_selector:指定 选择路径的算法。例如,“round-robin 0” 表示依次将请求分发到每个路径上。 hardware_handler:指定用于处理硬件错误的脚本或程序。 failback:指定多长时间后进行故障切换。 multipaths:包含一个或多个 multipath 块,每个块都描述了一个设备的多个路径。 alias:为指定的多路径设备定义别名。
prio 是 multipath.conf 配置文件中的一个关键字,表示优先级算法。它可以指定多路径设备使用哪种算法来选择 I/O 请求路径。例如:
prio ==alua==
以上配置指定了使用 Asymmetric Logical Unit Access(ALUA) 算法进行路径选择。这个算法主要用于 SAN 存储环境下,能够更好地处理存储阵列并发访问的问题。
除了 ALUA,还有其他一些可用的优先级算法,如: emc:用于与 EMC 存储阵列配合使用。 hp_sw:用于与 HP 存储阵列配合使用。 rdac:用于与 LSI 存储阵列配合使用。
如果没有指定 prio 设置,则默认为 const(优先选择第一个路径)算法,或者是上层应用程序自己控制路径选择。
3、命令
multipath工具提供了一些命令行命令来实现对设备路径的操作。以下是一些常用命令:
- multipath -ll: 查看多路径设备的信息。(常用)
- multipath -l: 查看当前活动路径的设备信息。
- multipath -F: 刷新multipath状态。(常用)
- multipath -f: 阻止设备出现在多路径设备列表中。
- multipath -r: 重新配置multipath。
除此之外,还有 很多其他的命令可以使用。可以通过man multipath试图获取更多的信息。
案例:查看多路径设备的信息。(常用)
用以下命令列出系统中所有的多路径设备及其 WWID:
multipath -ll
这个命令将显示多路径设备的别名、WWID 和路径等信息。
[root@NSR-db1 ~]# multipath -ll
mpathd (360060e80072be00000302be000000280) dm-10 HITACHI ,OPEN-V
size=30G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 7:0:0:3 sdf 8:80 active ready running
|- 7:0:1:3 sdj 8:144 active ready running
|- 8:0:0:3 sdn 8:208 active ready running
`- 8:0:1:3 sdr 65:16 active ready running
mpathc (360060e80072be00000302be00000027f) dm-9 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 7:0:0:2 sde 8:64 active ready running
|- 7:0:1:2 sdi 8:128 active ready running
|- 8:0:0:2 sdm 8:192 active ready running
`- 8:0:1:2 sdq 65:0 active ready running
mpathb (360060e80072be00000302be00000027e) dm-8 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 7:0:0:1 sdd 8:48 active ready running
|- 7:0:1:1 sdh 8:112 active ready running
|- 8:0:0:1 sdl 8:176 active ready running
`- 8:0:1:1 sdp 8:240 active ready running
mpatha (360060e80072be00000302be00000027a) dm-7 HITACHI ,OPEN-V
size=1000G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 7:0:0:0 sdc 8:32 active ready running
|- 7:0:1:0 sdg 8:96 active ready running
|- 8:0:0:0 sdk 8:160 active ready running
`- 8:0:1:0 sdo 8:224 active ready running
[root@NSR-db1 ~]#
案例:刷新multipath状态
multipath -F: 刷新multipath状态。(常用)
-v lvl verbosity level
. 0 no output
. 1 print created devmap names only
. 2 default verbosity
. 3 print debug information
#刷新
multipath -F
#刷新
multipath -v2 -F
multipath -v2
#重新扫描设备 multipath -v3
multipath -v3 -F
multipath -v3
[root@NSR-db1 ~]# multipath -F
[root@NSR-db1 ~]# multipath -v2 -F
[root@NSR-db1 ~]# multipath -v3 -F
Dec 05 14:37:55 | set open fds limit to 1048576/1048576
Dec 05 14:37:55 | loading /lib64/multipath/libcheckdirectio.so checker
Dec 05 14:37:55 | loading /lib64/multipath/libprioconst.so prioritizer
Dec 05 14:37:55 | unloading const prioritizer
Dec 05 14:37:55 | unloading directio checker
[root@NSR-db1 ~]#
案例:-v2/-v3
打印信息
-v lvl verbosity level
. 0 no output
. 1 print created devmap names only
. 2 default verbosity
. 3 print debug information
[root@NSR-db1 ~]# multipath -v2
create: mpatha (360060e80072be00000302be00000027a) undef HITACHI ,OPEN-V
size=1000G features='0' hwhandler='0' wp=undef
`-+- policy='service-time 0' prio=1 status=undef
|- 7:0:0:0 sdc 8:32 undef ready running
|- 7:0:1:0 sdg 8:96 undef ready running
|- 8:0:0:0 sdk 8:160 undef ready running
`- 8:0:1:0 sdo 8:224 undef ready running
create: mpathb (360060e80072be00000302be00000027e) undef HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=undef
`-+- policy='service-time 0' prio=1 status=undef
|- 7:0:0:1 sdd 8:48 undef ready running
|- 7:0:1:1 sdh 8:112 undef ready running
|- 8:0:0:1 sdl 8:176 undef ready running
`- 8:0:1:1 sdp 8:240 undef ready running
create: mpathc (360060e80072be00000302be00000027f) undef HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=undef
`-+- policy='service-time 0' prio=1 status=undef
|- 7:0:0:2 sde 8:64 undef ready running
|- 7:0:1:2 sdi 8:128 undef ready running
|- 8:0:0:2 sdm 8:192 undef ready running
`- 8:0:1:2 sdq 65:0 undef ready running
create: mpathd (360060e80072be00000302be000000280) undef HITACHI ,OPEN-V
size=30G features='0' hwhandler='0' wp=undef
`-+- policy='service-time 0' prio=1 status=undef
|- 7:0:0:3 sdf 8:80 undef ready running
|- 7:0:1:3 sdj 8:144 undef ready running
|- 8:0:0:3 sdn 8:208 undef ready running
`- 8:0:1:3 sdr 65:16 undef ready running
[root@NSR-db1 ~]#
[root@NSR-db1 ~]# multipath -v3
Dec 05 14:39:09 | set open fds limit to 1048576/1048576
Dec 05 14:39:09 | loading /lib64/multipath/libcheckdirectio.so checker
Dec 05 14:39:09 | loading /lib64/multipath/libprioconst.so prioritizer
Dec 05 14:39:09 | sda: not found in pathvec
Dec 05 14:39:09 | sda: mask = 0x3f
Dec 05 14:39:09 | sda: dev_t = 8:0
Dec 05 14:39:09 | sda: size = 937406464
Dec 05 14:39:09 | sda: vendor = PM8060-
Dec 05 14:39:09 | sda: product = 1
Dec 05 14:39:09 | sda: rev = V1.0
Dec 05 14:39:09 | sda: h:b:t:l = 0:0:0:0
Dec 05 14:39:09 | sda: path state = running
Dec 05 14:39:09 | sda: 58350 cyl, 255 heads, 63 sectors/track, start at 0
Dec 05 14:39:09 | sda: serial = E274D1D3
Dec 05 14:39:09 | sda: get_state
Dec 05 14:39:09 | sda: detect_checker = 1 (config file default)
Dec 05 14:39:09 | sda: path checker = directio (internal default)
Dec 05 14:39:09 | sda: checker timeout = 45000 ms (sysfs setting)
Dec 05 14:39:09 | directio: starting new request
Dec 05 14:39:09 | directio: io finished 4096/0
Dec 05 14:39:09 | sda: directio state = up
Dec 05 14:39:09 | sda: uid_attribute = ID_SERIAL (internal default)
Dec 05 14:39:09 | sda: uid = 2d3d174e200d00000 (udev)
Dec 05 14:39:09 | sda: detect_prio = 1 (config file default)
Dec 05 14:39:09 | sda: prio = const (internal default)
Dec 05 14:39:09 | sda: prio args = (internal default)
Dec 05 14:39:09 | sda: const prio = 1
Dec 05 14:39:09 | sdb: not found in pathvec
Dec 05 14:39:09 | sdb: mask = 0x3f
Dec 05 14:39:09 | sdb: dev_t = 8:16
Dec 05 14:39:09 | sdb: size = 4676648960
Dec 05 14:39:09 | sdb: vendor = PM8060-
Dec 05 14:39:09 | sdb: product = raid10
Dec 05 14:39:09 | sdb: rev = V1.0
Dec 05 14:39:09 | sdb: h:b:t:l = 0:0:1:0
Dec 05 14:39:09 | sdb: path state = running
案例:查看当前活动路径的设备信息
multipath -l: 查看当前活动路径的设备信息。
[root@NSR-db1 ~]# multipath -l
mpathd (360060e80072be00000302be000000280) dm-10 HITACHI ,OPEN-V
size=30G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:3 sdf 8:80 active undef running
|- 7:0:1:3 sdj 8:144 active undef running
|- 8:0:0:3 sdn 8:208 active undef running
`- 8:0:1:3 sdr 65:16 active undef running
mpathc (360060e80072be00000302be00000027f) dm-9 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:2 sde 8:64 active undef running
|- 7:0:1:2 sdi 8:128 active undef running
|- 8:0:0:2 sdm 8:192 active undef running
`- 8:0:1:2 sdq 65:0 active undef running
mpathb (360060e80072be00000302be00000027e) dm-8 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:1 sdd 8:48 active undef running
|- 7:0:1:1 sdh 8:112 active undef running
|- 8:0:0:1 sdl 8:176 active undef running
`- 8:0:1:1 sdp 8:240 active undef running
mpatha (360060e80072be00000302be00000027a) dm-7 HITACHI ,OPEN-V
size=1000G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:0 sdc 8:32 active undef running
|- 7:0:1:0 sdg 8:96 active undef running
|- 8:0:0:0 sdk 8:160 active undef running
`- 8:0:1:0 sdo 8:224 active undef running
[root@NSR-db1 ~]#
案例:查看硬盘的 WWID
使用以下命令来查看硬盘的 WWID:
sudo udevadm info --query=all --name=/dev/sdX | grep ID_SERIAL
将 /dev/sdX 替换为您要查看的磁盘设备,例如 /dev/sda 或 /dev/sdb。该命令将打印出设备的所有属性,然后使用 grep 命令过滤出包含 ID_SERIAL 的行,从而找到设备的 WWID。
案例:查看状态 multipath -d -l
-d dry run, do not create or update devmaps
[root@NSR-db1 ~]# multipath -d -l
mpathd (360060e80072be00000302be000000280) dm-10 HITACHI ,OPEN-V
size=30G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:3 sdf 8:80 active undef running
|- 7:0:1:3 sdj 8:144 active undef running
|- 8:0:0:3 sdn 8:208 active undef running
`- 8:0:1:3 sdr 65:16 active undef running
mpathc (360060e80072be00000302be00000027f) dm-9 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:2 sde 8:64 active undef running
|- 7:0:1:2 sdi 8:128 active undef running
|- 8:0:0:2 sdm 8:192 active undef running
`- 8:0:1:2 sdq 65:0 active undef running
mpathb (360060e80072be00000302be00000027e) dm-8 HITACHI ,OPEN-V
size=200G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:1 sdd 8:48 active undef running
|- 7:0:1:1 sdh 8:112 active undef running
|- 8:0:0:1 sdl 8:176 active undef running
`- 8:0:1:1 sdp 8:240 active undef running
mpatha (360060e80072be00000302be00000027a) dm-7 HITACHI ,OPEN-V
size=1000G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=0 status=active
|- 7:0:0:0 sdc 8:32 active undef running
|- 7:0:1:0 sdg 8:96 active undef running
|- 8:0:0:0 sdk 8:160 active undef running
`- 8:0:1:0 sdo 8:224 active undef running
[root@NSR-db1 ~]#
4、==工作实战==
这个是经过工作实际测试过的。
实战:multipath配置-2023.12.5(测试成功)
环境:
centos7.9
默认情况下,linux是没安装multipath服务的,需要我们手动安装。
1、安装
- 安装multipath服务
yum install device-mapper-multipath
⚠️ 注意:
注意:自己经实际测试,这里是不用将多路径软件添加至内核模块中,默认会自动添加的(这里仅做记录)[root@docker ~]#lsmod |grep multipath
dm_multipath 27792 0
dm_mod 128595 10 dm_multipath,dm_log,dm_mirror