FC SAN多路径负载均衡配置指南

在 FC SAN 环境中配置多路径软件(Multipathing)的核心目标是聚合多条物理链路(如双 HBA 卡连接双交换机),将其映射为单一逻辑设备,从而实现 I/O 负载均衡和链路故障自动切换。Linux 系统通常使用开源的 device-mapper-multipath,而 VMware 和 AIX 则使用各自内置的多路径模块 。

一、Linux 环境配置实战 (CentOS/RHEL)

Linux 下最通用的方案是使用 multipath-tools。配置流程涵盖安装、识别设备、生成配置及策略优化。

  1. 安装与启动服务

首先确保系统已安装多路径软件包,并启动守护进程以扫描 FC 链路 。

bash 复制代码
# 安装多路径工具 (基于 yum/dnf)
yum install -y device-mapper-multipath

# 加载多路径内核模块
modprobe dm-multipath

# 启动服务并设置开机自启
systemctl start multipathd
systemctl enable multipathd
  1. 发现与识别 FC 设备

FC SAN 连通后,操作系统会将同一条存储 LUN 的不同物理路径识别为多个块设备(如 /dev/sdb, /dev/sdc)。需通过 WWID (World Wide Identifier) 确认它们属于同一逻辑卷 。

bash 复制代码
# 查看多路径拓扑,确认路径状态
multipath -ll

# 输出示例解析:
# mpathb (3600508b400105e230000f00000c30000) dm-2 IBM,2145
# size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw
# |-+- policy='round-robin 0' prio=1 status=active
# | `- 2:0:0:1 sdb 8:16 active ready running
# `-+- policy='round-robin 0' prio=1 status=enabled
#   `- 3:0:0:1 sdc 8:32 active ready running
# 说明:mpathb 是逻辑设备,sdb 和 sdc 是两条物理 FC 路径,均处于 active 状态 。
  1. 生成与优化配置文件

编辑 /etc/multipath.conf 定义负载均衡策略。默认配置通常位于 /usr/share/doc/device-mapper-multipath-*/multipath.conf.example

yaml 复制代码
# /etc/multipath.conf 核心配置片段
defaults {
    user_friendly_names yes       # 使用友好名称 (如 mpatha) 而非长 WWID
    find_multipaths yes           # 自动合并相同 WWID 的设备
    max_fds 0                     # 关闭未纳管设备的文件描述符,避免日志噪音
}

devices {
    device {
        vendor "IBM"              # 根据存储厂商调整,也可使用 "DELL", "HPE"等
        product "2145"
        path_checker tur          # 使用 Test Unit Ready 命令检查路径状态
        path_selector "round-robin 0" # 关键:轮询算法实现负载均衡
        hardware_handler "0"
        failback immediate        # 主路径恢复后立即切回
        rr_min_io 100             # 每100 个 IO 切换一次路径,细化负载粒度
    }
}

multipaths {
    multipath {
        wwid "3600508b400105e230000f00000c30000" # 指定特定 LUN 的策略
        alias "DB_DATA_LUN01"                    # 自定义业务别名
        path_selector "round-robin 0"            # 强制该 LUN 使用轮询负载均衡
    }
}

配置生效后重启服务:

bash 复制代码
systemctl restart multipathd
  1. 格式化与挂载

注意 :必须对逻辑设备(如 /dev/mapper/DB_DATA_LUN01)进行格式化,严禁对物理路径(如 /dev/sdb)操作,否则会导致文件系统损坏 。

bash 复制代码
# 创建文件系统 (以 XFS 为例)
mkfs.xfs /dev/mapper/DB_DATA_LUN01

# 挂载使用
mkdir -p /mnt/fc_storage
mount /dev/mapper/DB_DATA_LUN01 /mnt/fc_storage

# 写入 /etc/fstab实现持久化
echo "/dev/mapper/DB_DATA_LUN01 /mnt/fc_storage xfs defaults,_netdev 0 0" >> /etc/fstab

二、VMware vSphere 环境配置

在虚拟化场景中,ESXi 主机通过 NMP (Native Multipathing Plugin) 管理 FC 路径。负载均衡策略需在 vCenter 或 ESXi 主机层面针对数据存储进行设置 。

策略名称 代码标识 工作原理 适用场景
最近使用 (MRU) VMW_PSP_MRU 仅使用当前首选路径,故障时切换,恢复后不切回。 主动 - 被动阵列 (Active-Passive),避免不必要的路径切换开销 。
固定 (Fixed) VMW_PSP_FIXED 优先使用指定首选路径,故障切换,恢复后自动切回首选。 需要明确主路径规划的场景 。
循环 (Round Robin) VMW_PSP_RR 在所有活跃路径间轮流发送 I/O 请求。 主动 - 主动阵列 (Active-Active),实现真正的 FC 链路负载均衡,最大化吞吐量 。

PowerCLI 配置示例 (启用 Round Robin):

powershell 复制代码
# 获取指定数据存储的路径信息
$ds = Get-Datastore -Name "FC_Datastore_01"
$lun = $ds | Get-ScsiLun

# 设置多路径策略为 Round Robin (RR)
SetScsiLun -ScsiLun $lun -MultipathPolicy "RoundRobin"

# 可选:调整每次切换前的 IO 数量 (默认为 1000,调小可更均匀)
$lun | Get-ScsiLunPath | Set-ScsiLunPath -BytesPerSwitch 1024

三、AIX 环境配置 (IBM 专有)

AIX 系统内置 MPIO (Multi-Path Input/Output),配合 IBM 存储需安装 SDDPCM 驱动模块以支持高级功能 。

  1. 验证安装 :使用 lspv 查看磁盘,同一 LUN 的多条路径应显示相同的 PVID。
  2. 查看状态 :运行 manage_disk_driverslsmap -all 检查多路径状态及算法。
  3. 算法选择
    • failover:默认模式,主路径故障才切换。
  • load_balance :启用负载均衡,需在 chdev 命令中修改 algorithm 属性 。
bash 复制代码
# 示例:将 hdisk5 的多路径算法改为负载均衡
chdev -l hdisk5 -a algorithm=load_balance

###四、关键机制原理解析

多路径软件实现负载均衡并非简单的流量平分,而是依赖于底层策略与存储阵列特性的匹配:

  1. I/O 调度粒度 :在 Linux 的 round-robin 模式下,rr_min_io 参数决定了切换频率。若设置过大,可能导致某条 FC 链路拥塞而另一条空闲;若过小,可能增加 CPU 上下文切换开销。通常建议值为 100-1000 之间,需根据业务 IO 大小(Block Size)测试调优 。
  2. 路径检测机制 :多路径守护进程(如 multipathd)会定期向所有路径发送探测指令(如 SCSI TUR 命令)。一旦某条 FC 链路因光模块故障或交换机端口错误导致无响应,软件会在毫秒级内将该路径标记为 failed 并将 IO 重路由至健康路径,上层应用无感知 。
  3. 主动 - 主动 vs 主动 - 被动:配置前必须确认存储阵列类型。若在主动 - 被动阵列上强行配置 Round Robin,会导致控制器频繁交接所有权(LUN Ownership Transfer),反而严重降低性能。FC SAN 高端存储通常为主动 - 主动架构,适合 RR 策略 。

参考来源

相关推荐
binqian1 小时前
【Linux】内核怎么管理侦听socket
linux·网络协议
j7~1 小时前
【Linux网络】三十七.TCP 协议通讯流程
linux·网络编程·三次握手·四次挥手·tcp 协议通讯流程
顶点多余1 小时前
9.15 面试问题总结(一面挂)
linux·面试·职场和发展
顺风尿一寸2 小时前
从 ls -U 到 Tomcat libs加载jar包:ext4 目录哈希序如何影响 Java 文件排序顺序
linux·jvm
qeen872 小时前
【Linux】操作系统之进程介绍(一)
linux·笔记·学习·进程
邪修king2 小时前
Re:Linux系统篇(二十五):文件系统(一):磁盘硬件底层原理:从物理结构到 CHS/LBA 寻址,搞懂硬盘数据的定位逻辑
java·linux·运维·gpt
小则又沐风a2 小时前
TCP协议讲解-----了解TCP可靠性的基石
linux
刚入门的大一新生2 小时前
Linux-简单设计libc库
linux·c++
科小墨3 小时前
【Linux 开发者系列 · 第 1 节】NPM 完全指南:它是什么、为什么重要、在 Linux 上怎么用
linux