Linux运维篇-multipath多路径

什么是多路径

多路径的意思也就是有多条链路访问i/o块存储设备,每条路径在操作系统中都会被识别为一个独立的块设备,从而造成操作系统和管理员的使用混乱,但是他们往往指向的是同一个块设备,因此需要使用多路径软件来将他们合并为一个设备,避免使用过程中的操作混乱。使用设备映射器多路径(DM Multipath),可以将服务器节点和存储阵列间的多个 I/O 路径配置为单一设备。这些 I/O 路径是可包含独立电缆、交换机和控制器的物理 SAN 连接。

multipath包含的组件

组件描述
dm_multipath内核模块 为路径和路径组群重新路由 I/O 并支持故障切换。
mpathconf工具配置并启用设备映射器多路径。
multipath 命令列出并配置多路径设备。每当添加块设备时,它也由 udev 执行,以确定该设备是否是多路径设备的一部分。
multipathd 守护进程自动创建和删除多路径设备并监控路径;作为路径失败,可以更新多路径设备。允许对多路径设备进行交互式的修改。如果 /etc/multipath.conf 文件有任何更改,请重新加载该服务。
kpartx 命令为设备中的分区创建设备映射器设备。当创建了多路径设备以便在其之上创建分区设备时,该命令将由 udev 自动执行。kpartx 命令在其自己的软件包中提供,但 device-mapper-multipath 软件包依赖于它。
mpathpersist在多路径设备中设置 SCSI-3 持久预留。这个命令的工作方式与 sg_persist 对于 SCSI 设备的工作方式相似,它们不是多路径的,但它会处理在多路径设备的所有路径中设置持久性保留的方法。它与 multipathd 协调,以确保在稍后添加的路径上正确设置保留。要使用此功能,必须在 /etc/multipath.conf 文件中定义 reservation_key 属性。否则 multipathd 守护进程将不会检查新发现的路径或恢复的路径。

multipath 命令

multipath 命令用于检测和组合到设备的多个路径。它提供不同的选项来管理您的多路径设备。

下表描述了可能会用到的 multipath 命令的一些选项。

选项描述
-l显示 sysfs 和设备映射器收集的当前多路径拓扑。
-ll显示来自 sysfs、设备映射器以及系统上所有其他可用组件收集的当前多路径拓扑。
-f device删除命名的多路径设备。
-F删除所有未使用的多路径设备。
-w device从 wwids 文件中删除指定设备的 wwid。
-W重置 wwids 文件,使其只包含当前的多路径设备。
-r强制重新载入多路径设备。

multipath.conf文件的配置

multipath.conf主要包括blacklist、multipaths、devices三部分的配置

blacklist配置,是多路径设备的黑名单,我们需要将系统盘排除在外

blacklist {

devnode "^sda"

}

Multipaths部分配置multipaths和devices两部分的配置。

multipaths {
multipath {

wwid **** #此值multipath -v3可以看到
alias iscsi-dm0 #映射后的别名,可以随便取
path_grouping_policy multibus #路径组策略
path_selector "round-robin 0" #选择哪条路径进行下一个IO操作的方法

}
}

Devices部分配置

devices {
device {

vendor "iSCSI-Enterprise" #厂商名称
product "Virtual disk" #产品型号
path_grouping_policy multibus #默认的路径组策略
getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序
path_checker readsector0 #决定路径状态的方法
path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法
failback        immediate #故障恢复的模式
no_path_retry      queue #在disable queue之前系统尝试使用失效路径的次数的数值
rr_min_io       100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目

}
}

实验介绍

这里已经提前使用iSCSI提前挂载好了需要配置多路径的磁盘,如果没有配好环境,从我主页参考iSCSI存储的配置文章。

sda和sdb就是iSCSI存储使用两个IP模拟出的的两条路径。

[root@client ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  1 disk
sdb             8:16   0   40G  1 disk
sr0            11:0    1  3.9G  0 rom  /mnt
vda           253:0    0   40G  0 disk
├─vda1        253:1    0  600M  0 part /boot/efi
├─vda2        253:2    0    1G  0 part /boot
└─vda3        253:3    0 38.4G  0 part
  ├─klas-root 252:0    0 34.4G  0 lvm  /
  └─klas-swap 252:1    0    4G  0 lvm  [SWAP]

查看客户端操作系统中是否安装了multhpath软件,如果没有安装的话使用yum安装一下。

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

[root@client ~]# rpm -qa | grep multipath
multipath-tools-help-0.8.4-6.ky10.aarch64
multipath-tools-0.8.4-6.ky10.aarch64
[root@client ~]#
[root@client ~]# yum install device-mapper-multipath
Last metadata expiration check: 0:43:26 ago on Sun 17 Nov 2024 09:21:43 PM CST.
Package multipath-tools-0.8.4-6.ky10.aarch64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

查看multipathd服务的状态,启动multhpath服务

[root@client ~]# systemctl status multipathd
● multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@client ~]#
[root@client ~]# lsmod | grep dm_multipath
dm_multipath          262144  2 dm_service_time
[root@client ~]# systemctl start multipathd
[root@client ~]# systemctl status multipathd
● multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2024-11-17 22:44:35 CST; 8s ago
  Process: 95603 ExecStartPre=/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath (code=exited, status=0/SUCCESS)
 Main PID: 95608 (multipathd)
   Status: "up"
    Tasks: 7
   Memory: 16.6M
   CGroup: /system.slice/multipathd.service
           └─95608 /sbin/multipathd -d -s

Nov 17 22:44:35 client systemd[1]: Starting Device-Mapper Multipath Device Controller...
Nov 17 22:44:35 client multipathd[95608]: --------start up--------
Nov 17 22:44:35 client multipathd[95608]: read /etc/multipath.conf
Nov 17 22:44:35 client multipathd[95608]: path checkers start up
Nov 17 22:44:35 client multipathd[95608]: 36001405d89fa6a7269340e4a6e9a9a55: load table [0 83886080 multipath 0 1 alua 2 1 service-time 0 1 1 8:0 1 service-time 0 1 1 8:16 1]
Nov 17 22:44:35 client systemd[1]: Started Device-Mapper Multipath Device Controller.
Nov 17 22:44:36 client multipathd[95608]: dm-2: add map (uevent)
[root@client ~]#

使用multipath -ll命令查看多路径设备
sda,sdb设备已经被识别到

[root@client ~]# multipath -ll
36001405d89fa6a7269340e4a6e9a9a55 dm-2 LIO-ORG,test
size=40G features='0' hwhandler='1 alua' wp=ro
|-+- policy='service-time 0' prio=50 status=active
| `- 1:0:0:0 sda 8:0  active ready running
`-+- policy='service-time 0' prio=50 status=enabled
  `- 2:0:0:0 sdb 8:16 active ready running

使用mpathconf --enable命令生成配置文件

[root@client ~]# mpathconf --enable
[root@client ~]# cat /etc/multipath.conf
# device-mapper-multipath configuration file

# For a complete list of the default configuration values, run either:
# # multipath -t
# or
# # multipathd show config

# For a list of configuration options with descriptions, see the
# multipath.conf man page.

defaults {
        user_friendly_names yes
        find_multipaths yes
}

blacklist_exceptions {
        property "(SCSI_IDENT_|ID_WWN)"
}

blacklist {
}

修改multipath.conf配置文件


[root@client ~]# cat /etc/multipath.conf
# device-mapper-multipath configuration file

# For a complete list of the default configuration values, run either:
# # multipath -t
# or
# # multipathd show config

# For a list of configuration options with descriptions, see the
# multipath.conf man page.

defaults {
        user_friendly_names yes
}

blacklist {
        devnode "vd[a]"
}

multipaths{
multipath{
wwid 36001405d89fa6a7269340e4a6e9a9a55 #此值multipath -v3可以看到
alias iscsi-dm0 #映射后的别名,可以随便取
path_grouping_policy multibus #路径组策略
path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法
}
}

devices {
device {

vendor "iSCSI-Enterprise" #厂商名称
product "Virtual disk" #产品型号
path_grouping_policy multibus #默认的路径组策略
getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #获得唯一设备号使用的默认程序
path_checker readsector0 #决定路径状态的方法
path_selector "round-robin 0" #选择那条路径进行下一个IO操作的方法
failback        immediate #故障恢复的模式
no_path_retry      queue #在disable queue之前系统尝试使用失效路径的次数的数值
rr_min_io       100 #在当前的用户组中,在切换到另外一条路径之前的IO请求的数目

}
}

重启multhpathd服务,使用multipath -ll查看多路径的状态

[root@client ~]# systemctl restart multipathd
[root@client ~]# multipath -ll
iscsi-dm0 (36001405d89fa6a7269340e4a6e9a9a55) dm-2 LIO-ORG,test
size=40G features='0' hwhandler='1 alua' wp=ro
`-+- policy='round-robin 0' prio=50 status=active
  |- 1:0:0:0 sda 8:0  active ready running
  `- 2:0:0:0 sdb 8:16 active ready running
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值