[TOC]
0x00 前言简述 Q:什么是Multipath多路径?
答:Multipath I/O 电脑储存技术,指利用两个以上的路径同时在CPU与储存设备之间传送讯号,以达到侦错与强化效能的目的。 简单的说当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独的设备(不便于使用),而多路径允许您将服务器节点和储存阵列间的多个I/O路径配置为一个单一设备(就是我们所说的链路聚合
)即多路径聚合了I/O路径并生成由这些集合路径组成的新设备,这些I/O路径可包含独立电缆、交换器和控制器的实体SAN链接(FC / SAS / iSCSI)
等;
weiyigeek.top-多路径图示
工作原理: 当因为主机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.top-多路径技术
名词解析 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 全球唯一识别号三种方式
[TOC]
0x00 前言简述 Q:什么是Multipath多路径?
答:Multipath I/O 电脑储存技术,指利用两个以上的路径同时在CPU与储存设备之间传送讯号,以达到侦错与强化效能的目的。 简单的说当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独的设备(不便于使用),而多路径允许您将服务器节点和储存阵列间的多个I/O路径配置为一个单一设备(就是我们所说的链路聚合
)即多路径聚合了I/O路径并生成由这些集合路径组成的新设备,这些I/O路径可包含独立电缆、交换器和控制器的实体SAN链接(FC / SAS / iSCSI)
等;
weiyigeek.top-多路径图示
工作原理: 当因为主机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.top-多路径技术
名词解析 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $/usr/lib/udev/scsi_id -u -g /dev/mapper/asm08 360050768xxx000000010d2 $/usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb 36000d3100366e600000000000000001c $cat /etc/multipath/wwids/36000d3100366e600000000000000001c/ $multipath -ll | grep "mpath" mpatha (36000d3100366e600000000000000001c) dm-0 COMPELNT,Compellent Vol
示例2.自定义存储设备名称;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 defaults { user_friendly_names yes .... } $multipath -ll$ls -alh /dev/mapper/mpatha-part1multipaths { multipath { wwid "36000d3100366e600000000000000001c" alias k8sapp } } $multipath -v2$multipath -ll$ls -alh /dev/mapper/k8sapp
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号查看1 2 3 4 5 6 7 cat /sys/class/fc_host/host*/port_name 0x2002d0431efb7f5d $cat /sys/class/sas_phy/phy-*/sas_address|sort|uniq0x51866da091944100
weiyigeek.top-服务器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 自带无需安装1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 rpm -qa | grep "multipath" yum install device-mapper-multipath systemctl enable multipathd || chkconfig multipathd on systemctl start multipathd || service multipathd status apt list | grep "multipath" 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
接口驱动查看
1.针对于 FC SAN 多路径块存储卷磁盘
1 2 3 cat /sys/class/fc_host/host*/port_name 0x2002d0431efb7f5d
2.针对于 SAS SAN 多路径块存储卷磁盘
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $cat /sys/class/sas_host/host5/device/phy-*/sas_phy/phy-*/sas_address|sort|uniq$cat /sys/class/sas_phy/phy-*/sas_address|sort|uniq0x51866da091944100 $lspci | grep LSI01: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.0lrwxrwxrwx 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/ $apt install sysfsutils$systool -c sas_host -v
3.针对于 iSCSI 块存储磁盘
磁盘SCSI设备扫描添加与卸载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 $ sudo 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. for i in /sys/class/scsi_host/*; do echo "- - -" > $i /scan; done echo "1" > /sys/class/fc_host/host4/issue_lip $ fdisk -l | grep "/dev" $ lsblk $cat /proc/partitions major minor 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 echo "scsi add-single-device w x y z" > /proc/scsi/scsi例如:从rescan-scsi-bus.sh执行中获得设备参数值 Scanning for device 1 0 0 1 echo "scsi add-single-device 1 0 0 0" >/proc/scsi/scsi && fdisk -lecho "scsi remove-single-device 0 0 1 0" >/proc/scsi/scsi && fdisk -l$cat /proc/scsi/scsi
multipath 配置和使用
案例1.SAS FAN 多路径1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 modprobe dm-multipath modprobe dm-round-robin lsmod | grep multipath root@ubuntu:/mnt/ww Disk /dev/mapper/mpatha-part1 4096 0 2576980377 1.2T Linux filesystem Disk /dev/mapper/mpatha-part2 4096 0 2147483648 1T Linux filesystem $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 $ ls -alh /dev/mapper/mpatha-part1 lrwxrwxrwx 1 root root 7 Sep 8 2020 /dev/mapper/mpatha-part1 -> ../dm-1 $ multipath -ll 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 } multipaths { multipath { wwid "36000d3100366e6000000000000000021" alias k8sapp } multipath { wwid "36000d3100366e6000000000000000020" alias k8slog } } systemctl restart multipathd && systemctl status multipathd multipath -F multipath -v2 multipath -v3 multipath -ll /usr/lib/udev/scsi_id -g /dev/dm-1 36000d3100366e6000000000000000020 /usr/lib/udev/scsi_id -g /dev/mapper/k8sapp 36000d3100366e6000000000000000021 $ mkfs.xfs /dev/mapper/k8sapp $ mkfs.xfs /dev/mapper/k8slog $ fdisk -l $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 /dev/disk/by-uuid/acccde8a-16b2-4a87-a8da-0ba2c72aa688 /mnt/nfs/k8sapp xfs defaults 0 0 /dev/disk/by-uuid/40fd2fd5-997f-4266-a0c8-95c0e534a23b /mnt/nfs/k8slog xfs defaults 0 0 $ 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 $id && ntpdate 10.10.6.101uid=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 $cat /sys/class/fc_host/host15/port_name0x100000109b341bc8 $cat /sys/class/fc_host/host16/port_name0x100000109b341bc4 echo '- - -' > /sys/class/scsi_host/host16/scanecho '- - -' > /sys/class/scsi_host/host15/scanlvmdiskscan fdisk -l nano /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf multipaths { multipath { wwid 3600a09803830447967244c61626d6e2f alias o3db path_grouping_policy multibus path_selector "round-robin 0" failback immediate } multipath { wwid 3600a09803830447967244c61626d6e59 alias o3app path_grouping_policy multibus path_selector "round-robin 0" failback immediate } multipath { wwid 3600a09803830447967244c61626d6e63 alias fbapp path_grouping_policy multibus path_selector "round-robin 0" failback immediate } } cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc modprobe dm-multipath modprobe dm-round-robin systemctl restart multipathd 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 vgchange -an vgo3db
案例3.多路径ISCSI磁盘的存储池配置 测试环境: Ubuntu 14.041 2 3 4 5 6 7 8 9 10 apt-get install multipath-tools tgt open-iscsi qemu-img -f raw testmul.raw 5G dd if =/dev/zero of=testmul.raw bs=1M count=0 seek=5120 losetup -f --show testmul.raw
创建ISISC盘:1 2 3 4 5 6 7 8 9 10 11 12 <target iqn.2013-10.cn.openstack:cinder-volume.target> backing-store /dev/loop0 </target> service tgt restart iscsiadm -m discovery -t st -p 192.168.1.3:3260
配置多路径 (multipath) :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 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 iscsiadm -m node -T iqn.2013-10.cn.openstack:cinder-volume.target -p 192.16.1.3:3260 -I iface0 -l fdisl -l blacklist { devnode "^sda" } defaults { user_friendly_names yes } $multipath -lliscsidisk1 (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 ===== 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 multipaths { multipath { wwid "33000000100000001" alias iscsidisk1 } } systemctl restart multipath-tools $lsblk sdb 8:16 0 5G 0 disk └─iscsidisk1 (dm-0) 252:0 0 5G 0 mpath
补充parted磁盘分区与格式化挂载: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 parted /dev/sdb (parted) mklabel gpt (parted) mkpart primary 1 (parted) print mkfs.xfs -f /dev/sdc1 mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 -d agcount=64 /dev/mapper/mpathbp1 mount /dev/sdc1 /home/ /dev/sdb1(磁盘) /home(挂载点) xfs(文件格式) defaults 0 0 df -h查看挂载点文件名 /dev/sdb1 16T 33M 16T 1% /home
multipath 命令 - 设备映射器目标自动配置 描述: 该命令主要作用是设备进行映射器目标自动配置,即用于检测和合并到设备的多条路径,以用于故障转移或性能原因。
语法参数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 man multipath 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] device node device ID WWID -f -F -l -ll -a -w -W -c -C -u -U -h -t -T -v level 0 1 2 3 -d -i -B -b file -q -p policy -r -R retries
基础示例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 multipath -F multipath -v2 multipath -r multipath -v3 2>/dev/null 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 参数说明1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 $multipath -Tdefaults { verbosity 2 polling_interval 5 max_polling_interval 20 reassign_maps "no" multipath_dir "//lib/multipath" path_selector "service-time 0" 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 rr_min_io_rq 1 max_fds "max" rr_weight "uniform" no_path_retry "fail" 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" 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" alias "k8sapp" } multipath { wwid "36000d3100366e6000000000000000020" alias "k8slog" } }
bindings - 多路径缺省绑定的别名 描述:/etc/multipath/bindings文件是在multipath.conf中定义了user_friendly_names属性时候,默认采用以下友好的别名名称;1 2 3 4 5 $cat /etc/multipath/bindingsmpatha 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.top-MultiPath I/O
Step 3.需要对MPIO多路径进行配置才能让其接管存储系统。Windows 2008及后续版本的操作系统提供mpclaim多路径命令可以用于查询磁盘信息;
1 2 3 4 5 6 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.top-
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进行管理在使用前
1 2 3 4 5 6 7 8 dism /online /get-features dism /online /enable -feature:MultipathIo dism /online /disable -feature:MultipathIo
基础示例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mpclaim -r mpclaim -e mpclaim.exe -r -i -a "" mpclaim.exe -r -u -a "" mpclaim.exe -r -i -d <_VendorID> <_ProductID> mpclaim.exe -r -u -d <_VendorID> <_ProductID> mpclaim -r -i -d "MSFT2005iSCSIBusType_0x9" 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
0
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 running1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $multipath -ll$mount /dev/mapper/k8slog /mnt/nfs/k8slog/ $multipath -ll
问题2.虚拟机安装ubuntu20.04后,查看系统日志,大量的以下错误信息。排查后发现是multipath 的配置问题,需要排除本地的sda磁盘1 2 3 4 5 6 7 8 9 10 11 12 13 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 sudo vi /etc/multipath.conf blacklist { devnode "^sda" } sudo service multipath-tools restart
0x03 参考连接