多路径不提升单raid吞吐上限,但通过alua支持、合理path_selector策略、队列深度匹配及缓存协同,可稳定发挥硬件raid真实性能。

多路径(Multipath)本身不直接提升单个RAID阵列的吞吐上限,但它能显著增强I/O路径的稳定性、负载分担能力与故障恢复弹性——这些是发挥硬件RAID真实性能的前提。优化的关键,在于让多路径与硬件RAID协同工作,避免路径争抢、队列堆积或控制器瓶颈。
确保底层RAID控制器支持多路径识别
不是所有硬件RAID卡都原生兼容多路径I/O。Broadcom MegaRAID、LSI/Avago RAID卡(如9460/9560系列)及部分Adaptec卡已通过SCSI-3 Persistent Reservations和ALUA(Asymmetric Logical Unit Assignment)协议认证,可被Linux内核的device-mapper-multipath正确识别为单一设备并启用多路径策略。
- 确认RAID卡固件版本≥最新稳定版(例如MegaRAID 9560需≥52.7.0-0021),旧固件可能缺失ALUA状态报告能力
- 在RAID BIOS中启用“ALUA Mode”或“Target Port Group Support”,否则multipath会将同一LUN的多个路径视为独立设备,导致写冲突或数据损坏
- 使用lsblk -S或sg_inq -i /dev/sdX验证设备是否报告TPGS=1(表示支持ALUA)
合理配置multipath.conf策略参数
默认的轮询(round-robin)策略在高并发随机小IO场景下易引发RAID卡内部队列深度溢出,反而降低IOPS。应根据RAID级别与业务特征调整:
- RAID 10(数据库/高并发写):设path_selector "queue-length 0",让multipath优先选择当前队列最短的路径,减少控制器前端等待
- RAID 5/6(大文件顺序读):保留path_selector "round-robin 0",配合增大rr_min_io_rq 128(每路径至少发128个请求再切路径),避免条带化IO被拆散到不同路径上破坏顺序性
- 禁用failback immediate,改用failback 30,防止路径抖动引发RAID卡频繁重路由
对齐RAID条带与多路径IO调度深度
硬件RAID卡有内部命令队列(如MegaRAID 9560支持最大2048深度),但若multipath或块设备层的queue_depth设置过低,会人为限制并发能力:
- 检查每条路径的SCSI队列深度:cat /sys/block/mapper/mpatha/device/queue_depth,建议设为256(需配合RAID卡固件支持)
- 在/etc/multipath.conf中为该阵列添加hardware_handler "1 alua"和features "1 queue_if_no_path",确保路径故障时不阻塞上层IO
- 禁用不必要的IO调度器:RAID卡自身已做IO合并与排序,宿主机应设elevator=none(即mq-deadline或none),避免双重调度引入延迟
规避缓存策略冲突
硬件RAID卡的Write Back缓存与multipath的IO flush行为存在隐含耦合:
- 若RAID卡启用Write Back + CacheVault,multipath必须配置no_path_retry fail而非queue,否则路径中断时未刷盘数据可能因超时被丢弃
- 在CentOS/RHEL系统中,确认/sys/block/mapper/mpatha/queue/discard_granularity非零,允许TRIM指令穿透至后端物理盘(尤其SSD RAID),维持长期写入性能
- 避免在multipath设备上启用dm-thin或LVM cache,这类软件层缓存与硬件RAID缓存叠加易造成元数据不一致










