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 限制访问。 |
| TPG | Target Portal Group,包含 Portal、LUN、ACL 的完整配置。 |
工作流程:Discovery(查询 Target 列表)→Login(验证并登录)→ 使用块设备。
三、配置 iSCSI Target(服务端)
3.1 节点规划
| 节点名称 | 节点IP | 作用 |
|---|---|---|
| iscsi-server | 10.1.8.10/24 | iSCSI Target,增加 2 块 20G SCSI 硬盘 |
| iscsi-client | 10.1.8.11/24 | iSCSI 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 --reload3.3 使用 targetcli 配置 Target
targetcli提供交互式 shell 和命令行模式。交互模式以/>提示符开始,支持ls、cd、create、delete等命令。
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.json3.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-utils4.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 iscsid4.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:disk24.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 34.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.txt4.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-server | 10.1.8.10/24 (vmnet8) + 10.1.1.10/24 (vmnet1) | Target(双网卡) |
| iscsi-client | 10.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:32606.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 --now6.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 all6.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 runningstatus=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 multipathd6.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,_netdev006.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),可以构建高可用的共享存储架构。
