iSCSI 服务器总结:概念、架构、配置与多路径详解
iSCSI 服务器总结概念、架构、配置与多路径详解一、iSCSI 服务介绍SCSISmall Computer System Interface小型计算机系统接口是一种连接计算机与智能设备硬盘、光驱、打印机等的标准接口。iSCSIInternet Small Computer System InterfaceInternet 小型计算机系统接口又称为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 Initiator3.2 安装与基础配置# 安装服务端软件包targetd后台服务和 targetcli配置工具[rootiscsi-server ~]# yum install -y targetd targetcli# 启用并启动 target 服务注意服务名是 target不是 targetd[rootiscsi-server ~]# systemctl enable target --now# 配置防火墙放行 iSCSI 服务端口 3260[rootiscsi-server ~]# firewall-cmd --permanent --add-serviceiscsi-target[rootiscsi-server ~]# firewall-cmd --reload3.3 使用 targetcli 配置 Targettargetcli提供交互式 shell 和命令行模式。交互模式以/提示符开始支持ls、cd、create、delete等命令。3.3.1 创建 backstore后备存储# 进入交互模式[rootiscsi-server ~]# targetcli/ls# 输出显示当前配置树包含 backstores、iscsi、loopback 等目录# 进入 backstores/block 目录/cd/backstores/block /backstores/blockcreate myblock1 /dev/sdb# 创建名为 myblock1 的块设备后备存储绑定物理磁盘 /dev/sdb# 输出Created block storage object myblock1 using /dev/sdb.支持的 backstore 类型block块设备磁盘、分区、LVMfileio文件作为磁盘映像pscsi物理 SCSI 设备ramdisk内存盘重启后数据丢失3.3.2 创建 Target IQN/backstores/blockcd/iscsi /iscsicreate 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 目录/iscsicdiqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/luns# 将前面创建的 backstore myblock1 绑定为 LUN 0/iscsi/iqn.20...sk1/tpg1/lunscreate /backstores/block/myblock1# 输出Created LUN 0.3.3.4 配置 ACL访问控制# 进入 acls 目录/iscsi/iqn.20...sk1/tpg1/lunscd../acls# 创建 ACL允许指定 IQN 的 Initiator 访问# 注意此 IQN 需要与客户端 /etc/iscsi/initiatorname.iscsi 文件一致/iscsi/iqn.20.../tpg1/aclscreate 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/aclscd../portals# 删除默认的 0.0.0.0:3260允许任意 IP 连接/iscsi/iqn.20.../tpg1/portalsdelete0.0.0.03260# 输出Deleted network portal 0.0.0.0:3260# 创建仅监听 10.1.8.10:3260提高安全性/iscsi/iqn.20.../tpg1/portalscreate10.1.8.103260# 输出Created network portal 10.1.8.10:3260.# 退出 targetcli配置会自动保存到 /etc/target/saveconfig.json/exit# 输出Configuration saved to /etc/target/saveconfig.json3.4 非交互式配置命令行模式# 创建第二个 backstore[rootiscsi-server ~]# targetcli /backstores/block create myblock2 /dev/sdc# 创建第二个 Target[rootiscsi-server ~]# targetcli /iscsi create iqn.2026-04.cloud.laogao.iscsi-server:disk2# 绑定 LUN[rootiscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/luns \create /backstores/block/myblock2# 创建 ACL[rootiscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/acls \create iqn.2026-04.cloud.laogao.iscsi-client# 删除默认 portal[rootiscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/portals \delete0.0.0.03260# 注意命令行模式必须手动保存配置[rootiscsi-server ~]# targetcli saveconfig四、配置 iSCSI Initiator客户端4.1 安装软件包# 安装 iscsi-initiator-utils提供 iscsiadm、iscsid 服务[rootiscsi-client ~]# yum install -y iscsi-initiator-utils4.2 设置客户端 IQN# 编辑 initiator 配置文件修改 IQN必须与服务端 ACL 中设置的一致[rootiscsi-client ~]# vim /etc/iscsi/initiatorname.iscsi# 内容示例InitiatorNameiqn.2026-04.cloud.laogao.iscsi-client# 重启 iscsid 服务使更改生效[rootiscsi-client ~]# systemctl restart iscsid4.3 发现 Target# 发现指定 Portal 上的 Target 列表# -m discovery : 发现模式# -t st : 发送类型为 SendTargets# -p 10.1.8.10 : Portal 地址默认端口 3260[rootiscsi-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:disk24.4 登录 Target# 登录到指定 Target# -m node : 节点模式# -T TARGET_IQN: 指定 Target 的 IQN# -p portal : Portal 地址# -l : 登录login[rootiscsi-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.# 查看已登录的会话[rootiscsi-client ~]# iscsiadm -m session# 或查看详细会话信息级别3[rootiscsi-client ~]# iscsiadm -m session -P 34.5 发现新磁盘并格式化挂载# 查看新增的块设备通常为 /dev/sdb 或 /dev/sdc[rootiscsi-client ~]# lsblk# 输出示例sdb 8:16 0 20G 0 disk# 格式化磁盘假设设备为 /dev/sdb[rootiscsi-client ~]# mkfs.xfs /dev/sdb# 创建挂载点并挂载[rootiscsi-client ~]# mkdir /sdb[rootiscsi-client ~]# mount /dev/sdb /sdb# 测试读写[rootiscsi-client ~]# echo test data /sdb/test.txt[rootiscsi-client ~]# cat /sdb/test.txt4.6 持久化挂载/etc/fstab# 获取设备的 UUID推荐使用 UUID 而非 /dev/sdX因为设备名可能变化[rootiscsi-client ~]# blkid /dev/sdb# 输出/dev/sdb: UUID81629560-cb56-4c19-814f-7f946d731b02 TYPExfs# 编辑 /etc/fstab添加如下内容[rootiscsi-client ~]# vim /etc/fstabUUID81629560-cb56-4c19-814f-7f946d731b02/sdb xfs defaults,_netdev00# _netdev 选项确保网络可用后再挂载避免启动失败# 确保 iscsi 服务开机自启默认已启用[rootiscsi-client ~]# systemctl enable iscsi五、断开 iSCSI 目标连接# 1. 卸载文件系统[rootiscsi-client ~]# umount /sdb# 2. 从 /etc/fstab 中删除或注释相关行# 3. 登出目标logout[rootiscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -u# 4. 删除本地节点记录防止下次启动自动登录[rootiscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -o delete六、多路径访问Multipath6.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另一个网卡[rootiscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals \create10.1.1.103260# 验证两个 Portal 均已存在[rootiscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals ls# 输出应包含 10.1.8.10:3260 和 10.1.1.10:32606.4 客户端安装多路径软件# 安装 device-mapper-multipath[rootiscsi-client ~]# yum install -y device-mapper-multipath# 启用多路径生成 /etc/multipath.conf[rootiscsi-client ~]# mpathconf --enable --with_multipath y --with_chkconfig y# 启动 multipath 服务[rootiscsi-client ~]# systemctl enable multipathd --now6.5 发现并登录双路径# 确保客户端的两个网卡均能访问各自的 Portal# 先设置客户端 IQN与 ACL 一致然后发现两个 Portal 上的 Target[rootiscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10[rootiscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.1.10# 登录所有已发现的目标-L all 会登录所有节点[rootiscsi-client ~]# iscsiadm -m node -L all6.6 验证多路径设备# 使用 scsi_id 或 udevadm 查看两个路径的 WWN 是否相同[rootiscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb# 输出360014059a4a72ad3bf84b9bbb2ec0ffb[rootiscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc# 输出相同说明是同一个存储设备# 查看多路径拓扑[rootiscsi-client ~]# multipath -ll# 输出示例# mpatha (360014059a4a72ad3bf84b9bbb2ec0ffb) dm-3 LIO-ORG , myblock1# size20G features0 hwhandler0 wprw# |-- policyservice-time 0 prio1 statusactive# | - 3:0:0:0 sdb 8:16 active ready running# -- policyservice-time 0 prio1 statusenabled# - 4:0:0:0 sdc 8:32 active ready runningstatusactive的路径是当前主路径statusenabled的路径是备用路径当前无流量默认策略service-time 0为活动‑备用模式Active‑Passive6.7 多路径配置文件说明/etc/multipath.conf配置文件包含以下部分段落作用defaults全局默认设置如 path_selector、path_grouping_policyblacklist忽略的设备如本地磁盘blacklist_exceptions白名单强制包含某些设备devices特定设备类型的配置根据 vendor/product 匹配multipaths针对特定 WWID 的多路径配置优先级最高# 示例自定义多路径别名并修改分组策略[rootiscsi-client ~]# vim /etc/multipath.confmultipaths{multipath{wwid 360014059a4a72ad3bf84b9bbb2ec0ffbaliasmyiscsi path_grouping_policy multibus# 将所有路径放入一个组实现负载均衡}}# 修改后需重启 multipathd 服务[rootiscsi-client ~]# systemctl restart multipathd6.8 使用多路径设备# 多路径设备位于 /dev/mapper/ 下名称为 mpatha 或自定义别名[rootiscsi-client ~]# ls -l /dev/mapper/# 格式化多路径设备注意不是格式化 /dev/sdb而是 /dev/mapper/mpatha[rootiscsi-client ~]# mkfs.xfs /dev/mapper/mpatha# 挂载[rootiscsi-client ~]# mkdir /mpatha[rootiscsi-client ~]# mount /dev/mapper/mpatha /mpatha# 持久化挂载使用 UUID 或 /dev/mapper/ 设备名[rootiscsi-client ~]# blkid /dev/mapper/mpatha[rootiscsi-client ~]# vim /etc/fstabUUID.../mpatha xfs defaults,_netdev006.9 高可用故障切换测试测试1断开服务端第二块网卡备用路径# 在服务器上断开 ens36对应 10.1.1.10[rootiscsi-server ~]# nmcli device disconnect ens36客户端查看多路径状态[rootiscsi-client ~]# multipath -ll# 输出显示sdc备用路径变为 failed faulty running# 主路径 sdb 仍然 active业务不中断测试2恢复第二块网卡断开第一块网卡# 恢复 ens36[rootiscsi-server ~]# nmcli device connect ens36# 断开 ens33对应 10.1.8.10[rootiscsi-server ~]# nmcli device disconnect ens33客户端状态变化[rootiscsi-client ~]# multipath -ll# 输出显示原主路径 sdb 变为 failed而之前备用的 sdc 自动切换为 active# 路径恢复后当前活动的路径不会自动回切除非配置 failback若需路径恢复后自动切回原主路径可在multipath.conf中设置failback immediate。七、常见故障排查问题可能原因解决方法Discovery 无输出防火墙未放行、Portal 地址错误检查服务器防火墙netstat -tulnp | grep 3260Login 失败客户端 IQN 与服务端 ACL 不匹配检查/etc/iscsi/initiatorname.iscsi重启 iscsid设备名不稳定磁盘扫描顺序不同使用 UUID 或/dev/disk/by-path/挂载多路径不聚合未安装 multipath 软件或配置错误检查multipath -ll确认 WWID 相同重启后设备丢失iscsi服务未启用或_netdev未设置systemctl enable iscsifstab 添加_netdev八、总结通过本实验我们掌握了✅ iSCSI 的基本概念和架构Target / Initiator / IQN / LUN / ACL✅ 使用targetcli配置 iSCSI Targetbackstore → IQN → LUN → ACL → Portal✅ 使用iscsiadm配置 Initiator发现 → 登录 → 格式化 → 挂载 → 持久化✅ 多路径Multipath的配置与高可用测试实现路径冗余和自动切换iSCSI 是将普通服务器转变为 IP‑SAN 存储设备的低成本方案广泛用于虚拟化环境如 KVM、VMware和私有云。配合多路径和集群文件系统如 GFS2可以构建高可用的共享存储架构。