当前位置: 首页 > news >正文

iSCSI 服务器总结:概念、架构、配置与多路径详解

iSCSI 服务器总结:概念、架构、配置与多路径详解

一、iSCSI 服务介绍

SCSI(Small Computer System Interface,小型计算机系统接口)是一种连接计算机与智能设备(硬盘、光驱、打印机等)的标准接口。

iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口),又称为IP‑SAN,由 IBM 研发。它将 SCSI 接口与以太网技术结合,基于 TCP/IP 协议连接 iSCSI 服务端(Target)和客户端(Initiator),使封装的 SCSI 数据包能在互联网上传输,从而实现网络存储。

通常使用千兆(1Gb)或万兆(10Gb)以太网以提升性能。为达到最佳性能,SAN 流量一般不加密,但可通过 IPsec 保证 WAN 安全。

二、iSCSI 架构

iSCSI 采用C/S 架构

组件说明
Initiator(客户端)软件方式(常用)或硬件 HBA 卡。每个 Initiator 必须有唯一的IQN
Target(服务端)提供存储资源,每个 Target 有唯一 IQN。Target 可包含一个或多个LUN
IQN全球唯一名称,格式:iqn.YYYY-MM.com.reversed.domain:name_string。例如:iqn.2026-04.cloud.laogao.iscsi-server:disk1
Portal服务器监听的地址和端口,默认0.0.0.0:3260
LUN逻辑单元号,代表 Target 提供的块设备。
ACL访问控制列表,用 Initiator 的 IQN 限制访问。
TPGTarget Portal Group,包含 Portal、LUN、ACL 的完整配置。

工作流程:Discovery(查询 Target 列表)→Login(验证并登录)→ 使用块设备。

三、配置 iSCSI Target(服务端)

3.1 节点规划

节点名称节点IP作用
iscsi-server10.1.8.10/24iSCSI Target,增加 2 块 20G SCSI 硬盘
iscsi-client10.1.8.11/24iSCSI Initiator

3.2 安装与基础配置

# 安装服务端软件包:targetd(后台服务)和 targetcli(配置工具)[root@iscsi-server ~]# yum install -y targetd targetcli# 启用并启动 target 服务(注意:服务名是 target,不是 targetd)[root@iscsi-server ~]# systemctl enable target --now# 配置防火墙,放行 iSCSI 服务(端口 3260)[root@iscsi-server ~]# firewall-cmd --permanent --add-service=iscsi-target[root@iscsi-server ~]# firewall-cmd --reload

3.3 使用 targetcli 配置 Target

targetcli提供交互式 shell 和命令行模式。交互模式以/>提示符开始,支持lscdcreatedelete等命令。

3.3.1 创建 backstore(后备存储)
# 进入交互模式[root@iscsi-server ~]# targetcli/>ls# 输出显示当前配置树,包含 backstores、iscsi、loopback 等目录# 进入 backstores/block 目录/>cd/backstores/block /backstores/block>create myblock1 /dev/sdb# 创建名为 myblock1 的块设备后备存储,绑定物理磁盘 /dev/sdb# 输出:Created block storage object myblock1 using /dev/sdb.

支持的 backstore 类型:

  • block:块设备(磁盘、分区、LVM)
  • fileio:文件作为磁盘映像
  • pscsi:物理 SCSI 设备
  • ramdisk:内存盘(重启后数据丢失)
3.3.2 创建 Target IQN
/backstores/block>cd/iscsi /iscsi>create iqn.2026-04.cloud.laogao.iscsi-server:disk1# 创建 IQN,自动生成 TPG 1,并默认在所有 IP 上监听 3260 端口# 输出:Created target iqn.2026-04.cloud.laogao.iscsi-server:disk1.# Created TPG 1.# Created default portal listening on all IPs (0.0.0.0), port 3260.
3.3.3 绑定 LUN
# 进入该 Target 的 TPG1 的 luns 目录/iscsi>cdiqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/luns# 将前面创建的 backstore myblock1 绑定为 LUN 0/iscsi/iqn.20...sk1/tpg1/luns>create /backstores/block/myblock1# 输出:Created LUN 0.
3.3.4 配置 ACL(访问控制)
# 进入 acls 目录/iscsi/iqn.20...sk1/tpg1/luns>cd../acls# 创建 ACL,允许指定 IQN 的 Initiator 访问# 注意:此 IQN 需要与客户端 /etc/iscsi/initiatorname.iscsi 文件一致/iscsi/iqn.20.../tpg1/acls>create iqn.2026-04.cloud.laogao.iscsi-client# 输出:Created Node ACL for iqn.2026-04.cloud.laogao.iscsi-client# Created mapped LUN 0.
3.3.5 配置 Portal(监听地址)
# 进入 portals 目录/iscsi/iqn.20.../tpg1/acls>cd../portals# 删除默认的 0.0.0.0:3260(允许任意 IP 连接)/iscsi/iqn.20.../tpg1/portals>delete0.0.0.03260# 输出:Deleted network portal 0.0.0.0:3260# 创建仅监听 10.1.8.10:3260,提高安全性/iscsi/iqn.20.../tpg1/portals>create10.1.8.103260# 输出:Created network portal 10.1.8.10:3260.# 退出 targetcli,配置会自动保存到 /etc/target/saveconfig.json/>exit# 输出:Configuration saved to /etc/target/saveconfig.json

3.4 非交互式配置(命令行模式)

# 创建第二个 backstore[root@iscsi-server ~]# targetcli /backstores/block create myblock2 /dev/sdc# 创建第二个 Target[root@iscsi-server ~]# targetcli /iscsi create iqn.2026-04.cloud.laogao.iscsi-server:disk2# 绑定 LUN[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/luns \create /backstores/block/myblock2# 创建 ACL[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/acls \create iqn.2026-04.cloud.laogao.iscsi-client# 删除默认 portal[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/portals \delete0.0.0.03260# 注意:命令行模式必须手动保存配置[root@iscsi-server ~]# targetcli saveconfig

四、配置 iSCSI Initiator(客户端)

4.1 安装软件包

# 安装 iscsi-initiator-utils(提供 iscsiadm、iscsid 服务)[root@iscsi-client ~]# yum install -y iscsi-initiator-utils

4.2 设置客户端 IQN

# 编辑 initiator 配置文件,修改 IQN(必须与服务端 ACL 中设置的一致)[root@iscsi-client ~]# vim /etc/iscsi/initiatorname.iscsi# 内容示例:InitiatorName=iqn.2026-04.cloud.laogao.iscsi-client# 重启 iscsid 服务使更改生效[root@iscsi-client ~]# systemctl restart iscsid

4.3 发现 Target

# 发现指定 Portal 上的 Target 列表# -m discovery : 发现模式# -t st : 发送类型为 SendTargets# -p 10.1.8.10 : Portal 地址(默认端口 3260)[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10# 输出示例:# 10.1.8.10:3260,1 iqn.2026-04.cloud.laogao.iscsi-server:disk1# 10.1.8.10:3260,1 iqn.2026-04.cloud.laogao.iscsi-server:disk2

4.4 登录 Target

# 登录到指定 Target# -m node : 节点模式# -T TARGET_IQN: 指定 Target 的 IQN# -p portal : Portal 地址# -l : 登录(login)[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -l# 输出:Login to [iface: default, target: ..., portal: 10.1.8.10,3260] successful.# 查看已登录的会话[root@iscsi-client ~]# iscsiadm -m session# 或查看详细会话信息(级别3)[root@iscsi-client ~]# iscsiadm -m session -P 3

4.5 发现新磁盘并格式化挂载

# 查看新增的块设备(通常为 /dev/sdb 或 /dev/sdc)[root@iscsi-client ~]# lsblk# 输出示例:sdb 8:16 0 20G 0 disk# 格式化磁盘(假设设备为 /dev/sdb)[root@iscsi-client ~]# mkfs.xfs /dev/sdb# 创建挂载点并挂载[root@iscsi-client ~]# mkdir /sdb[root@iscsi-client ~]# mount /dev/sdb /sdb# 测试读写[root@iscsi-client ~]# echo "test data" > /sdb/test.txt[root@iscsi-client ~]# cat /sdb/test.txt

4.6 持久化挂载(/etc/fstab)

# 获取设备的 UUID(推荐使用 UUID 而非 /dev/sdX,因为设备名可能变化)[root@iscsi-client ~]# blkid /dev/sdb# 输出:/dev/sdb: UUID="81629560-cb56-4c19-814f-7f946d731b02" TYPE="xfs"# 编辑 /etc/fstab,添加如下内容[root@iscsi-client ~]# vim /etc/fstabUUID="81629560-cb56-4c19-814f-7f946d731b02"/sdb xfs defaults,_netdev00# _netdev 选项确保网络可用后再挂载,避免启动失败# 确保 iscsi 服务开机自启(默认已启用)[root@iscsi-client ~]# systemctl enable iscsi

五、断开 iSCSI 目标连接

# 1. 卸载文件系统[root@iscsi-client ~]# umount /sdb# 2. 从 /etc/fstab 中删除或注释相关行# 3. 登出目标(logout)[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -u# 4. 删除本地节点记录(防止下次启动自动登录)[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -o delete

六、多路径访问(Multipath)

6.1 为什么需要多路径?

  • 高可用性:一条路径故障时,自动切换到另一条路径,业务不中断。
  • 负载均衡:可配置多条路径同时传输,提升带宽。
  • 冗余:双网卡、双交换机、双存储控制器等场景。

6.2 多路径环境规划

节点名称IP地址角色
iscsi-server10.1.8.10/24 (vmnet8) + 10.1.1.10/24 (vmnet1)Target(双网卡)
iscsi-client10.1.8.11/24 (vmnet8) + 10.1.1.11/24 (vmnet1)Initiator(双网卡)

6.3 服务端多路径配置(Target)

# 在已配置好第一个 Portal 的基础上,再添加第二个 Portal(另一个网卡)[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals \create10.1.1.103260# 验证两个 Portal 均已存在[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals ls# 输出应包含 10.1.8.10:3260 和 10.1.1.10:3260

6.4 客户端安装多路径软件

# 安装 device-mapper-multipath[root@iscsi-client ~]# yum install -y device-mapper-multipath# 启用多路径(生成 /etc/multipath.conf)[root@iscsi-client ~]# mpathconf --enable --with_multipath y --with_chkconfig y# 启动 multipath 服务[root@iscsi-client ~]# systemctl enable multipathd --now

6.5 发现并登录(双路径)

# 确保客户端的两个网卡均能访问各自的 Portal# 先设置客户端 IQN(与 ACL 一致),然后发现两个 Portal 上的 Target[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.1.10# 登录所有已发现的目标(-L all 会登录所有节点)[root@iscsi-client ~]# iscsiadm -m node -L all

6.6 验证多路径设备

# 使用 scsi_id 或 udevadm 查看两个路径的 WWN 是否相同[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb# 输出:360014059a4a72ad3bf84b9bbb2ec0ffb[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc# 输出相同(说明是同一个存储设备)# 查看多路径拓扑[root@iscsi-client ~]# multipath -ll# 输出示例:# mpatha (360014059a4a72ad3bf84b9bbb2ec0ffb) dm-3 LIO-ORG , myblock1# size=20G features='0' hwhandler='0' wp=rw# |--+ policy='service-time 0' prio=1 status=active# | `- 3:0:0:0 sdb 8:16 active ready running# `--+ policy='service-time 0' prio=1 status=enabled# `- 4:0:0:0 sdc 8:32 active ready running
  • status=active的路径是当前主路径
  • status=enabled的路径是备用路径(当前无流量)
  • 默认策略service-time 0为活动‑备用模式(Active‑Passive)

6.7 多路径配置文件说明(/etc/multipath.conf)

配置文件包含以下部分:

段落作用
defaults全局默认设置(如 path_selector、path_grouping_policy)
blacklist忽略的设备(如本地磁盘)
blacklist_exceptions白名单,强制包含某些设备
devices特定设备类型的配置(根据 vendor/product 匹配)
multipaths针对特定 WWID 的多路径配置,优先级最高
# 示例:自定义多路径别名并修改分组策略[root@iscsi-client ~]# vim /etc/multipath.confmultipaths{multipath{wwid 360014059a4a72ad3bf84b9bbb2ec0ffbaliasmyiscsi path_grouping_policy multibus# 将所有路径放入一个组,实现负载均衡}}# 修改后需重启 multipathd 服务[root@iscsi-client ~]# systemctl restart multipathd

6.8 使用多路径设备

# 多路径设备位于 /dev/mapper/ 下,名称为 mpatha 或自定义别名[root@iscsi-client ~]# ls -l /dev/mapper/# 格式化多路径设备(注意:不是格式化 /dev/sdb,而是 /dev/mapper/mpatha)[root@iscsi-client ~]# mkfs.xfs /dev/mapper/mpatha# 挂载[root@iscsi-client ~]# mkdir /mpatha[root@iscsi-client ~]# mount /dev/mapper/mpatha /mpatha# 持久化挂载(使用 UUID 或 /dev/mapper/ 设备名)[root@iscsi-client ~]# blkid /dev/mapper/mpatha[root@iscsi-client ~]# vim /etc/fstabUUID="..."/mpatha xfs defaults,_netdev00

6.9 高可用故障切换测试

测试1:断开服务端第二块网卡(备用路径)
# 在服务器上断开 ens36(对应 10.1.1.10)[root@iscsi-server ~]# nmcli device disconnect ens36

客户端查看多路径状态:

[root@iscsi-client ~]# multipath -ll# 输出显示:sdc(备用路径)变为 failed faulty running# 主路径 sdb 仍然 active,业务不中断
测试2:恢复第二块网卡,断开第一块网卡
# 恢复 ens36[root@iscsi-server ~]# nmcli device connect ens36# 断开 ens33(对应 10.1.8.10)[root@iscsi-server ~]# nmcli device disconnect ens33

客户端状态变化:

[root@iscsi-client ~]# multipath -ll# 输出显示原主路径 sdb 变为 failed,而之前备用的 sdc 自动切换为 active# 路径恢复后,当前活动的路径不会自动回切(除非配置 failback)

若需路径恢复后自动切回原主路径,可在multipath.conf中设置failback immediate

七、常见故障排查

问题可能原因解决方法
Discovery 无输出防火墙未放行、Portal 地址错误检查服务器防火墙,netstat -tulnp | grep 3260
Login 失败客户端 IQN 与服务端 ACL 不匹配检查/etc/iscsi/initiatorname.iscsi,重启 iscsid
设备名不稳定磁盘扫描顺序不同使用 UUID 或/dev/disk/by-path/挂载
多路径不聚合未安装 multipath 软件或配置错误检查multipath -ll,确认 WWID 相同
重启后设备丢失iscsi服务未启用或_netdev未设置systemctl enable iscsi,fstab 添加_netdev

八、总结

通过本实验,我们掌握了:

  • ✅ iSCSI 的基本概念和架构(Target / Initiator / IQN / LUN / ACL)
  • ✅ 使用targetcli配置 iSCSI Target(backstore → IQN → LUN → ACL → Portal)
  • ✅ 使用iscsiadm配置 Initiator(发现 → 登录 → 格式化 → 挂载 → 持久化)
  • ✅ 多路径(Multipath)的配置与高可用测试,实现路径冗余和自动切换

iSCSI 是将普通服务器转变为 IP‑SAN 存储设备的低成本方案,广泛用于虚拟化环境(如 KVM、VMware)和私有云。配合多路径和集群文件系统(如 GFS2),可以构建高可用的共享存储架构。

http://www.jsqmd.com/news/802735/

相关文章:

  • 如何快速构建专业级移动端应用:jQuery WeUI终极指南
  • 会议室设备兼容性黑洞:Logitech Tap系列+Gemini字幕组合故障率高达68%(实测23款硬件),独家固件补丁包限时开放下载
  • 西安路灯厂家优选:陕西铭优照明,资质合规、品质立身、服务贴心 - 工厂好品牌
  • 从USB线缆到SCSI指令:揭秘数据存储设备中的协议栈协作
  • APK Installer:Windows上安装安卓应用的终极免费解决方案
  • PrismLauncher-Cracked:终极Minecraft离线启动解决方案指南
  • 什么是Dns数据?
  • Cursor Pro机器标识重置与多账户管理技术方案
  • CQUThesis:重庆大学毕业论文LaTeX模板完全指南
  • 魔兽争霸3终极优化指南:5分钟解决卡顿、宽屏与功能限制难题
  • 天赐范式第39天:当我把ADI和SOR从NS方程请出去,挂载11个算子,真是难为DPSK啦~
  • P0926HW现场总线板
  • 019、卡尔曼滤波基础:一维示例
  • Taotoken控制台中API调用审计日志的功能与价值
  • Loop习惯追踪:从零开始构建你的长期习惯养成系统
  • 2026国内Claude Code保姆级教程:安装、避坑、防串台全优化
  • 避坑指南:为什么你的OpenCV立体标定结果总是不准?从棋盘格到参数设置的常见误区
  • 智能图片分层革命:如何用Layerdivider将单张图片转化为可编辑PSD文件
  • claudecode用户如何无缝切换至taotoken避免服务中断
  • 分支与循环(实践)
  • WinHex实战:从磁盘底层到数据恢复的完整指南
  • System.out.println(““); System.err.println(““);
  • CANopen PDO通信:从对象字典配置到实时数据交换的实战解析
  • 2026购物机器人操作指南:工作原理与使用教程
  • 玩转容器与虚拟化:用Debootstrap手动构建Docker基础镜像和LXC容器
  • AI专著撰写秘籍!AI专著生成工具,快速产出20万字专著+专业排版!
  • 《Java 100 天进阶之路》第16篇:禁止使用Lombok
  • 告别爬虫:用trendsmcp托管API稳定获取多平台趋势数据
  • 如何快速解决Funannotate数据库安装失败:终极完整指南
  • 基于SpringBoot+Vue的网上商城系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】