一、何为multipath
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择。
DM Multipath 是一种将服务器节点和存储阵列间的多个 I/O 路径配置为一个单一设备的技术。这些 I/O 设备是可包含「独立电缆」、 「交换器」、「控制器」的实体 SAN 链接。多路径集合了 I/O 路径,并生成由这些路径组成的新设备。
使用 multipath,不仅可以获得 链路上的冗余功能,而且可以充分发挥存储设备的性能。以下为 multipath 多路径的功能
冗余:DM Multipath 提供两种配置模式 主动 和 被动,并可以在两种模式下切换用来实现故障转移。在两种模式下,只有一半的路径在每次进行 I/O时会被使用。若一条 I/O 路径的任一元素(电缆、交换器、控制器)出现故障后,multipath 将切换到另一条正常的路径上。
性能提升:multipath 提供的两种配置模式,可以将 I/O 以轮循(round-robin) 的方式分布到所有的路径中。在某些配置中,multipath 能够检测 I/O 路径的负载,并重新动态平衡负载。
二、为何multipath
由于多路径软件是需要和存储在一起配合使用的,不同的厂商基于不同的操作系统,都提供了不同的版本。并且有的厂商,软件和硬件也不是一起卖的,如果要使用多路径软件的话,可能还需要向厂商购买license才行。比如EMC公司基于linux下的多路径软件,就需要单独的购买license。
其中,EMC提供的就是PowerPath,HDS提供的就是HDLM,不同的存储厂商提供不同的多路径软件。当然,LINUX使用系统自带的multipath多路径软件包,可以支持大多数存储厂商的设备,即使是一些不是出名的厂商,通过对配置文件进行稍作修改,也是可以支持并运行的很好的。
使用multipath多路径有以下几种策略模式:
冗余
主备模式,高可用
改进的性能
主主模式,负载均衡
使用multipath多路径特点
防止单线故障
多条线路使用相同的 共享存储
依靠 wwid (全球识别符) 辨认,减少管理混乱
三、multipath 相关组件
dm-multipath kernel:为路径和路径组重新指定 I/O 并进行故障转移。
mpathconf:配置并启用 DM Multipath。
multipath:列出并配置多路径设备,通常使用 /etc/rc.sysinit 启动,还可以在添加块设备时通过 udev 启动。
multipathd:multipath 守护进程,若出现故障路径、multipathd 可能会启动路径组切换。对 /etc/multipathd.conf 配置文件的任何修改,都需要重新启动 multipathd 服务。
kpartx:为设备分区生成设备映射器。kpartx 命令包含在自己的软件包中,但是 DM Multipath 软件包需要依赖它 。
四、配置multipath
1、安装软件包
在 Linux RedHat 系列中,multipath 的软件包可通过yum安装,安装完通过 rpm -qa | grep device-mapper查看;如果缺少 device-mapper-multipath-lib 和 device-mapper-multipath,使用yum install -y device-mapper device-mapper-multipath 安装。
安装之后,加载 下device-mapper 相关的驱动
modprobe dm_multipath dm_round_robin
2、配置配置文件
配置 multipath 有两种方式,你可以使用 mpathconf 程序设置多路径,它可以创建多路径配置文件 /etc/multipathd.conf。
使用 mpathconf 配置时,有以下几种情况
如果 /etc/multipath.conf 文件已存在, mpathconf 程序会编辑它
如果 /etc/multipath.conf 文件不存在, mpathconf 程序会使用 /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf 作为初始文件
如果 /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf 文件不存在, mpathconf 程序则会创建一个新的 /etc/multipath.conf 文件
如果不需要编辑 /etc/multipath.comf ,可以使用 mapthconf --enable --with_multipathd y 设置基本故障切换。
vi /etc/multipath.conf
blacklist {
devnode "vda" #禁止使用/dev/vda 设备}
defaults {
user_friendly_names yes
udev_dir /dev #生成 udev 设备节点的目录,默认值为 /dev。path_grouping_policy failover #failover 为主备模式; multibus 为负载均衡模式
failback immediate #指定立即恢复到包含活跃路径的最高级别路径组群
no_path_retry fail #这个属性的数字值指定系统在禁用队列前应该试图使用失败的路径的次数.fail 值表明立即失败,无需排队。
}
#固定设备的别名
cat /etc/multipath/bindings
# Multipath bindings, Version : 1.0
# NOTE: this file is automatically maintained by the multipath program.
# You should not need to edit this file in normal circumstances.
#
# Format:
# alias wwid
#
mpatha 360002ac00000000000000124000245a2
mpathb 360002ac00000000000000124000245a2
#编辑multipath.conf,增加以下字段,绑定设备uuid
vim /etc/multipath.conf
multipaths {
multipath {
wwid 360002ac00000000000000124000245a2
alias hpdisk01
}
}
3、multipath相关命令
#清空已有的multipath记录
multipath -F
#打印诊断信息
multipath -v3
#启用多路径守护程序以在引导时启动
mpathconf --enable
#启动多路径服务
service multipathd start
#如果在启动 multipath 守护程序后更改多路径配置文件,请运行以下命令以使更改生效。
service multipathd reload
#查看多路径当前状态
multipath -ll
五、关于multipath常见问题
1、多路径策略是用故障切换模式还是负载均衡模式?
在 Linux 系统中,存储多路径策略可以实现主备模式和负载均衡模式。这两种模式有各自的特点和适用场景。
主备切换模式:
特点: 在主备模式下,系统中只有一条路径被用于数据传输,而其他路径则处于备用状态。当主路径失效时,系统会自动切换到备用路径,确保数据的可靠性和连通性。
优点:简单易实现,不需要额外的负载均衡算法。
可靠性高,一旦主路径失效,备用路径能够立即接管数据传输,保证系统的稳定性。缺点:总体性能较差,因为大部分时间只有一条路径在工作,无法充分利用所有可用路径的带宽。
在故障切换时可能会出现短暂的数据传输中断,对于某些对连续性要求极高的应用可能会造成影响。
负载均衡模式:
特点: 在负载均衡模式下,系统会同时利用多条路径进行数据传输,根据不同的负载情况将数据分散到各个路径上,从而实现负载均衡。
优点:充分利用所有可用路径的带宽,提高整体系统的数据传输性能。
在负载较大时,能够有效分担单条路径的压力,保证系统的稳定性和高可用性。
缺点:实现相对复杂,需要使用负载均衡算法来动态调整数据传输路径,增加了系统的维护成本。部分负载均衡算法可能存在性能不佳或者需要较长的调整时间的情况,影响系统的实时性和响应速度。
综上所述,主备模式适用于对系统可靠性要求较高的场景,而负载均衡模式适用于对系统整体性能要求较高的场景。在实际应用中,需要根据系统的需求和实际情况选择合适的多路径策略。
2、为何要用alias自定义磁盘名称
默认情况下,multipath会根据multipath.conf.defaults中的定义,生成mpathn的设备名。当然,我们也可以自行定义。不过,更主要的原因是:当我们有多台服务器以相同的方式连接到存储时,每台服务器识别出来的mpathn顺序可能不同。为了组成集群,我们需要固定每台机器识别的设备名顺序是一致的(绑定wwid)。例如:
multipaths {
multipath {
wwid 360060e80058e980000008e9800000007
alias mpath0
}
}
重新刷新multipath映射表后,mpath0就与该wwid设备一一对应起来。除了别名alias外,还可以为该设备定义其他属性,请参考multipath.conf上的样式。把该配置赋值到其他同一集群的机器上,则每台机器识别的mpathn设备顺序将是一致的。
※ 注意:1、绑定后,需重新生成路径的映射表;2、当加入该wwid绑定后,没有绑定的设备将不能使用,用-ll 也无法看到这些设备,但/var/lib/multipath/bindings 中可见。3、重定义的alias名字不要与系统自动生成的名字一致,如mpatha、mpathb等等这些,容易造成盘符名冲突。