Multipath多路径管理基础介绍与安装配置使用

2024-01-04

0x00 前言简述

Q:什么是Multipath多路径?

答:Multipath I/O 电脑储存技术,指利用两个以上的路径同时在CPU与储存设备之间传送讯号,以达到侦错与强化效能的目的。 简单的说当 服务器 到某一存储设备有多条路径时,每条路径都会识别为一个单独的设备(不便于使用),而多路径允许您将服务器节点和储存阵列间的多个I/O路径配置为一个单一设备( 就是我们所说的链路聚合 )即多路径聚合了I/O路径并生成由这些集合路径组成的新设备,这些I/O路径可 包含独立电缆、交换器和控制器的实体SAN链接(FC / SAS / iSCSI) 等;

WeiyiGeek.多路径图示

WeiyiGeek.多路径图示

WeiyiGeek.多路径图示

工作原理: 当因为主机HBA卡、线缆、交换机或者存储设备的RAID控制器故障等原因造成一条物理路径失效时,服务器可以将通过此物理路径的I/O转移到其他正常的物理路径上面,应用程序不会觉察到这种改变,从而提高系统的可用性。

硬件要求: 硬件方面需要服务器有2块或以上的HBA接口卡,网络上有两个或以上的交换机, 块存储 设备有两个或以上的冗余控制器,各个物理路径之间没有任何硬件相互依赖。多路径冗余I/O也可以实现I/O的 负载均衡 ,提高系统性能,但主要还是一种容错机制。

Q:它有什么用?

  • 冗余: 主备模式,高可用;
  • 性能优化: 主主模式,负载均衡;

Q: 如何使用Multipath? 描述: 可以参照下面的章节并存在相应的测试环境进行实践,常见三种情况会使用到比如有存储设备并且与主机通过( FC-光纤线、SAS-线缆、以太网-六类线 )进行直连; 其应用场景:

  • 1.针对于块存储磁盘多路径IO设备
  • 2.使用在Oracle的ASM环境中
多路径技术

描述:实现的核心通过存储设备去适配操作系统,从而实现多路径技术,支持ALUA是其中主要部分。

1.ALUA

描述:ALUA多路径技术(Asymmetric Logical Unit Access-非对称逻辑单元存取),其提供了一个路径发现和确定优先次序的标准化机制, 实现主机和存储设备的路径自协商和动态管理

特点:对于特定的LUN来说,在它的路径中,一个控制器的目标端口处于 主动/优化 状态,另一个控制器的目标端口处 于主动/非优 状态。在某一个时刻,某个LUN只是属于某一个控制器,要想实现两边的负载均衡,就是将任务A扔给控制器A,将任务B扔给控制器B, 对于同一个任务来说任何时候只有一个控制器在控制

2.SLUA

描述:SLUA多路径技术(Symmetric Logical Unit Access-对称逻辑单元存取)别名对称镜像卷,它是多路径的基本特性。 特点:对于特定的LUN来说,在它的路径中两个存储控制器的目标端口 均处于主动/优化 状态。两个控制器之间实现高速互联的通讯,一个IO发到控制器端,两个控制器可同时参与处理; 当一个控制器繁忙系统时候不需要主机端的负载均衡软件参与就可以自动实现负载均衡

SLUA与ALUA对比:

  • 前者: 双主/优化, 一个LUN可以属于两个控制器负载均衡、同一个RAID上的不同LUN组可以跨控制器,LUN跨控制器迁移不影响应用、带宽加倍1秒自动切换;
  • 后者: 双主/非优化,同一个LUN归属某一个控制器,双控之间不可自动实现负载均衡,并且切换时间一般为十几秒;

WeiyiGeek.多路径技术

WeiyiGeek.多路径技术

WeiyiGeek.多路径技术

名词解析
1.DM Multipath - 多路径设备

描述:若不采用 DM Multipath 那么从服务器节点到储存控制器的每一条路径都会被系统视为独立的设备,即使I/O路径连接的是相同的服务器节点到相同的储存控制器也是如此, DM Multipath 提供了有逻辑的管理I/O路径的方法,即在基础设备顶端生成单一多路径设备;

2.WWID - 全球识别符

描述:每个多路径设备都有一个WWID(全球识别符),它是全球唯一的无法更改的号码, 默认情况下会将多路径设备的名称设定为它的WWID , 可以在多路径配置文件( /etc/multipath.conf )中设置 user_friendly_names 选项,该选项可将别名设为格式为mpathn的节点唯一名称也可以也可以自定义存储设备名称;

示例.查看设备的 scsi id 即WWID查看, 获取 iscsi 共享盘的 wwid 全球唯一识别号三种方式

# 方式1.扫描SCSI设备号命令
$/usr/lib/udev/scsi_id -u -g /dev/mapper/asm08  #去掉空格--replace-whitespace
360050768xxx000000010d2
$/usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb
36000d3100366e600000000000000001c

# 方式2
$cat /etc/multipath/wwids
# Valid WWIDs:
/36000d3100366e600000000000000001c/

# 方式3
$multipath -ll | grep "mpath"
mpatha (36000d3100366e600000000000000001c) dm-0 COMPELNT,Compellent Vol

复制

示例2.自定义存储设备名称;

# /etc/multipath.conf
# 方式1
defaults {
  user_friendly_names yes
  ....
}
# 结果
$multipath -ll
# mpatha (36000d3100366e600000000000000001c) dm-0 COMPELNT,Compellent Vol
# size=500G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=enabled
#   |- 4:0:0:1 sdb 8:16 active ready running
#   |- 4:0:0:2 sdc 3:32 active ready running
$ls -alh /dev/mapper/mpatha-part1
# lrwxrwxrwx 1 root root 7 Sep  8  2020 /dev/mapper/mpatha-part1 -> ../dm-0

# ----------------------------------------------------------  #

# 方式2:绑定后需重新生成路径的映射表
multipaths {
  multipath {
    wwid  "36000d3100366e600000000000000001c"
    alias k8sapp
  }
}
# 结果
$multipath -v2
$multipath -ll
# k8sapp (36000d3100366e600000000000000001c) dm-0 COMPELNT,Compellent Vol
# size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# -+- policy='service-time 0' prio=25 status=active
#   |- 5:0:8:1 sdb 8:16 active ready running
#   |- 5:0:9:1 sdc 8:32 failed ready running
$ls -alh /dev/mapper/k8sapp 
# lrwxrwxrwx 1 root root 7 Sep  8  2020 /dev/mapper/k8sapp  -> ../dm-0

复制

3.scsi_id - 设备id

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

4.多路径聚合和映射

Q:什么是存储的多路径聚合和映射? Linux 主机上通过外接 FC / SAS 到物理存储设备时,一般都会在主机上加装HBA卡, HBA卡通过WWN号连接光纤交换机或直接存储 。如果HBA卡出问题需要更换时,WWN号相应的也会改变,中间的这个纽带相当于断了,就无法正常识别存储磁盘分区。 当然有些HBA上面贴的有WWN号,可以在更换HBA卡之前在光交或存储上更换相应的配置。不过很多没有标这个WWN所以需要非常,建议更换后到系统下通过命令查看新识别的WWN号确认以下即可。

主机上HBA卡WWN号查看

# FC SAN
cat /sys/class/fc_host/host*/port_name
0x2002d0431efb7f5d  #HBA卡WWN号

# SAS SAN
$cat /sys/class/sas_phy/phy-*/sas_address|sort|uniq
0x51866da091944100  #HBA卡WWN号

复制

WeiyiGeek.服务器HBA标识

WeiyiGeek.服务器HBA标识

WeiyiGeek.服务器HBA标识


0x01 Multipath 管理

描述:对于存储设备创建的LUN卷以及映射分配给服务器后往往有多个控制器进行冗余,刷新scsi设备后你将会在服务器中查看到多个/dev/sd[b-z]磁盘设备,此时需要采用多路径软件进行聚合链路,使原本有多个SCSI磁盘的磁盘挂载到本地时候聚合为一个设备;注意这与您的存储设备息息相关大多数存储连接到Linux主机上可以使用multipath自带的多路径软件,然而向Huawei的存储则需要单独安装一个第三方的多路径软件才行;

Linux - Multipath

描述:在linux中开源的multipath工具是用来进行多路径IO管理,当一条链路不稳定时可自动切换到另一条链路,当然要使用多路径设备就必须安装相对应的multipath软件;

Multipath 安装&启动 备注:CentOS 7.8 / Ubuntu 20.04 tls 自带无需安装

# CentOS 
rpm -qa | grep "multipath"           # 查看系统是否安装
yum install device-mapper-multipath  
systemctl enable multipathd || chkconfig multipathd on  # 启用多路径软件开机自启
systemctl start multipathd || service multipathd status # 启动multipath多路径服务

# ubuntu
apt list | grep "multipath" # 查看系统是否安装
# multipath-tools-boot/focal 0.8.3-1ubuntu2 all
# multipath-tools/focal,now 0.8.3-1ubuntu2 amd64 [installed,automatic]
apt-get install multipath-tools
systemctl enable multipathd && systemctl start multipathd

# 软件包说明
(1) device-mapper-multipath:即multipath-tools。主要提供multipathd和multipath等工具和 multipath.conf等配置文件。创建的多路径设备会在/dev/mapper中。
(2) 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的程序中就需要调用这些库。
(3) dm-multipath.ko和dm.ko:dm.ko是device mapper驱动。它是实现multipath的基础dm-multipath其实是dm的一个target驱动。

复制

redhat.multipath

redhat.multipath

redhat.multipath

接口驱动查看

1.针对于 FC SAN 多路径块存储卷磁盘

# (1) 存储上将LUN映射给需要的主机,然后查看主机或者存储交换机上的wwn号
cat /sys/class/fc_host/host*/port_name
0x2002d0431efb7f5d  #HBA卡WWN号标识

复制

2.针对于 SAS SAN 多路径块存储卷磁盘

# (1) SAS HBA卡wwn标识号标识
$cat /sys/class/sas_host/host5/device/phy-*/sas_phy/phy-*/sas_address|sort|uniq
$cat /sys/class/sas_phy/phy-*/sas_address|sort|uniq
0x51866da091944100

# (2) SAS-HBA卡驱动查看  
$lspci | grep LSI
01:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS-3 3108 [Invader] (rev 02)
04:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3008 PCI-Express Fusion-MPT SAS-3 (rev 02)
# 系统块设备查看
$ll /sys/block/ | grep 04:00.0
lrwxrwxrwx  1 root root 0 Sep 11 16:57 sdb -> ../devices/pci0000:00/0000:00:02.0/0000:04:00.0/host4/port-4:2/end_device-4:2/target4:0:2/4:0:2:1/block/sdb/
lrwxrwxrwx  1 root root 0 Sep 11 16:57 sdc -> ../devices/pci0000:00/0000:00:02.0/0000:04:00.0/host4/port-4:2/end_device-4:2/target4:0:2/4:0:2:2/block/sdc/
lrwxrwxrwx  1 root root 0 Sep 11 15:15 sdd -> ../devices/pci0000:00/0000:00:02.0/0000:04:00.0/host4/port-4:1/end_device-4:1/target4:0:1/4:0:1:1/block/sdd/
lrwxrwxrwx  1 root root 0 Sep 11 15:15 sde -> ../devices/pci0000:00/0000:00:02.0/0000:04:00.0/host4/port-4:1/end_device-4:1/target4:0:1/4:0:1:2/block/sde/

# (3) systool 命令:http://fibrevillage.com/storage/61-systool-a-useful-tool-for-san-as-well-for-sysfs-devices
$apt install sysfsutils
$systool -c sas_host -v
# Class = "sas_host"

# Class Device = "host5"
# Class Device path = "/sys/devices/pci0000:00/0000:00:02.0/0000:04:00.0/host5/sas_host/host5"
# uevent              =

# Device = "host5"
# Device path = "/sys/devices/pci0000:00/0000:00:02.0/0000:04:00.0/host5"
# uevent              = "DEVTYPE=scsi_host"

复制

3.针对于 iSCSI 块存储磁盘

# 暂代补充

复制

磁盘SCSI设备扫描添加与卸载

# (1) SCSI存储设备扫描
# 方式1:
# yum install –y sg3_utils
$ sudo rescan-scsi-bus.sh #/usr/bin/rescan-scsi-bus.sh
Scanning SCSI subsystem for new devices
Scanning host 0 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
 Scanning for device 0 2 0 0 ...
OLD: Host: scsi0 Channel: 02 Id: 00 Lun: 00
      Vendor: DELL     Model: PERC H730 Mini   Rev: 4.27
      Type:   Direct-Access                    ANSI SCSI revision: 05
Scanning host 1 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
 Scanning for device 1 0 0 1 ...
OLD: Host: scsi1 Channel: 00 Id: 00 Lun: 01
      Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
      Type:   Direct-Access                    ANSI SCSI revision: 05
sg2 changed: LU not available (PQual 1)
OLD: Host: scsi1 Channel: 00 Id: 00 Lun: 02
      Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
      Type:   Direct-Access                    ANSI SCSI revision: 05
 Scanning for device 1 0 1 1 ...
OLD: Host: scsi1 Channel: 00 Id: 01 Lun: 01
      Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
      Type:   Direct-Access                    ANSI SCSI revision: 05
sg4 changed: LU not available (PQual 1)
OLD: Host: scsi1 Channel: 00 Id: 01 Lun: 02
      Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
      Type:   Direct-Access                    ANSI SCSI revision: 05
Scanning host 2 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 3 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 4 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 5 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 6 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 7 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 8 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 9 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 10 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
Scanning host 11 for  SCSI target IDs  0 1 2 3 4 5 6 7, all LUNs
 Scanning for device 11 0 0 0 ...
OLD: Host: scsi11 Channel: 00 Id: 00 Lun: 00
      Vendor: PLDS     Model: DVD+-RW DU-8A5LH Rev: 6D51
      Type:   CD-ROM                           ANSI SCSI revision: 05
.0 new or changed device(s) found.
0 remapped or resized device(s) found.
0 device(s) removed.

# 方式2:如果更换HBA卡或者添加了新的LUN卷块存储则需要重新扫盘
for i in /sys/class/scsi_host/*; do echo "- - -" > $i/scan; done
# Tips:某些存储或系统没有scan文件,可以通issue_lip文件识别
echo "1" > /sys/class/fc_host/host4/issue_lip  

# (2) 查看存储设备是否映射到主机LUN卷存储是否被添加到本地
$ fdisk -l | grep "/dev"
# Disk /dev/sde: 1 TiB, 1099511627776 bytes, 2147483648 sectors
# Disk /dev/sdd: 1.2 TiB, 1319413953024 bytes, 2576980377 sectors
# Disk /dev/mapper/k8sapp: 1.2 TiB, 1319413953024 bytes, 2576980377 sectors
# Disk /dev/mapper/k8slog: 1 TiB, 1099511627776 bytes, 2147483648 sectors

$ lsblk
# sdb        8:16   0  1.2T  0 disk
# └─k8sapp 253:0    0  1.2T  0 mpath /mnt/nfs/k8sapp
# sdc        8:32   0    1T  0 disk
# └─k8slog 253:1    0    1T  0 mpath /mnt/nfs/k8slog
# sdd        8:48   0  1.2T  0 disk
# └─k8sapp 253:0    0  1.2T  0 mpath /mnt/nfs/k8sapp
# sde        8:64   0    1T  0 disk
# └─k8slog 253:1    0    1T  0 mpath /mnt/nfs/k8slog

$cat /proc/partitions # 分区信息带有(major|minor)
major minor  #blocks  name
   7        0      56648 loop0
   7        1      72256 loop1
   7        2      30600 loop2
   7        3      72984 loop3
   7        4      30608 loop4
   7        5      56276 loop5
   8        0 1170997248 sda
   8        1       1024 sda1
   8        2  524288000 sda2
   8        3    4194304 sda3
   8        4   10485760 sda4
   8        5  629145600 sda5
   8       64 1073741824 sde
   8       48 1288490188 sdd
  11        0    1048575 sr0
 253        0 1288490188 dm-0
 253        1 1073741824 dm-1
   8       32 1073741824 sdc
   8       16 1288490188 sdb


# (3) 众所周知SATA和SCSI是支持热插拔的,通过存储设备直连的LUN到服务器时候,系统不能自动识别往往需要重启系统来识别,但是有另外一种方法可以很方面的让系统识别新的设备,即通过`/proc/scsi/scsi`使系统识别新的驱动器
echo "scsi add-single-device w x y z" > /proc/scsi/scsi
# 为使该命令正常运行,必须指定正确的参数值 w、x、y 和 z,如下所示:
# w 是主机适配器标识,第一个适配器为零(0)
# x 是主机适配器上的 SCSI 通道,第一个通道为零(0)
# y 是设备的 SCSI 标识
# z 是 LUN 号,第一个 LUN 为零(0)

例如:从rescan-scsi-bus.sh执行中获得设备参数值 Scanning for device 1 0 0 1
# 添加硬盘并查看
echo "scsi add-single-device 1 0 0 0" >/proc/scsi/scsi && fdisk -l
# 删除硬盘并查看(确保首先卸下的磁盘设备从系统中umount)
echo "scsi remove-single-device 0 0 1 0" >/proc/scsi/scsi && fdisk -l

$cat /proc/scsi/scsi
# Attached devices:
# Host: scsi0 Channel: 02 Id: 00 Lun: 00
#   Vendor: DELL     Model: PERC H730 Mini   Rev: 4.27
#   Type:   Direct-Access                    ANSI  SCSI revision: 05
# Host: scsi4 Channel: 00 Id: 01 Lun: 01     # 例如:device ID = 4 0 1 1
#   Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
#   Type:   Direct-Access                    ANSI  SCSI revision: 05
# Host: scsi4 Channel: 00 Id: 01 Lun: 02     # 例如:device ID = 4 0 1 2
#   Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
#   Type:   Direct-Access                    ANSI  SCSI revision: 05
# Host: scsi11 Channel: 00 Id: 00 Lun: 00  
#   Vendor: PLDS     Model: DVD+-RW DU-8A5LH Rev: 6D51
#   Type:   CD-ROM                           ANSI  SCSI revision: 05
# Host: scsi4 Channel: 00 Id: 02 Lun: 01     # 例如:device ID = 4 0 2 2
#   Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
#   Type:   Direct-Access                    ANSI  SCSI revision: 05
# Host: scsi4 Channel: 00 Id: 02 Lun: 02     # 例如:device ID = 4 0 2 2
#   Vendor: COMPELNT Model: Compellent Vol   Rev: 0701
#   Type:   Direct-Access                    ANSI  SCSI revision: 05

复制

multipath 配置和使用

案例1.SAS FAN 多路径

# (0) 多路径自动处理可载入模块
modprobe dm-multipath    # 初始化DM
modprobe dm-round-robin
lsmod | grep multipath   # 查看 
# dm_multipath           32768  4 dm_round_robin,dm_service_time
# multipath              20480  0

# (1) 查看当前系统下各磁盘分区
root@ubuntu:/mnt/ww# fdisk -l | egrep "^/dev"
# 比如 /dev/mapper/xxxxx 的磁盘可能是逻辑卷(LVM)或者多路径(Multipath)
Disk /dev/mapper/mpatha-part1  4096 0 2576980377  1.2T Linux filesystem
Disk /dev/mapper/mpatha-part2  4096 0 2147483648  1T Linux filesystem


# (2) 查看当前系统下是否存在逻辑卷在进行判别;
$lvdisplay
# 或者采用以下命令分区以及逻辑卷一目了然
$lvmdiskscan
dev/loop0                [      55.32 MiB]
/dev/mapper/mpatha-part1 [      <1.20 TiB]
/dev/loop1               [      70.56 MiB]
/dev/mapper/mpatha-part2 [       1.00 TiB]
/dev/loop2         [      29.88 MiB]
/dev/sda2          [     500.00 GiB]
/dev/loop3         [      71.27 MiB]
/dev/sda3          [       4.00 GiB]
/dev/loop4         [      29.89 MiB]
/dev/sda4          [      10.00 GiB]
/dev/loop5         [     <54.96 MiB]
/dev/sda5          [     600.00 GiB]
2 disks
10 partitions
0 LVM physical volume whole disks
0 LVM physical volumes


# (3) 查看当前系统下是否存在多路径磁盘多路径一般的 /dev/mapper/xxxx 链接到一个磁盘 /dev/dm-x 的块设备文件
$ ls -alh /dev/mapper/mpatha-part1
lrwxrwxrwx 1 root root 7 Sep  8  2020 /dev/mapper/mpatha-part1 -> ../dm-1
$ multipath -ll 
# mpatha (36000d3100366e6000000000000000020) dm-1 COMPELNT,Compellent Vol
# size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=active
#   |- 4:0:1:2 sde 8:64 failed ready running   # 未挂载的时候显示failed
#   `- 4:0:2:2 sdc 8:32 active ready running
# mpathb (36000d3100366e6000000000000000021) dm-0 COMPELNT,Compellent Vol
# size=1.2T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=active
#   |- 4:0:1:1 sdd 8:48 failed ready running
#   `- 4:0:2:1 sdb 8:16 active ready running


# (4) multipath.conf 配置
blacklist {
  devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"  
}
defaults {
  user_friendly_names yes  # 磁盘名称友好显示
  path_grouping_policy multibus
  failback immediate
  no_path_retry fail
}
# 在/etc/multipath.conf中可以配置设备scsi id和设备路径形成绑定
multipaths {
  multipath {
    wwid  "36000d3100366e6000000000000000021"
    alias k8sapp
  }
  multipath {
    wwid "36000d3100366e6000000000000000020"
    alias k8slog
  }
}


# (5) multipath 操作(重新加载配置文件并合并路径)
systemctl restart multipathd && systemctl status multipathd  # 重启与查看多路径服务启用状态
multipath -F    # 删除现有链路
multipath -v2   # 打印创建或修改的多路径映射的拓扑即多路径设备相关信息
multipath -v3   # 查看多路径 blacklist、whitelist和设备wwid
multipath -ll   # 查看当前系统的多路径拓扑
# k8slog (36000d3100366e6000000000000000020) dm-1 COMPELNT,Compellent Vol
# size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=active
#   |- 4:0:1:2 sde 8:64 active ready running
#   `- 4:0:2:2 sdc 8:32 active ready running
# k8sapp (36000d3100366e6000000000000000021) dm-0 COMPELNT,Compellent Vol
# size=1.2T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=active
#   |- 4:0:1:1 sdd 8:48 active ready running
#   `- 4:0:2:1 sdb 8:16 active ready running

# 从上面的信息可以看出multipat获取到了2个路径`实际设备sde/虚拟设备sdc`设备聚合成为一个k8slog磁盘设备名称,k8slog是多路径映射名称,指向dm-1它是block设备。
# 而 /dev/mapper/k8sapp 与 /dev/dm-1实际上指向的同一个设备
/usr/lib/udev/scsi_id -g /dev/dm-1
36000d3100366e6000000000000000020
/usr/lib/udev/scsi_id -g /dev/mapper/k8sapp
36000d3100366e6000000000000000021


# (6) 多路径设备磁盘分区与格式
# 此处由于使用的磁盘无需分区着就使用设备的全部控制,但是注意如果磁盘大于2T则需要采用parted命令进行磁盘分区;
$ mkfs.xfs /dev/mapper/k8sapp 
$ mkfs.xfs /dev/mapper/k8slog
$ fdisk -l
# Disk /dev/mapper/k8sapp: 1.2 TiB, 1319413953024 bytes, 2576980377 sectors
# Units: sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 4096 bytes
# I/O size (minimum/optimal): 2097152 bytes / 2097152 bytes

# Disk /dev/mapper/k8slog: 1 TiB, 1099511627776 bytes, 2147483648 sectors
# Units: sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 4096 bytes
# I/O size (minimum/optimal): 2097152 bytes / 2097152 bytes


# (7) 查看dm-1 、dm-2设备的uuid
$ls -alh /dev/disk/by-uuid/
lrwxrwxrwx 1 root root  10 Sep 12 23:23 40fd2fd5-997f-4266-a0c8-95c0e534a23b -> ../../dm-1
lrwxrwxrwx 1 root root  10 Sep 12 23:23 acccde8a-16b2-4a87-a8da-0ba2c72aa688 -> ../../dm-0


# (8) 挂载多路径设备到文件系统中(推荐采用UUID进行挂载)
# k8sapp
/dev/disk/by-uuid/acccde8a-16b2-4a87-a8da-0ba2c72aa688 /mnt/nfs/k8sapp xfs defaults 0 0
# k8slog
/dev/disk/by-uuid/40fd2fd5-997f-4266-a0c8-95c0e534a23b /mnt/nfs/k8slog xfs defaults 0 0


# (9) 查看挂载的多路径设备
$ lsblk
sdb        8:16   0  1.2T  0 disk
└─k8sapp 253:0    0  1.2T  0 mpath /mnt/nfs/k8sapp
sdc        8:32   0    1T  0 disk
└─k8slog 253:1    0    1T  0 mpath /mnt/nfs/k8slog
sdd        8:48   0  1.2T  0 disk
└─k8sapp 253:0    0  1.2T  0 mpath /mnt/nfs/k8sapp
sde        8:64   0    1T  0 disk
└─k8slog 253:1    0    1T  0 mpath /mnt/nfs/k8slog

$ df -h
/dev/mapper/k8sapp              1.2T  8.6G  1.2T   1% /mnt/nfs/k8sapp
/dev/mapper/k8slog              1.0T  7.2G 1017G   1% /mnt/nfs/k8slog
192.168.1.216:/mnt/nfs/k8sapp  1.2T  8.6G  1.2T   1% /nfs/k8sapp
192.168.1.216:/mnt/nfs/k8slog  1.0T  7.2G 1017G   1% /nfs/k8slog

复制

至此通过存储设备分配给主机的存储卷通过 SAS SAN线缆 连接到主机HBA设备中被正常识别与使用。

案例2.FC SAN 存储直链

# 1.检查用户登录信息 & 同步服务器时间 为了与存储上的时间对应
$id && ntpdate 10.10.6.101
uid=0(root) gid=0(root) groups=0(root)
23 May 21:55:37 ntpdate[72045]: step time server 10.10.6.101 offset 448.347362 sec
$ hwclock -w
$ date


# 2.查看存储映射到主机的光纤卡标识(此标识也可以帮助我们在多条FC 光纤接到主机时区分绑定的主机是否对应主机上的HBA卡标识)
$cat /sys/class/fc_host/host15/port_name
0x100000109b341bc8
$cat /sys/class/fc_host/host16/port_name
0x100000109b341bc4


# 3.对光纤交换机进行授权实际上是进行scsi设备进行热备添加到主机上而不用重启
echo '- - -' > /sys/class/scsi_host/host16/scan
echo '- - -' > /sys/class/scsi_host/host15/scan


# 4.查看linux磁盘分区
lvmdiskscan
fdisk -l


# 5.多路径multipathd配置文件生成(手动编译安装)
nano /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf
multipaths {
  multipath {
    wwid 3600a09803830447967244c61626d6e2f
    alias o3db
    path_grouping_policy multibus #failover
    #path_checker readsector0   #决定路径状态的方法 
    path_selector "round-robin 0"
    failback immediate
  }
  multipath {
    wwid 3600a09803830447967244c61626d6e59
    alias o3app
    path_grouping_policy multibus #failover
    #path_checker readsector0
    path_selector "round-robin 0"
    failback immediate
  }
  multipath {
    wwid 3600a09803830447967244c61626d6e63
    alias fbapp
    path_grouping_policy multibus #failover
    #path_checker readsector0
    path_selector "round-robin 0"
    failback immediate
  }
}

# 将此文件复制到修改后的文件复制到 /etc
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc

# 6.初始化DM并检查mathconf服务是否开启 /sbin/mpathconf
modprobe dm-multipath
modprobe dm-round-robin
systemctl restart multipathd

# 7.进到/dev/mapper进行查看映射成功的LUN名称
ls -ltr /dev/mapper
crw------- 1 root root 10, 236 Jan 3 14:04 control
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-var_log_audit -> ../dm-3
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-var_log -> ../dm-2
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-var -> ../dm-1
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-swa p -> ../dm-5
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-root -> ../dm-6
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-tmp -> ../dm-0
lrwxrwxrwx 1 root root 7 Jan 3 14:04 rhel-home -> ../dm-4
lrwxrwxrwx 1 root root 7 May 23 22:37 vgo3app-lvo3app -> ../dm-7  # 关键点

# 8.vgo3app-lvo3app
vgchange -an vgo3db

复制

案例3.多路径ISCSI磁盘的存储池配置 测试环境: Ubuntu 14.04

# 1.安装需要软件: 
apt-get install multipath-tools tgt open-iscsi

# 2.创建裸磁盘(RAW): 
qemu-img -f raw testmul.raw 5G
# 或者 
dd if=/dev/zero of=testmul.raw bs=1M count=0 seek=5120

# 3.挂载RAW磁盘文件 
losetup -f --show testmul.raw

复制

创建ISISC盘:

# 1.添加tgt配置文件(/etc/tgt/targets.conf) : /dev/loop0 为第三步挂载的loop设备
<target iqn.2013-10.cn.openstack:cinder-volume.target>
  backing-store /dev/loop0
</target>

# 2.重启tgt
service tgt restart

# 3.查看ISISC信息 (192.168.1.3本机ip地址;默认端口为3260;iptables开启,可以关闭或者定义允许规则)
iscsiadm -m discovery -t st -p 192.168.1.3:3260
# 输出信息:
# 192.168.1.3:3260,1 iqn.2013-10.cn.openstack:cinder-volume.target

复制

配置多路径 (multipath) :

# 1.路径配置 iface0为路径名,wlan0为网卡 (此处只配置了单路径需要配置多路自行配置。 )
iscsiadm -m iface -I iface0 –op=new
iscsiadm -m iface -I iface0 –op=update -n iface.net_ifacename -v wlan0
iface0 路径具体配置信息: /etc/iscsi/ifaces/iface0

# 2.登陆ISISC磁盘
iscsiadm -m node -T iqn.2013-10.cn.openstack:cinder-volume.target -p 192.16.1.3:3260 -I iface0 -l

# 3.查看新增磁盘
fdisl -l #可以看到增加的磁盘: /dev/sdb 
# Disk /dev/sdb: 5368 MB, 5368709120 bytes
# 166 heads, 62 sectors/track, 1018 cylinders, total 10485760 sectors
# Units = 扇区 of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 512 bytes
# I/O size (minimum/optimal): 512 bytes / 512 bytes
# Disk identifier: 0x00000000
# Disk /dev/sdb doesnt contain a valid partition table

# 4.multipath配置文件 
# a.配置文件修改 (/etc/multipath.conf),并重启动multipath-tools服务
blacklist {
  devnode "^sda" 
}
defaults {
  user_friendly_names yes
}


# b.运行mulpath 
$multipath -ll
# 输出信息:
iscsidisk1 (33000000100000001) dm-0 IET     ,VIRTUAL-DISK    
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  `- 6:0:0:1 sdb 8:16 active ready running

# 备注:如果执行上述命令,没有信息输出执行 multipath -v3 输出如下信息 
# 把 /dev/sdb的uuid 添加到 /etc/multipath/wwids 中,这样multipath就不会过滤掉设备 /dev/sdb 并重启multipath-tools服务。
===== paths list =====
uuid              hcil    dev dev_t pri dm_st chk_st vend/prod/rev            
33000000100000001 6:0:0:1 sdb 8:16  1   undef ready  IET     ,VIRTUAL-DISK    
Apr 10 19:59:27 | params = 1 queue_if_no_path 0 1 1 round-robin 0 1 1 8:16 1000 
Apr 10 19:59:27 | status = 2 0 0 0 1 1 A 0 1 0 8:16 A 0 


# c. 添加 multipath 信息/etc/multipath.conf
multipaths {
  multipath {
    wwid  "33000000100000001"
    alias iscsidisk1
  }
}

# 5.重启multipath-tools服务执行
systemctl restart multipath-tools
$lsblk
sdb                   8:16   0     5G  0 disk  
└─iscsidisk1 (dm-0) 252:0    0     5G  0 mpath

复制

补充parted磁盘分区与格式化挂载:

# 1.多路径识别的设备用parted工具来做分区格式化
parted /dev/sdb  
(parted) mklabel gpt       # 把硬盘转换成GPT分区
(parted) mkpart primary 1  # 创建主分区注意需要`选择分区的文件系统类型ext4,ext3,xfs`
(parted) print

# 2.主分区文件系统XFS格式化
mkfs.xfs -f /dev/sdc1 #格式化成xfs
mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=64 /dev/mapper/mpathbp1 #>=20T时候  

# 3.手动挂载
mount /dev/sdc1 /home/

# 4.开机自动挂载
/dev/sdb1(磁盘)       /home(挂载点)    xfs(文件格式)   defaults 0 0
df -h查看挂载点文件名
/dev/sdb1              16T   33M   16T   1% /home

复制

multipath 命令 - 设备映射器目标自动配置 描述: 该命令主要作用是设备进行映射器目标自动配置,即用于检测和合并到设备的多条路径,以用于故障转移或性能原因。

语法参数:

# 帮助说明
man multipath

# SYNOPSIS | 大纲
multipath [-v level] [-B|-d|-i|-q|-r] [-b file] [-p policy] [device]
multipath [-v level] [-R retries] -f device
multipath [-v level] [-R retries] -F
multipath [-v level] [-l|-ll] [device]
multipath [-v level] [-a|-w] device
multipath [-v level] -W
multipath [-v level] [-i] [-c|-C] device
multipath [-v level] [-i] [-u|-U]
multipath [-h|-t|-T]

# ARGUMENTS | 命令行参数
# 设备参数将multipath的操作限制为与给定表达式匹配的设备,参数可以引用多路径映射或其组件(“路径”)
device node  # 设备节点的文件名,例如/dev/dm-10或/dev/sda.如果节点引用表示多路径映射的现有设备映射器设备,则根据操作模式选择映射或其路径。否则它选择路径设备。
device ID    # 由主设备号指定的内核设备号:副设备号例如lsblk中MAJ:MIN属性值65:16,此格式只能用于路径设备
WWID         # 要列出系统中存在的设备的WWIDs,可以使用命令"multipath -d -v3 2>/dev/null"
# device action limited to:
#   . multipath named 'device' (ex: mpath0)
#   . multipath whose wwid is 'device' (ex: 60051...)
#   . multipath including the path named 'device' (ex: /dev/sda or/dev/dm-0)
#   . multipath including the path with maj:min 'device' (ex: 8:0)


# 运行模式
# 默认的操作模式是从系统中找到的设备中检测并设置多路径映射。使用以下命令行开关选择其他操作模式:
-f     #如果多路径设备未使用,则刷新(删除)指定为参数的多路径设备映射
-F     #刷新(删除)所有未使用的多路径设备映射 
-l     #从系统文件和设备映射器中获取的信息中显示(“列表”)当前的多路径拓扑
-ll    #从所有可用的信息(sysfs,设备映射器,路径检查器…)显示(“列表”)当前的多路径拓扑
-a     #将指定设备的WWID添加到WWIDs文件中
-w     #从WWIDs文件中删除指定设备的WWID
-W     #将WWIDs文件重置为只包含当前的多路径设备
-c     #检查一个块设备是否应该是多路径设备中的一个路径
-C     #检查多路径设备是否有可用的路径。这可以用来测试该设备上的I/O是否可能成功。命令本身不尝试在设备上执行I/O。
-u     #检查程序环境中指定的设备是否应该是多路径设备中的路径
-U     #检查程序环境中指定的设备是否是具有可用路径的多路径设备与-C效果一致
-h     #打印使用文本(帮助)
-t     #显示当前使用的默认多路径配置
-T     #显示当前使用的multipathd配置,将输出限制为系统中实际出现的设备。这可以用作创建multipath.conf的模板。


# 选项
-v level #在默认和“列表”操作模式下打印到stdout的冗长信息。默认的级别是- v2。
  0    #Nothing is printed. 没有打印
  1    #在列表模式下,打印所有多路径映射的WWIDs。
  2    #在默认模式下,打印创建或修改的多路径映射的拓扑。(在列表模式下,。)      
  3    #打印所有检测到的路径和所有多路径映射的拓扑。 (包含多路径详情blacklist、whitelist和设备wwid等等信息)     
       #冗余级别还控制打印到stderr的日志和调试消息的级别。默认的级别对应于LOG_NOTICE(在正常运行中不应该错过的重要消息)。

-d     #预演,不要创建或更新devmap。
-i     #处理设备时忽略WWIDs文件。如果find_multipaths严格或在multipath中设置find_multipaths no。conf, multipath只考虑WWIDs文件中列出的设备。这种选择凌驾于行为之上。对于find_multipaths的其他值,此选项不起作用。
-B      #将绑定文件视为只读。
-b file #设置user_friendly_names绑定文件位置。The default is /etc/multipath/bindings.
-q      #不要为多路径映射取消设置设备映射器 queue_if_no_path 功能。通常如果multipathd不运行multipath会这样做,因为只有运行中的多路径守护进程保证不可用的路径在再次可用时被恢复。
-p policy #强制所有映射到指定的路径分组策略,策略的可能值与multipath.conf(5)中的path_grouping_policy的值相同,可选策略策略;
          # . failover            每个优先级组一个路径
          # . multibus            所有路径在一个优先级组中
          # . group_by_serial     每个串行一个优先级组
          # . group_by_prio       每个优先级lvl有一个优先级组
          # . group_by_node_name  每个目标节点一个优先级组

-r        #强制重新加载所有现有的多路径映射。如果multipathd守护进程正在运行,则将此命令委托给它
-R retries #重试刷新正在使用的多路径设备的次数。默认值是0。

复制

基础示例:

# (1) 常用命令
multipath -F  # 刷新(删除)所有未使用的多路径设备映射 
multipath -v2 # 打印创建或修改的多路径映射的拓扑或打印所有多路径映射的拓扑
multipath -r  # 强制重新加载所有现有的多路径映射,即修改multipath.conf配置文件之后采用其可以热加载

# (2) 列举所多路径设备中所有wwids信息、设备id号以及MAJ:MIN属性值信息
multipath -v3 2>/dev/null
# ===== paths list =====
# uuid                              hcil    dev dev_t pri dm_st chk_st vend/prod
# 36000d3100366e6000000000000000021 4:0:1:1 sdd 8:48  50  undef undef  COMPELNT,
# 36000d3100366e6000000000000000020 4:0:1:2 sde 8:64  50  undef undef  COMPELNT,
# 36000d3100366e6000000000000000021 4:0:2:1 sdb 8:16  1   undef undef  COMPELNT,
# 36000d3100366e6000000000000000020 4:0:2:2 sdc 8:32  1   undef undef  COMPELNT,

# (3) 缺省以及当前多路径软件配置信息
multipath -t | more
multipath -T
defaults {
  verbosity 2
  polling_interval 5
  max_polling_interval 20
  .....
  marginal_pathgroups "no"
}
blacklist {
  devnode "^sda"
  devnode "^hd[a-z]"
  devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
  devnode "^dcssblk[0-9]*"
}
blacklist_exceptions {
  property "(SCSI_IDENT_|ID_WWN)"
}
devices {
  device {
    vendor "NVME"
    product ".*"
    uid_attribute "ID_WWN"
    path_checker "none"   #决定路径状态的方法 
    retain_attached_hw_handler "no"
  }
}

复制

multipath.conf - 配置详解

配置多路径文件 /etc/multipath.conf 参数说明

$multipath -T
defaults {
  verbosity 2
  polling_interval 5
  max_polling_interval 20
  reassign_maps "no"
  multipath_dir "//lib/multipath"
  path_selector "service-time 0"  #选择那一条路径进行下次IO操作
  path_grouping_policy "multibus" #路径组策略 
  uid_attribute "ID_SERIAL"
  prio "const"
  prio_args ""
  features "0"
  path_checker "tur"  # 决定路径状态的方法 
  alias_prefix "mpath"
  failback "immediate" #故障恢复的模式 
  rr_min_io 1000   # 在当前的用户组中,在切换到另外一条路径之前的IO请求的数目 
  rr_min_io_rq 1
  max_fds "max"
  rr_weight "uniform"
  no_path_retry "fail" #默认fail,在disable queue之前系统尝试使用失效路径的次数的数值 
  queue_without_daemon "no"
  flush_on_last_del "no"
  user_friendly_names "yes"
  fast_io_fail_tmo 5
  bindings_file "/etc/multipath/bindings"
  wwids_file "/etc/multipath/wwids"
  prkeys_file "/etc/multipath/prkeys"
  log_checker_err always
  all_tg_pt "no"
  retain_attached_hw_handler "yes"
  detect_prio "yes"
  detect_checker "yes"
  force_sync "no"
  strict_timing "no"
  deferred_remove "no"
  config_dir "/etc/multipath/conf.d"
  delay_watch_checks "no"
  delay_wait_checks "no"
  san_path_err_threshold "no"
  san_path_err_forget_rate "no"
  san_path_err_recovery_time "no"
  marginal_path_err_sample_time "no"
  marginal_path_err_rate_threshold "no"
  marginal_path_err_recheck_gap_time "no"
  marginal_path_double_failed_time "no"
  find_multipaths "on"
  uxsock_timeout 4000
  retrigger_tries 0
  retrigger_delay 10
  missing_uev_wait_timeout 30
  skip_kpartx "no"
  disable_changed_wwids ignored
  remove_retries 0
  ghost_delay "no"
  find_multipaths_timeout -10
  enable_foreign ""
  marginal_pathgroups "no"
}

# 后端设备(不包含以下设备节点)
blacklist {
  devnode "^sda"
  devnode "^hd[a-z]"
  devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
  devnode "^dcssblk[0-9]*"
  devnode "^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]"
  devnode "^(td|hd|vd)[a-z]"
  devnode "^cciss!c[0-9]d[0-9]*"
}
  device {
    vendor "SGI"  #厂商名称,可通过multipath –v3获取到 
    product "Universal Xport"  #产品型号 
    getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序 
  }
  device {
          vendor "^DGC"
          product "LUNZ"
  }
  device {
          vendor "EMC"
          product "LUNZ"
  }
  device {
          vendor "DELL"
          product "Universal Xport"
  }
  device {
          vendor "IBM"
          product "Universal Xport"
  }
  device {
          vendor "IBM"
          product "S/390"
  }
  device {
          vendor "LENOVO"
          product "Universal Xport"
  }
  device {
          vendor "(NETAPP|LSI|ENGENIO)"
          product "Universal Xport"
  }
  device {
          vendor "STK"
          product "Universal Xport"
  }
  device {
          vendor "SUN"
          product "Universal Xport"
  }
  device {
          vendor "(Intel|INTEL)"
          product "VTrak V-LUN"
  }
  device {
          vendor "Promise"
          product "VTrak V-LUN"
  }
  device {
          vendor "Promise"
          product "Vess V-LUN"
  }
}
blacklist_exceptions {
  property "(SCSI_IDENT_|ID_WWN)"
}
devices {
  device {
    vendor "COMPELNT"
    product "Compellent Vol"
    path_grouping_policy "multibus"
    no_path_retry "queue"
  }
}

overrides {
  ...
}

multipaths {
  multipath {
    wwid "36000d3100366e6000000000000000021"   #磁盘的WWID 
    alias "k8sapp"
  }
  multipath {
    wwid "36000d3100366e6000000000000000020"
    alias "k8slog"
  }
}

复制

bindings - 多路径缺省绑定的别名

描述:/etc/multipath/bindings文件是在multipath.conf中定义了user_friendly_names属性时候,默认采用以下友好的别名名称;

$cat /etc/multipath/bindings
# Format:
# alias wwid
mpatha 36000d3100366e6000000000000000020
mpathd 36000d3100366e6000000000000000021

复制

Windows - MPIO

描述: 在Windows下也自带多路径管理软件它叫MPIO,Windows MPIO集成在Windows的系统中,默认情况下不会安装,需要手动安装起来。

Step 1.打开“Server Manager-服务器管理”,选择“Feature”,选择右键菜单中的“Add Features-添加功能”

Step 2.添加“MultiPath I/O”在弹出的Features选择框中,选择“MultiPath I/O”

WeiyiGeek.MultiPath I/O

WeiyiGeek.MultiPath I/O

WeiyiGeek.MultiPath I/O

Step 3.需要对MPIO多路径进行配置才能让其接管存储系统。Windows 2008及后续版本的操作系统提供mpclaim多路径命令可以用于查询磁盘信息;

# 查询设备VID和PID,此处举例所用,实际配置的时候需要以现场环境的显示为准。
VID:Vendor ID,厂商ID。例如HUAWEI等。
PID:Product ID,产品ID。例如S5500T、S5600T。

# 查询磁盘信息
mpclaim -e

复制

Step 4.运行MPIO管理控制台 %windir%\system32\mpiocpl.exe 也可在管理工具找到它,进行添加待管理存储设备的信息 在“MPIO Device”中点击“Add”添加存储设备。

  • 如果对iSCSI initiator使用MPIO,则要求在“Discover Multi-Paths”菜单中开启“Add Support for iSCSI device”选项。
  • 大多数型号的设备可以在“Discover MultiPaths”选项下的Others选项中自动识别,此时只需点击 Add将其加入即可。

WeiyiGeek.

WeiyiGeek.

WeiyiGeek.

Step 5.重启主机使多路径生效,然后查看MPIO策略。重启主机后将重新扫描磁盘。磁盘数量与映射给主机的LUN的数量一致。右键单击磁盘,选择“Properties”可以看到属性中MPIO选项,一般来说如无特别要求,优先使用默认MPIO策略。 不同情况下默认的策略是不同的,常用操作系统的默认策略如表1-1所示。

操作系统

存储系统

默认MPIO策略

说明

Windows Server 2008

开启ALUA

Round Robin With Subset

关闭ALUA

Fail over only

Windows Server 2008 R2

开启ALUA

Round Robin With Subset

关闭ALUA

Round Robin

Windows Server 2012 DC

开启ALUA

Round Robin With Subset

关闭ALUA

Round Robin

Step 6.修改路径状态某些特定场景或需求,需对路径状态重新配置。

例如:对于“Fail Over Only”策略,只允许一条路径为Activate状态,其余路径必须编辑成Standby状态;对于Windows 2008,需要将连接到归属控制器的路径状态设置为“Active/Optimized”,将连接到其他控制器的路径状态设置为“Active/Unoptimized”。

Step 7. 保存路径状态配置

磁盘的所有路径状态修改完成后在界面上并不会立刻更新,需要单击MPIO策略配置界面“OK”按钮保存配置,并重新打开MPIO策略配置界面查看更改是否生效。

mpclaim 命令

描述:在cmd下面也可以对MPIO进行管理在使用前

# 查看当前安装的features
dism /online /get-features

# 激活MPIO
dism /online /enable-feature:MultipathIo

# 取消激活MPIO
dism /online /disable-feature:MultipathIo

复制

基础示例:

# 查看Microsoft DSM 管理的存储设备
mpclaim -r
# 查看系统发现的存储设备
mpclaim -e

# 使用MPIO管理所有存储设备
mpclaim.exe -r -i -a ""
# 去掉MPIO对所有设备的管理
mpclaim.exe -r -u -a ""

# 使用MPIO管理光纤通道设备
mpclaim.exe -r -i -d <_VendorID> <_ProductID>
# 去除MPIO对光纤通道设备的管理
mpclaim.exe -r -u -d <_VendorID> <_ProductID>

# 使用MPIO管理 iSCSI 设备
mpclaim -r -i -d "MSFT2005iSCSIBusType_0x9"
#去掉MPIO对iSCSI设备的管理
mpclaim.exe -r -u -d "MSFT2005iSCSIBusType_0x9"

# 修改负载平衡策略
mpclaim.exe –L –M <_num>

复制

注意事项:

  • Windows MPIO多路径软件支持每个Lun的最大路径数为32个(建议每个Lun的路径数不大于32条),大于32条路径会导致Windows 主机系统蓝屏。
  • 对于不支持ALUA的存储,请按照“关闭ALUA”的方式来配置MPIO策略。
  • VendorID需要为8位字节,ProductID为16位字节,不足的以空格填充。
  • 修改负载平衡策略命令中的num参数代表的意思见表

Parameter

Definition

Clear the Policy - 明确的政策

1

Failover Only - 故障转移

2

Round Robin - 循环

3

Round Robin with Subset - 子集循环

4

Least Queue Depth - 至少队列深度

5

Weighted Paths -加权路径

6

Least Blocks - 至少块

7

Vendor Specific - 特定于供应商的


0x02 入坑解决

问题1.在未进行多路径设备挂载时候显示ailed ready running

$multipath -ll
# k8slog (36000d3100366e6000000000000000020) dm-1 COMPELNT,Compellent Vol
# size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=25 status=active
#   |- 5:0:0:2 sdc 8:32 failed ready running  # 关键点
#   `- 5:0:1:2 sde 8:64 active ready running

# 解决办法
$mount /dev/mapper/k8slog /mnt/nfs/k8slog/  # 关键点
$multipath -ll
# k8slog (36000d3100366e6000000000000000020) dm-1 COMPELNT,Compellent Vol
# size=1.0T features='1 queue_if_no_path' hwhandler='1 alua' wp=rw  
# `-+- policy='service-time 0' prio=25 status=active # 关键点
#   |- 5:0:0:2 sdc 8:32 active ready running
#   `- 5:0:1:2 sde 8:64 active ready running

复制

问题2.虚拟机安装ubuntu20.04后,查看系统日志,大量的以下错误信息。排查后发现是multipath 的配置问题,需要排除本地的sda磁盘

# 问题信息
Jun 13 14:31:12 multipathd[615]: sda: add missing path
Jun 13 14:31:12 multipathd[615]: sda: failed to get udev uid: Invalid argument
Jun 13 14:31:12 multipathd[615]: sda: failed to get sysfs uid: Invalid argument
Jun 13 14:31:12 multipathd[615]: sda: failed to get sgio uid: No such file or directory

# 解决流程添加以下内容,sda视本地环境做调整然后重启服务即可。
sudo vi /etc/multipath.conf
blacklist {
  devnode "^sda"
}

sudo service multipath-tools restart

复制


0x03 参考连接
  • http://www.voidcn.com/article/p-dbvqeerl-bmp.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Multipath多路径管理基础介绍与安装配置使用 的相关文章

  • 实实在在万事达!实在智能助力山东万事达集团加速数智化转型

    近日 杭州实在智能科技有限公司 以下简称 实在智能 与山东建筑钢市场 领头羊 山东万事达控股有限公司 以下简称 万事达集团 召开 RPA 机器人流程自动化 项目启动会 实在智能携手万事达集团 联合共建财务RPA一体化研发管理项目 以下简称
  • Java中的IO与NIO篇----第二篇

    系列文章目录 文章目录 系列文章目录 前言 一 阻塞 IO 模型 二 非阻塞 IO 模型 三 多路复用 IO 模型 前言 前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 这篇文章男女通用 看
  • iPhone强制恢复出厂设置,记好这2种方法!

    随着智能手机的广泛普及 如今有越来越多的人开始使用iPhone手机 但是 在使用的过程中 我们可能会遇到各种问题 比如程序崩溃 软件故障 系统运行缓慢等等 此时 恢复出厂设置成为了一种解决问题的有效方法 本文将为大家提供两种iphone强制
  • 人工智能未来发展前景怎么样?

    人工智能的未来发展前景怎么样 人工智能的未来发展前景非常广阔 有以下几个方面的发展趋势和前景 1 人工智能的未来发展前景 应用领域扩展 人工智能将在各个领域得到广泛应用 包括医疗保健 金融 交通 制造业 农业等 人工智能技术将帮助提高效率
  • 各位大佬看看这是不是macos的一个bug啊

    请各位大佬看看是不是一个bug啊 打开mac自带的命令行 先输入man less 显示没问题 再输入man more 发现出现的是less的说明 这里出了问题 第一张图是man less 第二张图是man more 我的系统环境如下
  • 易点易动固定资产管理系统:集成飞书,助力企业全生命周期固定资产管理

    易点易动固定资产管理系统 集成飞书 助力企业全生命周期固定资产管理 在现代商业环境中 固定资产管理对企业的运营和发展至关重要 为了提高管理效率和降低成本 我们引入了易点易动固定资产管理系统 该系统集成了飞书 为企业提供全生命周期的固定资产管
  • 美军杀伤网概念研究及对我防空作战装备体系的启示

    源自 现代防御技术 作者 王玉茜 曹亚杰 佘晓琼 廖咏一 人工智能技术与咨询 发布 摘 要 DARPA寻求从杀伤链转向杀伤网 意图利用信息网络构建高度分散的杀伤网 形成难以预测的杀伤链 美空军在试验旗体系下开展 橙旗 翠旗 和 黑旗 试验
  • Jenkins集成部署java项目

    文章目录 Jenkins简介 安装 Jenkins简介 Jenkins能实时监控集成中存在的错误 提供详细的日志文件和提醒功能 还能用图表的形式形象的展示项目构建的趋势和稳定性 官网 安装 在官网下载windows版本的Jenkins 但是
  • 技术人的年终总结分享

    印象深刻的实战经历 系统学习新技术的心得体会 精心整理的技术文档 想要安利给所有人的开发工具 对技术行业的深度思考 职业规划与心灵成长 新年Flag 在项目中取得的辉煌成绩 在应用开发中遇到的问题与解决方案 职场经历与升职感悟 编程语言的新
  • 电锯切割狂

    欢迎来到程序小院 电锯切割狂 玩法 把木块切成等分的碎片 每关都会有切割次数 木块数 切割越均匀分数越搞 有简单 正常 困难 专家版 快去解锁不同版本进行切割吧 开始游戏 https www ormcc com play gameStart
  • String.join()方法

    String join 是 Java 8 中添加的一个静态方法 它可以将一个字符串数组或者一个迭代器中的元素连接成一个字符串 它的语法如下 public static String join CharSequence delimiter C
  • 老生常谈问题之——进程和线程的关系和区别

    最初 我们在学习进程和线程的时候都是和操作系统的知识相关的 但是我们前端菜鸟除了面试的时候很少用到他们 所以我们还是从前端常见的场景来详细的学习进程和线程吧 在前端提到关于进程和线程的概念主要有以下几个场景 1 js 是单线程的编程语言 也
  • JavaScript基础教程|自定义 Error,扩展 Error,深入继承,包装异常,继承 SyntaxError

    函数组件没有自己转台只负责数据展示 类组件有自己的状态 负责更新ui 27state和setState的方法 state的值是对象 表示一个组件里面可以有多个的数据 组件内部的私有数据 只能在组件内部使用 简化语法初始化state stat
  • 在 IBM Cloud 上使用 Spectrum LSF 管理数据

    在 IBM Cloud 上使用 Spectrum LSF 管理数据 在云环境中处理 HPC 工作负载时 要解决的一个关键挑战是如何以最佳方式管理运行工作负载所需的数据 以及可能需要分析以进行进一步处理和决策的输出 通过使用部署在 IBM C

随机推荐

  • 外包干了2个月,技术退步明显了...

    先说一下自己的情况 大专生 19年通过校招进入湖南某软件公司 干了接近4年的功能测试 今年8月份 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • 2023年总结

    2023年总结 兄弟们好 我写这篇文章的时候是2024年的1月4号了 从2022年重新整理并写自己博客的两年里面 自己也学到了很多 我觉得有必要每年都总结一下自己的收货和不足 因此创建了这个专栏 该专栏每年会更新一篇我对上一年度的总结和感悟
  • lr推荐模型 特征重要性分析

    在分析lr模型特征重要性之前 需要先明白lr模型是怎么回事儿 lr模型公式是sigmoid w1 x1 w2 x2 wn xn 其中w1 w2 wn就是模型参数 x1 x2 xn是输入的特征值 对于lr模型来说 特征可以分为两个粒度 一个是
  • 前端滑动验证码

    效果 完整源码
  • Python小细节之 Spyder使用bug(着急的可以直接滑到最后!有惊喜)

    顺势转移阵地 起因 发现问题 解决问题 解决失败 不装了 结尾 起因 运行程序 奇怪 这个程序我在IDE跑过 没问题的咧 点击 展示细节 复制一下错误 self
  • allegro画PCB如何更新元件的PCB封装

    allegro画PCB如何更新元件的PCB封装 一 更新单个器件的PCB封装 首先菜单栏选择Place gt Update Symbols 如下图 注意此案例是更新了C0805封装 中更新封装 就将上图第二个红色方框中的勾选即可 二 更新某
  • String.format()方法

    Java中的String format 方法是用于格式化字符串的方法 它允许我们将一个字符串格式化为特定的格式 并将它们插入到另一个字符串中 String format 方法的语法如下 String format String format
  • <sa8650>sa8650 CDT-之-汽车CDT配置用户指南(下)

    sa8650 sa8650 CDT 之 汽车CDT配置用户指南 下 3 设备树 3 1 匹配CDT与DTS 3 2 修改CDT信息 以选择不同的设备树 4 CDT的使用 4 1 CDT在TZ中的使用 4 2 CDT在主机中的使用 QNX
  • 代码随想录算法训练营第55天|● 392.判断子序列 ● 115.不同的子序列

    392 判断子序列 已解答 简单 相关标签 相关企业 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子序列是原始字符串删除一些 也可以不删除 字符而不改变剩余字符相对位置形成的新字符串 例如 ace 是 abcde 的
  • Css中默认与继承

    initial默认样式 initial 用于设置 Css 属性为默认值 h1 color initial 如 display 或 position 不能被设置为 initial 因为有默认属性 例如 display inline inher
  • Pendulum详解1——Pendulum库入门指南 - 时光的艺术

    写在开头 时间 是编程世界中不可或缺的元素 无论是事件调度 数据分析 还是用户界面的显示 时间都扮演着关键的角色 然而 在Python的标准库 datetime 中 我们经常面临繁琐的操作和限制 为了摆脱这些束缚 我们引入了一个更加强大和灵
  • WiFi7: MLO之概述

    原文 MLO允许non AP 和AP之间发现 认证 关联 建立1个或者多个Link 每个link独立的信道访问和帧交换 每个link的能力通过关联协商 AP必须设置dot11MultiLinkActivated为真 必须附属于MLD MLD
  • Parade Series - Store

    Split Comma DROP TABLE IF EXISTS tmp keyword dev filter CREATE TEMPORARY TABLE IF NOT EXISTS tmp keyword dev filter toke
  • 雪球股票数据接口

    目录儿 雪球 K线接口 K线对象属性 雪球 K线接口 https stock xueqiu com v5 stock chart kline json symbol SZ300396 begin 1664553600000 period d
  • 基于SpringBoot的足球青训俱乐部

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的足球
  • linux 定时任务crontab编写

    使用命令 crontab e 0 0 sh opt maxwellToMysql create data log sh 编写完保存
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • (vue)el-popover鼠标移入提示效果

    vue el popover鼠标移入提示效果 效果 代码
  • Cannot locate tasks that match ‘:shared:testClasses‘ as task ‘testClasses‘ not found in project

    问题 在使用Gradle构建项目时 遇见了一个奇怪的问题 运行报错如下 Cannot locate tasks that match shared testClasses as task testClasses not found in p
  • Multipath多路径管理基础介绍与安装配置使用

    0x00 前言简述 Q 什么是Multipath多路径 答 Multipath I O 电脑储存技术 指利用两个以上的路径同时在CPU与储存设备之间传送讯号 以达到侦错与强化效能的目的 简单的说当 服务器 到某一存储设备有多条路径时 每条路