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_drivers 或 lsmap -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 策略 。

参考来源

相关推荐
readhere1 天前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI1 天前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
关于Linux 线程局部存储的认识
linux·运维
小小de风呀1 天前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
晚风吹北巷1 天前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
by209991 天前
Linux 压缩传输、进程查看与权限管理
linux·经验分享·1024程序员节
无足鸟ICT1 天前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节
DYWorker0011 天前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
Android系统攻城狮1 天前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册