侧边栏壁纸
  • 累计撰写 11 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

CentOS7 基于 targetcli 搭建 iSCSI 存储及多路径配置完整教程

自留地
2026-03-15 / 0 评论 / 0 点赞 / 38 阅读 / 0 字

# CentOS7 基于targetcli搭建iSCSI存储及多路径配置完整教程

## 关键词 CentOS7 iSCSI配置 targetcli使用教程 iSCSI多路径配置 multipath配置教程 iSCSI存储服务器搭建 CentOS7 targetcli部署 iSCSI双链路冗余 iSCSI WWID获取 multipath.conf配置 iSCSI客户端连接 iSCSI只读模式关闭 CentOS7存储部署

一、环境准备

1.1 服务器规划

本次教程采用两台CentOS7服务器,拓扑结构如下:
[ 管理网络 ]
                    192.168.1.0/24
                           │
                           │
           ┌───────────────▼───────────────┐
           │       iSCSI 存储服务器        │
           │       CentOS 7 + targetcli    │
           └───────────────┬───────────────┘
                    ┌──────┴──────┐
                    │             │
           ┌────────▼─┐     ┌────▼───────┐
           │ 172.16.1.100 │   │ 172.16.2.100 │
           └────┬──────┘     └────┬───────┘
                │                  │
                │                  │
           ┌────▼──────┐     ┌────▼───────┐
           │172.16.1.101│     │172.16.2.101│
           └───────────┘     └────────────┘
                    └───────────┬──────────┘
                           ┌────▼────┐
                           │ 客户端  │
                           │ CentOS7 │
                           └─────────┘

1.2 环境前置配置(两台服务器均执行)

关闭防火墙、SELinux,确保两台服务器存储网卡互通(ping 测试 172.16.1.100 与 172.16.1.101、172.16.2.100 与 172.16.2.101)。

# 关闭防火墙并设置开机不自启
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭SELinux
setenforce 0

# 永久关闭SELinux(重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 安装基础依赖
yum install -y wget net-tools

二、iSCSI 存储服务器(Target)搭建(基于 targetcli)

2.1 安装 targetcli 工具

targetcli 是 CentOS7 下用于配置 iSCSI Target 的命令行工具,替代传统的 iscsi-target-utils 配置方式,操作更简洁。

# 安装targetcli
yum install -y targetcli

# 启动target服务并设置开机自启
systemctl start target
systemctl enable target

# 查看target服务状态,确保启动成功
systemctl status target

若服务启动失败,可执行journalctl -u target查看错误日志,通常为依赖缺失或端口占用(iSCSI 默认端口 3260)。

2.2 准备存储设备(直接使用物理磁盘,无需 LVM)

本次不使用 LVM 逻辑卷,直接采用两块物理磁盘 /dev/sdb、/dev/sdc 作为 iSCSI 存储后端(无需分区,直接使用整块磁盘,简化配置),假设存储服务器已添加这两块新磁盘,先确认磁盘状态。

# 1. 查看磁盘信息,确认/dev/sdb、/dev/sdc两块磁盘存在(排除系统盘,避免误操作)
lsblk

# 2. 确认磁盘无挂载、无分区(若有分区或挂载,需先卸载、删除分区)
# 查看挂载状态,若有挂载则卸载(示例,根据实际情况调整)
umount /dev/sdb
umount /dev/sdc

# 查看分区,若有分区则删除(示例,谨慎操作,避免删除系统分区)
fdisk /dev/sdb
# 输入d → 依次删除所有分区 → w(保存)
fdisk /dev/sdc
# 输入d → 依次删除所有分区 → w(保存)

# 3. 确认两块磁盘无分区、无挂载,可直接作为存储后端使用
lsblk /dev/sdb
lsblk /dev/sdc

说明:直接使用整块物理磁盘(/dev/sdb、/dev/sdc)作为存储后端,无需创建分区和 LVM,操作更简洁,适合对存储扩展无特殊需求的场景,后续直接将这两块磁盘关联到 iSCSI Target。

2.3 使用 targetcli 配置 iSCSI Target

进入 targetcli 交互模式,依次配置存储后端、Target、LUN、ACL(访问控制),全程命令如下,注释详细说明每一步作用。

# 进入targetcli交互模式(进入后提示符为targetcli)
targetcli

# 1. 切换到存储后端目录,创建两块块存储(直接使用/dev/sdb、/dev/sdc物理磁盘)
cd /backstores/block
create iscsi_store1 /dev/sdb  # iscsi_store1为第一块存储名称,可自定义,对应/dev/sdb
create iscsi_store2 /dev/sdc  # iscsi_store2为第二块存储名称,可自定义,对应/dev/sdc

# 2. 切换到Target目录,创建iSCSI Target(Target IQN格式:iqn.年份-月份.域名反写:自定义名称)
cd /iscsi
create iqn.2026-03.com.example:iscsi.target  # 示例IQN,可根据实际修改,客户端需对应

# 3. 为Target创建LUN(逻辑单元号),分别关联两块物理磁盘存储后端
cd iqn.2026-03.com.example:iscsi.target/tpg1/luns
create /backstores/block/iscsi_store1  # 关联第一块存储/dev/sdb,LUN默认编号0
create /backstores/block/iscsi_store2  # 关联第二块存储/dev/sdc,LUN默认编号1

# 4. 配置ACL(允许指定客户端访问,客户端IQN需提前获取,后续客户端配置会提及)
# 先暂时允许所有客户端访问(测试用),后续可限制客户端IQN
cd /iscsi/iqn.2026-03.com.example:iscsi.target/tpg1/acls
create iqn.2026-03.com.example:iscsi.initiator  # 客户端IQN,需与客户端一致

# 5. 配置存储网卡监听(双网卡均需配置,实现双链路)
cd /iscsi/iqn.2026-03.com.example:iscsi.target/tpg1/portals
# 删除默认的0.0.0.0:3260(避免所有网卡监听)
delete 0.0.0.0 3260
# 添加存储网卡1监听(172.16.1.100:3260)
create 172.16.1.100 3260
# 添加存储网卡2监听(172.16.2.100:3260)
create 172.16.2.100 3260

# 6. 查看配置(确认所有配置正确,两块存储均已关联)
ls

# 7. 保存配置(重要!否则重启target服务后配置丢失)
saveconfig

# 8. 退出targetcli交互模式
exit

关键说明:IQN(iSCSI Qualified Name)是 iSCSI 设备的唯一标识,存储端和客户端的 IQN 需正确对应,否则无法建立连接。

2.4 验证存储服务器配置

# 查看target配置摘要
targetcli ls

# 查看3260端口监听状态(双网卡均应监听3260端口)
netstat -tulnp | grep 3260

若输出中显示 172.16.1.100:3260 和 172.16.2.100:3260 处于 LISTEN 状态,说明存储服务器配置成功。

2.5 解决存储默认不让写(关闭 read-only 只读模式)

iSCSI 存储默认可能开启read-only(只读)模式,导致客户端无法写入数据(仅能读取),需在存储服务器端通过 targetcli 关闭该模式,操作如下(全程在存储服务器执行):

# 1. 再次进入targetcli交互模式
targetcli

# 2. 切换到对应Target的LUN配置目录(对应之前创建的Target IQN)
cd /iscsi/iqn.2026-03.com.example:iscsi.target/tpg1/luns

# 3. 查看当前LUN的属性(确认是否开启只读模式,默认可能为read_write,异常时为read_only)
ls -l

# 4. 关闭只读模式(分别为两个LUN配置可读写,对应/dev/sdb、/dev/sdc)
# 配置LUN 0(对应iscsi_store1、/dev/sdb)为可读写
set attribute lun0/readonly=0
# 配置LUN 1(对应iscsi_store2、/dev/sdc)为可读写
set attribute lun1/readonly=0

# 5. 再次查看属性,确认readonly已改为0(0=可读写,1=只读)
ls -l

# 6. 保存配置(必须执行,否则重启服务后配置失效)
saveconfig

# 7. 退出targetcli交互模式
exit

# 8. 重启target服务,使配置生效
systemctl restart target

补充说明:

  1. 若客户端仍无法写入,需确认客户端挂载时未添加 ro(只读)参数(本文后续挂载命令已默认使用 rw 可读写模式);

  2. 若执行 set attribute 命令报错,可直接切换到对应 LUN 目录(如 cd lun0),执行 set readonly=0 即可。

三、iSCSI 客户端(Initiator)配置及多路径部署

3.1 安装客户端工具

客户端需要安装 iscsi-initiator-utils(用于连接 iSCSI 存储)和 multipath-tools(用于配置多路径)。

# 安装客户端工具
yum install -y iscsi-initiator-utils multipath-tools

# 启动iscsi服务并设置开机自启
systemctl start iscsid
systemctl enable iscsid

# 启动multipath服务并设置开机自启
systemctl start multipathd
systemctl enable multipathd

3.2 配置客户端 IQN(与存储端 ACL 一致)

修改客户端 IQN 配置文件,确保与存储端 ACL 中配置的 IQN 一致,否则无法通过访问控制。

# 编辑IQN配置文件
vi /etc/iscsi/initiatorname.iscsi

# 修改内容为(与存储端ACL中创建的IQN一致)
InitiatorName=iqn.2026-03.com.example:iscsi.initiator

# 保存退出后,重启iscsi服务使配置生效
systemctl restart iscsid

3.3 发现并登录 iSCSI 存储(双链路)

客户端需分别通过两块存储网卡,发现并登录存储服务器,建立两条独立的 iSCSI 链路,为后续多路径配置做准备。

# 1. 发现172.16.1.100的Target
iscsiadm -m discovery -t st -p 172.16.1.100:3260

# 2. 发现172.16.2.100的Target
iscsiadm -m discovery -t st -p 172.16.2.100:3260

# 3. 登录所有已发现的iSCSI节点(无需分别登录,一条命令完成双链路登录)
iscsiadm -m node -l

# 4. 查看登录状态(确认两条链路均登录成功)
iscsiadm -m session

若输出中显示两条 session(分别对应 172.16.1.100 和 172.16.2.100),说明双链路登录成功,此时可通过lsblk查看客户端识别到的存储设备(会显示 4 个磁盘,对应两块物理磁盘 /dev/sdb、/dev/sdc 的两条链路,每块磁盘对应 2 个客户端识别设备)。

3.3.1 配置 iSCSI 开机自动连接(统一指定命令方式

默认情况下,客户端重启后,iSCSI 链路会自动断开,需手动重新登录。以下直接使用指定命令配置,操作简洁高效,一条命令即可完成所有链路的自动连接配置。

# 1. 查看已发现的iSCSI节点(确认两条链路节点均存在,避免配置错误)
iscsiadm -m node

# 2. 配置所有iSCSI节点开机自动登录(一条命令搞定,无需分别配置)
iscsiadm -m node -o update -n node.startup -v automatic

# 3. 验证自动登录配置是否生效(查看节点启动方式是否为automatic)
iscsiadm -m node

# 4. 可选(测试重启后自动连接,生产环境谨慎操作)
# reboot
# 重启后执行以下命令,确认两条链路自动登录成功
# iscsiadm -m session

说明:使用 iscsiadm -m node -l 可一次性登录所有已发现的 iSCSI 节点(两条链路),无需分别登录;iscsiadm -m node -o update -n node.startup -v automatic 可一次性配置所有节点开机自动登录,简化操作,客户端重启后,iscsi 服务会自动登录两条 iSCSI 链路,多路径服务随之识别链路并聚合为逻辑设备,无需手动干预。

3.4 配置多路径(multipath)

多路径的核心作用是将两条独立的 iSCSI 链路聚合为一个逻辑设备,实现链路冗余和负载均衡,当一条链路故障时,业务可自动切换到另一条链路,不影响使用。

3.4.1 获取存储设备 WWID

配置多路径前,需先获取 iSCSI 设备的 WWID(全球唯一标识),后续编辑配置文件时需用到该参数,确保多路径能正确识别 iSCSI 设备,获取方法如下:

# 方法1:直接筛选iSCSI设备的WWID(最常用,必出结果)
ls -l /dev/disk/by-id/ | grep -E "scsi-"
# 复制输出中「scsi-开头」的完整字符串,即为iSCSI设备WWID

# 方法2:一键提取可直接使用的WWID(简化筛选,无需手动复制筛选)
ls -l /dev/disk/by-id/ | grep -E "scsi-" | awk '{print $9}'

# 方法3:验证提取的WWID(可选,确认WWID对应正确iSCSI设备)
# 替换命令中的scsi-xxx为提取的WWID
ls -l /dev/disk/by-id/scsi-360014053dc3aaba3a064a1a8441b9a3b

3.4.2 生成默认多路径配置文件并编辑

获取 WWID 后,生成默认多路径配置文件,再将获取到的 WWID 填入配置,避免手动创建文件遗漏关键参数,操作如下:

# 1. 简化命令:一键生成默认多路径配置文件(-y 自动确认,无需手动交互,最简洁)
mpathconf -y

# 2. 备份默认配置文件(避免修改出错,后续可恢复)
cp /etc/multipath.conf /etc/multipath.conf.bak

# 3. 编辑多路径配置文件,替换为自定义配置
vi /etc/multipath.conf

# 输入以下配置(替换WWID为实际获取的值)
defaults {
    user_friendly_names yes
    find_multipaths yes
}

# 黑名单:排除本地磁盘,只管理 iSCSI 磁盘
blacklist {
    wwid "*"
}

# 白名单:仅包含你的两块 iSCSI 磁盘 WWID
blacklist_exceptions {
    wwid "360014057b078e825dec4d2c9601355a9"
    wwid "360014053dc3aaba3a064a1a8441b9a3b"
}

# 绑定 WWID 和自定义别名
multipaths {
    multipath {
        wwid "360014057b078e825dec4d2c9601355a9"
        alias iscsi-lun01
        path_grouping_policy group_by_prio
        path_selector "service-time 0"
        failback immediate
        rr_min_io 100
    }
    multipath {
        wwid "360014053dc3aaba3a064a1a8441b9a3b"
        alias iscsi-lun02
        path_grouping_policy group_by_prio
        path_selector "service-time 0"
        failback immediate
        rr_min_io 100
    }
}

补充说明:mpathconf -y 是最简洁的命令,-y 参数会自动确认所有选项(等价于 --enable --with_multipathd y --create_config y),一键启用多路径服务、生成默认配置文件;上述配置文件需将 WWID 替换为实际获取的值,绑定自定义别名(iscsi-lun01、iscsi-lun02),便于识别和使用。

3.4.3 生效多路径配置

# 重新加载多路径配置
systemctl reload multipathd

# 扫描并更新多路径设备
multipath -v2

# 查看多路径状态(确认多路径设备正常)
multipath -ll

正常输出示例:

iscsi-lun02 (360014053dc3aaba3a064a1a8441b9a3b) dm-3 LIO-ORG ,lun02
size=100G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
  |- 33:0:0:1 sdc 8:32 active ready running
  `- 34:0:0:1 sde 8:64 active ready running
iscsi-lun01 (360014057b078e825dec4d2c9601355a9) dm-2 LIO-ORG ,lun01
size=100G features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
  |- 33:0:0:0 sdb 8:16 active ready running
  `- 34:0:0:0 sdd 8:48 active ready running

正常输出应显示:两个逻辑设备(alias 为 iscsi-lun01、iscsi-lun02),每个设备对应两条 active 路径(active),状态为 ready,说明多路径配置成功。

四、测试验证

4.1 多路径设备挂载测试

将多路径逻辑设备格式化并挂载,测试存储读写正常。

# 格式化多路径逻辑设备(格式为xfs,可根据需求选择ext4)
mkfs.xfs /dev/mapper/iscsi-lun01
mkfs.xfs /dev/mapper/iscsi-lun02

# 创建两个挂载点
mkdir /mnt/iscsi_lun01
mkdir /mnt/iscsi_lun02

# 临时挂载多路径设备
mount /dev/mapper/iscsi-lun01 /mnt/iscsi_lun01
mount /dev/mapper/iscsi-lun02 /mnt/iscsi_lun02

# 设置开机自动挂载(编辑/etc/fstab)
echo "/dev/mapper/iscsi-lun01 /mnt/iscsi_lun01 xfs defaults,_netdev 0 0" >> /etc/fstab
echo "/dev/mapper/iscsi-lun02 /mnt/iscsi_lun02 xfs defaults,_netdev 0 0" >> /etc/fstab

# 验证挂载(查看挂载状态)
df -h | grep /mnt/iscsi_

# 读写测试(创建测试文件,写入内容)
touch /mnt/iscsi_lun01/test01.txt
echo "iscsi multipath test lun01" > /mnt/iscsi_lun01/test01.txt
touch /mnt/iscsi_lun02/test02.txt
echo "iscsi multipath test lun02" > /mnt/iscsi_lun02/test02.txt
cat /mnt/iscsi_lun01/test01.txt
cat /mnt/iscsi_lun02/test02.txt

若能正常创建、写入、读取文件,说明存储挂载正常。

4.2 多路径冗余测试

模拟一条链路故障,测试业务是否能正常切换,确保多路径冗余生效。

# 1. 查看当前多路径状态(两个设备各两条路径均为active)
multipath -ll

# 2. 禁用客户端其中一块存储网卡(模拟链路故障)
ifdown ens37  # 替换为实际的存储网卡名称(可通过ip addr查看)

# 3. 再次查看多路径状态(应显示每个设备各一条路径故障,另一条路径正常active)
multipath -ll

# 4. 测试存储读写(此时应能正常读写,无异常)
echo "test after path down lun01" >> /mnt/iscsi_lun01/test01.txt
echo "test after path down lun02" >> /mnt/iscsi_lun02/test02.txt
cat /mnt/iscsi_lun01/test01.txt
cat /mnt/iscsi_lun02/test02.txt

# 5. 恢复网卡(恢复链路)
ifup ens37

# 6. 再次查看多路径状态(两个设备各两条路径均恢复active)
multipath -ll

若链路故障时,存储仍能正常读写,链路恢复后多路径状态正常,说明多路径冗余配置成功。

五、常见问题排查

5.1 客户端无法发现 iSCSI 存储

  • 检查存储服务器 target 服务是否正常运行:systemctl status target

  • 检查客户端与存储服务器存储网卡是否互通(ping 测试),防火墙是否关闭;

  • 检查存储端 portal 配置是否正确,确保 3260 端口监听正常。

5.2 客户端登录 iSCSI 存储失败

  • 检查客户端 IQN 与存储端 ACL 中配置的 IQN 是否一致;

  • 检查存储端 LUN 配置是否正确,是否关联了存储后端;

  • 执行iscsiadm -m session -d 8查看详细登录日志,定位错误原因。

5.3 多路径设备无法识别

  • 检查 multipath 服务是否正常运行:systemctl status multipathd

  • 检查 multipath.conf 配置文件,WWID 是否正确,黑名单是否排除了系统盘;

  • 执行multipath -F清除旧的多路径配置,再执行multipath -v2重新扫描。

5.4 链路故障后无法自动切换

  • 检查多路径配置文件中的 path_grouping_policy 和 failback 参数是否正确;

  • 检查链路故障的网卡是否真的禁用,可通过ip addr查看网卡状态;

  • 执行multipathd -k"show paths"查看路径状态,确认故障路径已被标记为 failed。

5.5 客户端无法写入 iSCSI 存储

  • 优先检查存储端是否关闭 read-only 模式(参考 2.5 节操作),确认 LUN 属性 readonly=0;

  • 检查客户端挂载命令,确保未添加 ro(只读)参数;

  • 检查存储磁盘权限,执行chmod 777 /dev/sdb /dev/sdc(临时授权,生产环境按需调整)。

六、总结

  1. 存储端核心:通过 targetcli 配置块存储、Target、LUN 和双网卡监听,关闭 LUN 只读模式,确保存储可读写且双链路监听;

  2. 客户端核心:配置 IQN 与存储端一致,登录双链路 iSCSI 节点,通过 multipath 配置将双链路聚合为逻辑设备,实现冗余;

  3. 验证核心:挂载存储测试读写,模拟链路故障测试冗余切换,确保整个 iSCSI 存储架构稳定可用。

该架构适用于中小型企业的存储需求,通过双链路多路径配置,提升了 iSCSI 存储的可用性和稳定性,避免因单链路故障导致业务中断。

0

💻 博主自用服务器推荐

我平时做Linux实验、排查运维故障、搭建个人博客,全程用阿里云ECS:
✅ 稳定不掉线,大厂品质有保障
✅ 新用户2核2G低至99元/年,性价比拉满
✅ 自带安全组/快照,练手不怕搞坏环境

点击领取阿里云优惠

评论区