现代Linux必须用targetcli-fb(非iscsitarget)搭建高可用iSCSI Target,因其直接对接内核LIO子系统,而iscsitarget已停止维护且与新内核不兼容;需启用ALUA、PR及严格ACL配置方可实现多路径高可用与安全并发访问。

现代 Linux 上无法用 iscsitarget(ietd)搭建高可用 iSCSI Target,必须用 targetcli-fb 或 targetcli(实为 fb 软链)对接内核 LIO 子系统;否则服务起不来、连接被拒、I/O 随机失败。
为什么 targetcli-fb 是唯一可行选择
iscsitarget 已于 2017 年停止维护,Ubuntu 20.04+、RHEL 8+、CentOS Stream 9 等系统默认不提供包;强行编译会触发 CONFIG_TARGET_CORE 缺失、模块签名拒绝加载、insmod iet.ko 报 Invalid module format 等错误。而 targetcli-fb 直接调用内核 target_core_mod 和 iscsi_target_mod,是当前唯一被上游和发行版持续支持的方案。
确认是否就绪:
- 运行
lsmod | grep -E "(target_core|iscsi_target)",应有输出 - Debian/Ubuntu:装
targetcli-fb(不是targetcli) - RHEL/CentOS 8+:启用
highavailability仓库后yum install targetcli,实际是targetcli-fb的软链接
配置 ALUA 实现高可用路径切换
单 IP + 单 portal 只能提供单点服务;真高可用需多网卡、多 IP、ALUA 模式识别优先路径。LIO 默认不启用 ALUA,必须显式开启并设 default_tg_pt_gp_id。
实操步骤:
- 在
/iscsi/iqn.2024-09.com.example:storage/tpg1/portals/下执行两次create 192.168.10.100和create 192.168.10.101(对应两块网卡) - 进入
/iscsi/iqn.2024-09.com.example:storage/tpg1/,执行set attribute generate_node_a=1(启用 ALUA 支持) - 执行
set attribute default_tg_pt_gp_id=1,再手动创建 TG PT group:cd tg_pt_gp/→create default→set attribute preferred=1 - 客户端需用
iscsiadm -m node -T <iqn> --op=update -n node.session.timeo.replacement_timeout -v 30</iqn>避免路径故障时 hang 死
让多客户端安全读写同一 LUN 的关键设置
iSCSI 协议本身不提供分布式锁,裸设备多写 = 文件系统崩溃。若真需并发写入,必须满足两个条件之一:
- 上层用集群文件系统(如 GFS2):initiator 端格式化前运行
mkfs.gfs2 -p lock_dlm -t cluster1:disk1 -j 4 /dev/sdb,且所有节点运行corosync+pacemaker - 或退而求其次,只读共享 + 单写节点:Target 端设
/backstores/block/disk0 set attribute emulate_pr=1 emulate_3pc=1,确保 Windows/Linux initiator 能正常登录并识别 PR key - 禁用 page cache 干扰:后端用
dd if=/dev/zero of=/srv/iscsi/disk.img bs=1M count=10240 oflag=direct创建,避免缓存导致 I/O 不一致
ACL、防火墙与静默失败排查
没配 ACL 就像没关大门——targetcli 不报错,但 initiator 连接时直接超时或返回 iscsiadm: can't connect to 192.168.10.100:3260, Connection refused(其实是被 ACL 拒绝,非端口不通)。
必须项清单:
- ACL 名称必须与 initiator 的
/etc/iscsi/initiatorname.iscsi中InitiatorName完全一致(区分大小写) - 防火墙放行
3260/tcp,且确认systemctl is-active target为active (running),而非activating(后者常因 saveconfig 失败卡住) - 检查
/var/log/messages是否含lio_target: Unable to locate ACL for IQN或iscsi_target: Rejecting login request due to ACL mismatch - 客户端发现后务必执行
iscsiadm -m node -T <iqn> --login</iqn>,不能只靠systemctl start iscsi自动挂载(它不处理多路径)
ALUA 和 PR 设置一旦漏掉,Windows 客户端可能挂载成功但立即蓝屏,Linux 客户端则表现为 Write protect is on 或随机 Input/output error ——这些都不是网络问题,而是 LUN 属性未对齐。


















