Linux服务器iSCSI存储网络配置与多路径冗余实战

iSCSI(Internet SCSI)协议将SCSI存储指令封装在TCP/IP网络中传输,使标准以太网能够承载块级存储数据。相比FC SAN的光纤通道方案,iSCSI部署成本低、配置灵活,在IDC数据中心的集中式存储场景中应用广泛。本文以CentOS/RHEL环境为例,演示iSCSI Target和Initiator的完整配置流程,以及多路径冗余的部署方法。

iSCSI存储网络架构与核心概念

iSCSI采用Client-Server架构,提供存储资源的服务端称为Target,使用存储资源的客户端称为Initiator。每个Target由一个或多个LUN(Logical Unit Number)组成,Initiator通过IQN(iSCSI Qualified Name)标识自身并建立会话。

iSCSI的数据传输路径为:Initiator应用层产生I/O请求,经SCSI层封装为iSCSI PDU(Protocol Data Unit),再通过TCP/IP网络发送到Target,Target的iSCSI层解封装后将请求转发到后端存储设备。整个过程中,网络质量直接影响存储性能,生产环境建议使用万兆以太网并配置独立存储网络。

Target端存储配置与LUN导出

Target端使用targetcli工具进行配置。安装并启动服务:

# 安装target组件
yum install -y targetcli
systemctl enable --now target

# 创建后端存储对象(fileio模式,使用磁盘文件)
targetcli /backstores/fileio create name=lun0_disk file_or_dev=/data/lun0.img size=100G write_back=false

# 或使用块设备作为后端存储
targetcli /backstores/block create name=lun0_dev dev=/dev/sdb

# 创建iSCSI Target
targetcli /iscsi create iqn.2026-08.com.yunthe:storage.target01

# 创建LUN并关联后端存储
targetcli /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/luns create /backstores/fileio/lun0_disk

# 配置ACL,允许指定Initiator访问
targetcli /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/acls create iqn.2026-08.com.yunthe:client01

# 创建Portal指定监听地址和端口(默认3260)
targetcli /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/portals create 192.168.10.100 3260

# 保存配置
targetcli saveconfig
systemctl restart target

配置完成后,Target在192.168.10.100:3260监听,仅允许IQN为iqn.2026-08.com.yunthe:client01的Initiator访问LUN0。write_back设为false采用写穿透模式,数据安全性更高但性能略低;对性能要求高的场景可设为true,但需配合UPS防止断电丢数据。

Initiator端发现与挂载配置

Initiator端安装iscsi-initiator-utils并配置:

# 安装Initiator组件
yum install -y iscsi-initiator-utils

# 设置Initiator IQN(需与Target端ACL一致)
echo "InitiatorName=iqn.2026-08.com.yunthe:client01" > /etc/iscsi/initiatorname.iscsi

# 启动服务
systemctl enable --now iscsid

# 发现Target
iscsiadm -m discovery -t st -p 192.168.10.100:3260
# 输出示例: 192.168.10.100:3260,1 iqn.2026-08.com.yunthe:storage.target01

# 登录Target
iscsiadm -m node -T iqn.2026-08.com.yunthe:storage.target01 -p 192.168.10.100:3260 -l

# 设置开机自动登录
iscsiadm -m node -T iqn.2026-08.com.yunthe:storage.target01 -p 192.168.10.100:3260 --op update -n node.startup -v automatic

# 验证会话状态
iscsiadm -m session -P 3
# 查看映射的块设备
lsblk
# 新设备通常显示为 /dev/sdX,如 /dev/sdc

登录成功后,iSCSI LUN在Initiator端表现为一个普通块设备,可以像本地磁盘一样进行分区、格式化和挂载操作。生产环境建议使用UUID而非设备名进行挂载,避免设备名漂移。

多路径冗余配置与故障切换

单链路iSCSI存在单点故障风险。通过多路径(Multipath)配置,Initiator通过多条网络路径连接同一Target,当主路径故障时自动切换到备用路径,保证存储访问的连续性。

多路径配置需要Initiator端有多个网卡连接到存储网络的不同交换机。配置步骤:

# 安装多路径软件
yum install -y device-mapper-multipath
systemctl enable --now multipathd

# 生成默认配置
mpathconf --enable --with_multipathd y

# 编辑多路径配置
cat > /etc/multipath.conf << 'EOF'
defaults {
    user_friendly_names yes
    find_multipaths yes
    path_grouping_policy multibus
    failback immediate
    no_path_retry 3
    polling_interval 5
    path_checker tur
}

# 针对iSCSI设备的策略
devices {
    device {
        vendor "LIO-ORG"
        product "FILEIO"
        path_grouping_policy group_by_prio
        path_checker tur
        failback immediate
        no_path_retry 5
        rr_min_io 100
    }
}
EOF

# 重启多路径服务
systemctl restart multipathd

# 查看多路径状态
multipath -ll
# 输出示例:
# mpatha (36001405...) dm-0 LIO-ORG,FILEIO
# size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
# |-+- policy='service-time 0' prio=1 status=active
# | `- 33:0:0:0 sdc 8:32 active ready running
# `-+- policy='service-time 0' prio=1 status=enabled
#   `- 34:0:0:0 sdd 8:48 active ready running

# 多路径设备位于 /dev/mapper/mpathX
# 格式化并挂载多路径设备
mkfs.xfs /dev/mapper/mpatha
mkdir -p /mnt/iscsi_storage
mount /dev/mapper/mpatha /mnt/iscsi_storage

multipath -ll输出中,status=active表示当前正在使用的路径,status=enabled表示备用路径。当active路径故障,multipathd会在polling_interval(默认5秒)内检测到并切换到备用路径。

iSCSI性能调优与参数优化

iSCSI性能受网络参数和iSCSI协议参数的双重影响。关键调优项包括:

# /etc/iscsi/iscsid.conf 核心参数
node.conn[0].tcp.window_size = 524288          # TCP窗口大小
node.conn[0].tcp.transport = tcp               # 传输协议
node.conn[0].timeo.noop_out_interval = 5        # 心跳间隔(秒)
node.conn[0].timeo.noop_out_timeout = 5        # 心跳超时(秒)
node.session.cmds_max = 128                    # 最大命令队列
node.session.queue_depth = 32                  # 队列深度
node.conn[0].iscsi.MaxRecvDataSegmentLength = 1048576  # 最大接收数据段
node.conn[0].iscsi.MaxXmitDataSegmentLength = 1048576  # 最大发送数据段

Jumbo Frame(巨型帧)对iSCSI性能影响显著。将MTU从默认1500提升到9000,可以减少网络包数量和协议开销,吞吐量提升30%以上。Target和Initiator两端以及中间交换机都需要配置MTU 9000。

# 配置Jumbo Frame(两端都需执行)
ip link set eth1 mtu 9000
# 持久化配置(CentOS 7+)
nmcli con modify eth1 802-3-ethernet.mtu 9000
nmcli con up eth1

# 验证MTU
ip link show eth1 | grep mtu

iSCSI存储网络通过多路径冗余和性能调优,可以接近本地磁盘的I/O性能,同时获得集中管理的灵活性。关键在于网络架构设计——独立存储网络、冗余交换机、合适的MTU和队列深度参数缺一不可。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-iscsi-cun-chu-wang-luo-pei-zhi-yu-duo-lu/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐

Linux服务器iscsi存储网络配置与多路径链路冗余实战

iSCSI(Internet Small Computer System Interface)是基于TCP/IP协议的存储区域网络(SAN)技术,通过标准以太网将存储设备映射为本地块设备。相比FC SAN的高昂硬件成本,iSCSI使用现有网络基础设施即可搭建,在中小企业和云环境中应用广泛。生产环境中单链路iSCSI存在网络中断导致存储不可用的风险,多路径(Multipath)配置提供链路冗余和负载均衡能力,是保障存储高可用的必要措施。

iSCSI Target服务端配置

iSCSI架构分为Target(服务端,提供存储)和Initiator(客户端,访问存储)。Target端将LVM逻辑卷或整块磁盘导出为LUN(Logical Unit),Initiator通过IQN(iSCSI Qualified Name)发现并挂载LUN。

在存储服务器上安装配置targetcli:

# 安装targetcli
yum install -y targetcli
systemctl enable --now targetd

# 进入交互式配置
targetcli

/> /backstores/block create name=disk1 dev=/dev/sdb
/> /iscsi create wwn=iqn.2026-08.com.yunthe:storage.target01
/> /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/luns create /backstores/block/disk1
/> /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/acls create iqn.2026-08.com.yunthe:client01
/> /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/portals create 192.168.10.100
/> /iscsi/iqn.2026-08.com.yunthe:storage.target01/tpg1/portals create 192.168.20.100
/> saveconfig
/> exit

firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

Initiator端多路径发现与连接

yum install -y iscsi-initiator-utils device-mapper-multipath

cat > /etc/iscsi/initiatorname.iscsi << EOF
InitiatorName=iqn.2026-08.com.yunthe:client01
EOF

systemctl enable --now iscsid

iscsiadm -m discovery -t st -p 192.168.10.100:3260
iscsiadm -m discovery -t st -p 192.168.20.100:3260
iscsiadm -m node --login
iscsiadm -m session -P 3

此时系统会识别到两块相同的磁盘设备(如/dev/sdb和/dev/sdc),实际指向同一个LUN。需要通过多路径软件将其聚合为单一设备。

Device Mapper Multipath配置

multipath守护进程将多条路径的物理设备映射为单一逻辑设备/dev/mapper/mpathX,并按策略进行故障切换或负载均衡。

mpathconf --enable --with_multipathd y

cat > /etc/multipath.conf << EOF
defaults {
    user_friendly_names yes
    find_multipaths yes
    path_grouping_policy multibus
    path_checker tur
    path_selector "round-robin 0"
    failback immediate
    no_path_retry 18
    polling_interval 2
}
devices {
    device {
        vendor "LIO-ORG"
        product ".*"
        path_grouping_policy multibus
        path_checker tur
        path_selector "round-robin 0"
    }
}
EOF

systemctl restart multipathd
multipath -ll

多路径路径策略选择

multipath.conf中的path_selector和path_grouping_policy决定了I/O如何在多条路径间调度:

  • round-robin 0:所有路径轮流下发I/O,提供负载均衡,适合所有路径带宽相等的场景
  • queue-length 0:优先向I/O队列最短的路径下发,动态负载均衡
  • service-time 0:按预估完成时间选择路径,round-robin的改进版
  • failover:同一时间只使用一条路径,主路径故障时切换到备用路径

path_grouping_policy决定路径分组方式:

  • multibus:所有路径归入同一组,全部active,负载均衡
  • failover:每组一条路径,同一时刻只有一组active,其余standby
  • group_by_serial:按存储阵列序列号分组,适合双控制器存储

链路故障切换与恢复验证

# 禁用一个NIC模拟链路故障
ip link set eth1 down

# 持续I/O测试(不应中断)
dd if=/dev/mapper/mpatha of=/dev/null bs=1M count=10000 iflag=direct

# 查看路径状态
multipath -ll
# 被断开的路径显示为failed,另一条路径继续服务

# 恢复链路
ip link set eth1 up
multipath -ll
# 两条路径均恢复为active ready running

no_path_retry参数控制所有路径全部断开时的行为:设置为正整数N表示重试N次(每次polling_interval秒),设置为queue表示无限排队等待路径恢复,设置为fail表示立即返回I/O错误。生产环境建议设置为18(即36秒重试窗口)。

iSCSI性能调优参数

node.conn[0].timeo.login_timeout = 15
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.session.cmds_max = 1024
node.session.queue_depth = 256
node.conn[0].iscsi.HeaderDigest = CRC32C
node.conn[0].iscsi.DataDigest = CRC32C
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192

网络层面,iSCSI流量应划分独立VLAN,与业务流量物理隔离。MTU设置为9000(Jumbo Frame)可减少协议开销,提升吞吐约15%-20%。NIC的Ring Buffer和中断合并参数也需根据I/O模式调整。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-iscsi-cun-chu-wang-luo-pei-zhi-yu-duo-lu/

(0)
小编小编
上一篇 10小时前
下一篇 10小时前

相关推荐