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/