多路径磁盘简介
普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。如果某一处发生故障,可能导致整个网络瘫痪,我们称这个存储网络中存在单点故障。随着现代信息技术的发展,在IT基础设施运行过程中,对存储网络的安全性和稳定性要求越来越高。在存储网络中,为了避免单点故障,高可靠的存储网络除了对设备和器件做了冗余设计,同时通过多条冗余路径的互联来规避链路的单点故障。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储之间的IO有多条路径可以选择,每个主机到所对应的存储可以经过几条不同的路径。利用冗余设计满足存储网络的高可靠性和高性能,就需要通过多路径技术来实现。这种冗余设计既能提高整个存储网络运行的可靠性,又能利用冗余设计达到更高的性能要求。
多路径磁盘(Multipath Disk)的主要作用是提供冗余和负载均衡,以提高存储系统的可靠性和性能。具体来说:
冗余/高可用性:当服务器和存储设备之间存在多条物理路径(例如,通过多个HBA卡、交换机或控制器连接)时,多路径技术可以确保在一条路径发生故障时,自动切换到另一条可用路径,从而避免单点故障,保证业务连续性。
负载均衡:多路径软件可以将I/O流量分散到多条路径上,从而提高整体的带宽和性能。有些多路径实现还支持动态负载均衡,根据路径的当前负载情况调整流量分配。
路径管理:多路径软件可以检测路径的状态,并自动处理路径故障和恢复。当一条路径恢复后,它可以被重新加入使用。
设备统一命名:通过多路径软件,操作系统可以看到一个统一的设备名(如/dev/mapper/mpathb),而不是多个独立的设备节点(如/dev/sdj、/dev/sdk等)。这简化了管理,因为无论使用哪条路径,都访问同一个存储设备。
提高性能:通过并发使用多条路径,可以增加存储访问的带宽,特别是对于高I/O需求的应用程序。
在Linux中,多路径功能通常由device-mapper-multipath包提供,它创建了一个虚拟设备(在/dev/mapper下)来代表多路径磁盘。这样,上层应用(如LVM、文件系统等)就可以像使用普通磁盘一样使用多路径设备,而不必关心底层路径的变化。
在配置LVM时,必须使用多路径设备(如/dev/mapper/mpathb)作为物理卷,而不是使用单个路径的设备节点(如/dev/sdj)。这是因为如果使用单个路径设备,当该路径故障时,LVM将无法访问该物理卷,即使还有其他路径可用。而使用多路径设备,即使一条路径故障,多路径软件会自动切换到其他路径,LVM不会受到影响。因此,多路径磁盘在需要高可用性和高性能的企业级存储环境中非常重要。
多路径磁盘(Multipath I/O)的作用详解
一、核心作用:提高存储可用性和性能
1. 高可用性(故障切换):以华为UltraPath为例
主要作用:防止单点故障 物理拓扑: 服务器 ├── HBA卡1 → 光纤交换机1 → 存储控制器A └── HBA卡2 → 光纤交换机2 → 存储控制器B ↓ 同一存储LUN
路径冗余:提供多条物理路径访问同一存储设备
自动故障切换:当某条路径故障时,自动切换到正常路径
在单路径组网中,主机HBA或iSCSI启动器在链路断开时会进行一段时间的尝试重连(即防闪断机制,一般30秒或60秒),如果重连成功则I/O能够继续执行;而在多路径组网中,由于存在备用路径,所以通常会设置缩短HBA或iSCSI的重连时间,以使多路径软件能够快速感知I/O失败并切换路径,从而减小上层应用I/O阻塞的时间。
零中断访问:应用无感知的路径切换,保证业务连续性
UltraPath在路径故障时可以自动将I/O转移到其他可用路径,流程如下图所示:
1)应用向UltraPath生成的虚拟磁盘下发I/O;
2)UltraPath将I/O转发给一个path 1(即SCSI设备);
3)路径故障导致该path 1上I/O失败;
4)UltraPath将I/O重新下发给另一个path 2;
5)path 2返回I/O成功;
6)UltraPath向上层应用返回I/O成功。
2. 负载均衡
I/O流量分发: 读取请求:path1 → path2 → path3 → path1... 写入请求:path2 → path3 → path1 → path2...
带宽聚合:多路径并发传输,提高吞吐量
性能优化:根据算法(RR、队列深度等)分配I/O请求
避免单路径瓶颈:防止单个HBA卡或端口成为性能瓶颈
3. 路径管理
路径检测:持续监控各路径健康状态
自动恢复:故障路径修复后自动重新启用
动态优化:根据路径性能动态调整流量分配
二、具体应用场景
场景1:SAN存储环境
# 典型SAN多路径配置 服务器:2个HBA卡 → 2台光纤交换机 → 存储双控制器 设备映射: /dev/sdc (HBA1 → 交换机1 → 控制器A) /dev/sdd (HBA1 → 交换机2 → 控制器B) /dev/sde (HBA2 → 交换机1 → 控制器A) /dev/sdf (HBA2 → 交换机2 → 控制器B) 多路径聚合后:/dev/mapper/mpath0 (包含以上4条路径)
场景2:iSCSI多路径
# iSCSI多路径配置 服务器:2个网卡 → 2台交换机 → 存储双IP端口 路径: eth1 → 192.168.1.10 → LUN1 eth1 → 192.168.2.10 → LUN1 eth2 → 192.168.1.10 → LUN1 eth2 → 192.168.2.10 → LUN1
三、技术优势对比
| 场景 | 无多路径 | 有多路径 | 优势体现 |
|---|---|---|---|
| HBA卡故障 | 存储访问中断 | 自动切换到另一HBA卡 | 业务不中断 |
| 光纤交换机故障 | 存储不可用 | 使用另一交换机路径 | 高可用性 |
| 存储控制器故障 | 存储离线 | 切换到备用控制器 | 持续可用 |
| 高并发I/O | 单路径带宽限制 | 多路径聚合带宽 | 性能提升 |
| 维护操作 | 需停机维护 | 可在线更换部件 | 运维便利 |
四、多路径软件实现
Linux常见多路径软件
DM-Multipath (device-mapper-multipath)
RHEL/CentOS默认
配置简单,功能完善
EMC PowerPath
商业软件
高级功能,厂商支持
VMware PSA/NMP
虚拟化环境专用
与vSphere深度集成
工作模式对比
| 模式 | 原理 | 适用场景 |
|---|---|---|
| 故障切换 | 主路径故障时切换到备用 | 高可用性优先 |
| 轮询(RR) | 均匀分发I/O到所有路径 | 性能优先 |
| 队列深度 | 按路径队列深度分配 | 动态负载均衡 |
| 最小队列 | 选择队列最少的路径 | 实时负载优化 |
五、实际配置示例
Multipath安装与使用
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"
}
}多路径拓扑分析
# 查看详细路径拓扑 multipath -ll 输出示例: mpathb (3600a0b80001234567890123456789012) dm-1 IBM,2145 size=100G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 2:0:0:1 sdc 8:32 active ready running | `- 3:0:0:1 sde 8:64 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 2:0:1:1 sdd 8:48 active ready running `- 3:0:1:1 sdf 8:80 active ready running
路径状态解读:
status=active:当前活动路径status=enabled:备用可用路径prio=50:优先级较高(主路径)prio=10:优先级较低(备路径)
六、企业级应用价值
业务连续性
RTO(恢复时间目标)降低:路径切换秒级完成
RPO(恢复点目标)保障:数据访问不中断
运维管理
# 在线维护示例 # 1. 更换HBA卡时 multipath -f /dev/mapper/mpath0 # 临时移除设备 # 更换硬件... multipath -v2 # 重新扫描识别 # 业务无感知完成维护
性能调优
# 多路径策略配置示例 /etc/multipath.conf: defaults: polling_interval 10 path_selector "round-robin 0" path_grouping_policy multibus rr_min_io 100 rr_weight priorities failback immediate
七、与LVM结合的实践意义
存储虚拟化双层冗余
物理层冗余:多路径(多条物理路径) 逻辑层冗余:LVM镜像(多个PV镜像) 应用层:业务系统
配置最佳实践
先配置多路径,后配置LVM
LVM只操作多路径设备(/dev/mapper/*)
定期监控路径状态
总结
多路径磁盘的核心价值在于:
可靠性:消除单点故障,提供存储高可用
性能:聚合带宽,提升I/O吞吐量
可维护性:支持在线维护,降低运维窗口
可管理性:统一设备视图,简化存储管理
在企业级存储环境中,多路径是确保关键业务连续性和性能的基础必备技术,与LVM、RAID等技术协同工作,构建稳定可靠的存储架构。
参考:



