Linux服务管理-多路径multipath

多路径Multipath

概述

多路径(Multipath)技术,特别是在存储系统中,是一种提高可靠性和性能的重要手段。多路径技术允许服务器通过多条物理路径连接到存储设备。这些路径可以是包含独立电缆、交换机和控制器的物理SAN连接。

多路径技术主要实现以下功能:

  1. 故障切换与恢复:通过提供路径冗余,当某条路径出现故障时,系统可以自动切换到其他备用路径,确保数据访问的连续性。

  2. 负载均衡:可以将I/O操作以轮询(round-robin)或其他方式分布到所有路径中,从而优化存储设备的性能。

  3. 磁盘虚拟化:将多个物理磁盘设备虚拟化为一个或多个逻辑设备,简化存储管理。

技术原理与组件

  1. Device Mapper:Device Mapper是Linux内核中的一个组件,它提供了设备映射的框架。多路径(DM-Multipath)是Device Mapper的一个目标(target)驱动,用于实现多路径功能。

  2. multipathd守护进程:该守护进程负责监控路径状态,并根据配置文件中定义的策略进行故障切换和负载均衡。

  3. multipath.conf配置文件:该文件用于定义多路径设备的配置,包括黑名单、默认设置、多路径设备和设备设置等。

配置与管理

在Linux系统中,配置多路径通常涉及以下步骤:

  1. 安装多路径软件:在RHEL/CentOS系统中,可以使用yumdnf命令安装device-mapper-multipath软件包。在Ubuntu系统中,可以使用apt-get命令安装multipath-toolsmultipath-tools-boot软件包。

  2. 创建或修改配置文件:默认情况下,可能没有/etc/multipath.conf配置文件。可以使用mpathconf命令生成配置文件,或者从模板文件中复制。配置文件定义了哪些设备应该被多路径处理,以及如何处理它们。

  3. 启动multipathd服务:使用systemctl命令启动并设置multipathd服务为自动启动。

  4. 验证配置:使用multipath -ll命令查看多路径设备的状态和配置。

实验

在vm1和vm2上各添加一张网卡(仅主机、桥接、nat都可以)

此处添加了仅主机网卡:dhcp获取地址(实际环境静态配置)

Vm1:

Ens160:192.168.99.132

Ens224:192.168.139.136

Vm2:

Ens160:192.168.99.131

Ens224:192.168.139.137

创建iscsi共享

[root@vm1 ~]# setenforce 0
[root@vm1 ~]# firewall-cmd --set-default-zone=trusted
[root@vm1 Desktop]# du -sh /file1 
100M    /file1
[root@vm1 Desktop]#

重启服务

[root@vm1 ~]# systemctl restart target #默认监听所有网卡的3260端口

vm2使用两张网卡分别登录

[root@vm2 ~]# iscsiadm -m discovery -t st -p 192.168.99.132
192.168.99.132:3260,1 iqn.2024-04.com.test:server
[root@vm2 ~]# iscsiadm -m discovery -t st -p 192.168.139.136
192.168.139.136:3260,1 iqn.2024-04.com.test:server
[root@vm2 ~]#

注:此时一个共享,通过两个路径登录,会被识别为两个设备,但实际上是一个设备

配置设备映射器多路径

使用设备映射器多路径(DM Multipath),您可以将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。

多路径聚合了 I/O 路径并生成由聚合路径组成的新设备。

DM 多路径提供

  • 冗余

    DM 多路径可在主动/被动(active/passive)配置中提供故障切换。在主动/被动配置中,任何时候路径的子集都只用于 I/O 。如果 I/O 路径的任何元素(如电缆、交换机或控制器)出现故障,DM 多路径会切换到备用路径。

  • 改进的性能

    可将 DM 多路径配置为主动/主动模式,其中将 I/O 以轮循(round-robin)方式分布到所有路径中。在某些配置中,DM-Multipath 可以检测 I/O 路径上的加载,并动态重新平衡负载。

vm2先登出

# 安装相应软件包
[root@vm2 ~]# yum -y install device-mapper-multipath

您可以使用 mpathconf 工具设置 DM 多路径。这个工具会根据以下情况创建或编辑 /etc/multipath.conf 多路径配置文件:

  • 如果 /etc/multipath.conf 文件已存在,则 mpathconf 实用程序将编辑该文件。

  • 如果 /etc/multipath.conf 文件不存在,则 mpathconf 实用程序将从头开始创建 /etc/multipath.conf 文件。

# 生成配置文件:
[root@vm2 ~]# ls /etc/multipath/
[root@vm2 ~]# find / -name "multipath.conf"
/usr/lib/tmpfiles.d/multipath.conf
/usr/share/doc/device-mapper-multipath/multipath.conf
[root@vm2 ~]# cat /usr/share/doc/device-mapper-multipath/multipath.conf #配置示例
# 可以直接将上述文件复制到/etc/下
# 也可以使用命令生成:
[root@vm2 ~]# mpathconf --enable
[root@vm2 ~]# ls /etc/multipath.conf
/etc/multipath.conf
[root@vm2 ~]# iscsiadm -m node -T iqn.2024-04.com.test:server -l 登录
[root@vm2 ~]# lsblk /dev/sd*
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100M  0 disk 
└─sda1   8:1    0   50M  0 part 
sda1     8:1    0   50M  0 part 
sdb      8:16   0  100M  0 disk 
└─sdb1   8:17   0   50M  0 part 
sdb1     8:17   0   50M  0 part 
[root@vm2 ~]#
​
# 获取设备wwid:systemd-udev包提供/usr/lib/udev/scsi_id
[root@vm2 ~]# ls /usr/lib/udev/scsi_id 
/usr/lib/udev/scsi_id
[root@vm2 ~]# ln -s /usr/lib/udev/scsi_id /usr/bin/scsi_id
[root@vm2 ~]# scsi_id --whitelisted --device=/dev/sda
36001405f6d0773377df44baaaa4ffac1
[root@vm2 ~]# scsi_id --whitelisted --device=/dev/sdb
36001405f6d0773377df44baaaa4ffac1
[root@vm2 ~]# 
# sda和sdb的wwid一致,证明是同一个设备
​
# 修改配置文件如下:
[root@vm2 ~]# vim /etc/multipath.conf 
[root@vm2 ~]# cat /etc/multipath.conf
defaults {
    user_friendly_names yes
    find_multipaths yes
    enable_foreign "^$"
}
blacklist_exceptions {
        property "(SCSI_IDENT_|ID_WWN)"
}
blacklist {
}
multipaths {
    multipath {
            wwid      36001405f6d0773377df44baaaa4ffac1
            alias     blue
    }
}
[root@vm2 ~]#
​
# 可以使用multipathd show config或multipath -t查看默认配置的值:
[root@vm2 ~]# multipath -t 输出略
# 重启服务
[root@vm2 ~]# systemctl restart multipathd.service

验证

[root@vm2 ~]# lsblk /dev/sd*
NAME      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda         8:0    0  100M  0 disk  
└─blue    253:3    0  100M  0 mpath 
  └─blue1 253:4    0   50M  0 part  
sdb         8:16   0  100M  0 disk  
└─blue    253:3    0  100M  0 mpath 
  └─blue1 253:4    0   50M  0 part  
[root@vm2 ~]#
​
# 使用多路径设备挂载测试:
[root@vm2 ~]# ll /dev/mapper/blue
lrwxrwxrwx. 1 root root 7 Apr 29 09:28 /dev/mapper/blue -> ../dm-3
[root@vm2 ~]# ll /dev/mapper/blue1 
lrwxrwxrwx. 1 root root 7 Apr 29 09:28 /dev/mapper/blue1 -> ../dm-4
[root@vm2 ~]# mount /dev/mapper/blue1 /mnt
[root@vm2 ~]# ls /mnt/
vm2.txt
[root@vm2 ~]# multipath -ll
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 2:0:0:0 sda     8:0   active ready running
`-+- policy='service-time 0' prio=50 status=enabled
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#
​
# 测试关闭vm2的ens224网卡:
[root@vm2 ~]# nmcli connection down ens224
Connection 'ens224' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@vm2 ~]#
[root@vm2 ~]# multipath -ll
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 2:0:0:0 sda     8:0   active ready running
`-+- policy='service-time 0' prio=50 status=enabled
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#
[root@vm2 ~]# touch /mnt/test.txt 可以正常读写
[root@vm2 ~]# echo 123 > /mnt/test.txt
[root@vm2 ~]# cat /mnt/test.txt
123
[root@vm2 ~]# nmcli connection down ens160
[root@vm2 ~]# multipath -ll
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=active
| `- 2:0:0:0 sda     8:0   failed faulty running
`-+- policy='service-time 0' prio=0 status=enabled
  `- 3:0:0:0 sdb     8:16  active faulty running
[root@vm2 ~]#
[root@vm2 ~]# nmcli connection up ens224
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
[root@vm2 ~]# multipath -ll
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- 2:0:0:0 sda     8:0   failed faulty running
`-+- policy='service-time 0' prio=50 status=active
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#
[root@vm2 ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)
[root@vm2 ~]# multipath -ll
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=enabled
| `- 2:0:0:0 sda     8:0   active ready running
`-+- policy='service-time 0' prio=50 status=active
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#
# 此时默认是主备的状态

配置算法为轮询

[root@vm2 ~]# cat /etc/multipath.conf | grep -v ^# | grep -v ^$
defaults {
    user_friendly_names yes
    find_multipaths yes
    enable_foreign "^$"
}
blacklist_exceptions {
        property "(SCSI_IDENT_|ID_WWN)"
}
blacklist {
}
multipaths {
    multipath {
            wwid      36001405f6d0773377df44baaaa4ffac1
            alias     blue
            path_grouping_policy    multibus
            path_checker            readsector0
            path_selector           "round-robin 0"
            rr_weight               priorities
            no_path_retry           5
    }
}
[root@vm2 ~]# systemctl restart multipathd.service
[root@vm2 ~]# multipath -ll
Apr 29 14:12:20 | /etc/multipath.conf line 28, invalid keyword in the multipath section: path_checker
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
`-+- policy='round-robin 0' prio=50 status=enabled
  |- 2:0:0:0 sda     8:0   active ready running
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#
[root@vm2 ~]# cat /etc/multipath.conf | grep path_grouping_policy
            #path_grouping_policy    multibus 注释此行
[root@vm2 ~]#
[root@vm2 ~]# multipath -ll
Apr 29 14:13:45 | /etc/multipath.conf line 28, invalid keyword in the multipath section: path_checker
blue (36001405f6d0773377df44baaaa4ffac1) dm-3 LIO-ORG,file1
size=100M features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=enabled
| `- 2:0:0:0 sda     8:0   active ready running
`-+- policy='round-robin 0' prio=50 status=enabled
  `- 3:0:0:0 sdb     8:16  active ready running
[root@vm2 ~]#

具体配置含义参考:配置设备映射器多路径 | Red Hat Product Documentation

作业

准备两台虚拟机vm1、vm2,各两张网卡,vm1添加一块20G的硬盘

  1. vm1创建1个200M的文件,创建一个分区(用第二块硬盘) 配置iscsi target目标,共享文件和分区,acl自定义

  2. 在客户端,配置多路径,发现并登录共享,要求共享的文件识别为mpatha,以主备的形式存在,共享的分区识别为mpathb,path_grouping_policy使用multibus,path_selector使用round-robin 0 格式化并挂载mpatha到自己创建的目录中,测试目录可写 格式化并挂载mpathb到指定目录中,使mariadb的数据存储在vm1中。

  3. 配置mpatha和mpathb的持久挂载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值