多路径磁盘使用场景

多路径磁盘简介

普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。如果某一处发生故障,可能导致整个网络瘫痪,我们称这个存储网络中存在单点故障。随着现代信息技术的发展,在IT基础设施运行过程中,对存储网络的安全性和稳定性要求越来越高。在存储网络中,为了避免单点故障,高可靠的存储网络除了对设备和器件做了冗余设计,同时通过多条冗余路径的互联来规避链路的单点故障。而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来连接,这样的话,就构成了多对多的关系。也就是说,主机到存储之间的IO有多条路径可以选择,每个主机到所对应的存储可以经过几条不同的路径。利用冗余设计满足存储网络的高可靠性和高性能,就需要通过多路径技术来实现。这种冗余设计既能提高整个存储网络运行的可靠性,又能利用冗余设计达到更高的性能要求。

多路径磁盘(Multipath Disk)的主要作用是提供冗余和负载均衡,以提高存储系统的可靠性和性能。具体来说:

  1. 冗余/高可用性:当服务器和存储设备之间存在多条物理路径(例如,通过多个HBA卡、交换机或控制器连接)时,多路径技术可以确保在一条路径发生故障时,自动切换到另一条可用路径,从而避免单点故障,保证业务连续性。

  2. 负载均衡:多路径软件可以将I/O流量分散到多条路径上,从而提高整体的带宽和性能。有些多路径实现还支持动态负载均衡,根据路径的当前负载情况调整流量分配。

  3. 路径管理:多路径软件可以检测路径的状态,并自动处理路径故障和恢复。当一条路径恢复后,它可以被重新加入使用。

  4. 设备统一命名:通过多路径软件,操作系统可以看到一个统一的设备名(如/dev/mapper/mpathb),而不是多个独立的设备节点(如/dev/sdj、/dev/sdk等)。这简化了管理,因为无论使用哪条路径,都访问同一个存储设备。

  5. 提高性能:通过并发使用多条路径,可以增加存储访问的带宽,特别是对于高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常见多路径软件

  1. DM-Multipath (device-mapper-multipath)

    • RHEL/CentOS默认

    • 配置简单,功能完善

  2. EMC PowerPath

    • 商业软件

    • 高级功能,厂商支持

  3. VMware PSA/NMP

    • 虚拟化环境专用

    • 与vSphere深度集成

工作模式对比

模式原理适用场景
故障切换主路径故障时切换到备用高可用性优先
轮询(RR)均匀分发I/O到所有路径性能优先
队列深度按路径队列深度分配动态负载均衡
最小队列选择队列最少的路径实时负载优化

五、实际配置示例

Multipath安装与使用

linux中大多已经默认安装了multipath,只需设置开机启动即可.

systemctl enable multipathd.service

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镜像)
应用层:业务系统

配置最佳实践

  1. 先配置多路径,后配置LVM

  2. LVM只操作多路径设备(/dev/mapper/*)

  3. 定期监控路径状态

总结

多路径磁盘的核心价值在于:

  • 可靠性:消除单点故障,提供存储高可用

  • 性能:聚合带宽,提升I/O吞吐量

  • 可维护性:支持在线维护,降低运维窗口

  • 可管理性:统一设备视图,简化存储管理

在企业级存储环境中,多路径是确保关键业务连续性和性能的基础必备技术,与LVM、RAID等技术协同工作,构建稳定可靠的存储架构。


参考:


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6592.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注