凌峰创科服务平台

CentOS iSCSI服务器如何配置与故障排查?

  1. 安装软件包
  2. 配置 iSCSI 目标
  3. 创建并配置 LUN (逻辑单元号)
  4. 启动并启用服务
  5. 配置防火墙和 SELinux
  6. 客户端连接验证

前提条件

  • 一台运行 CentOS 7CentOS 8/Stream 的服务器。
  • 具有管理员 (root) 权限。
  • 一块或多块用于提供存储的硬盘(可以是物理磁盘、LVM 逻辑卷、文件或 ZFS 卷),本教程将以一块新硬盘 /dev/sdb 为例。

第 1 步:安装软件包

我们需要安装 targetcli 包,这是目前最主流、最易于使用的 iSCSI 目标管理工具。

CentOS iSCSI服务器如何配置与故障排查?-图1
(图片来源网络,侵删)
# 对于 CentOS 7
sudo yum install targetcli -y
# 对于 CentOS 8 / Stream
sudo dnf install targetcli -y

安装完成后,targetcli 会自动创建一个配置文件,并提示您是否在系统重启时自动加载配置,建议选择 Yes


第 2 步:配置 iSCSI 目标

targetcli 使用一个类似 shell 的交互式界面来管理所有存储资源。

1 启动 targetcli

在终端输入 targetcli 并回车:

sudo targetcli

您将进入一个以 /> 开头的命令行界面。

CentOS iSCSI服务器如何配置与故障排查?-图2
(图片来源网络,侵删)

2 配置基本目标信息

一个 iSCSI 目标由三部分组成:

  • iqn (iSCSI Qualified Name): 全局唯一的名称,格式为 iqn.yyyy-mm.reversed-domain-name:identifier
    • yyyy-mm: 是一个时间戳,表示您的组织或单位拥有该名称的权威权。
    • reversed-domain-name: 通常是您的域名倒序。
    • identifier: 一个由您自己定义的、描述该目标的字符串。
  • tpgt (Target Portal Group Tag): 目标门户组标签,通常使用默认值 1
  • addressport: iSCSI 服务器监听的 IP 地址和端口(默认为 3260)。

让我们创建一个目标,请将下面的 iqn 中的日期和域名替换为您自己的信息。

# 进入 /iscsi 节点
/> cd /iscsi
# 创建一个名为 iqn.2025-10.com.example:storage.target1 的目标
# 注意:请务必修改这个 IQN 名称,使其对您的环境有意义且唯一
/> /iscsi> create iqn.2025-10.com.example:storage.target1

成功创建后,您会看到类似下面的输出,并且您的目标会出现在子目录中。

Created target iqn.2025-10.com.example:storage.target1.
Created TPG 1.

3 配置访问控制列表 (ACL)

为了安全,我们需要指定哪些 iSCSI 客户端(发起方)可以连接到这个目标,这通过设置 CHAP 认证 来实现。

CentOS iSCSI服务器如何配置与故障排查?-图3
(图片来源网络,侵删)
  • CHAP 互认证 (双向认证):服务器和客户端互相验证用户名和密码,这是最安全的方式。
  • CHAP 单向认证:仅客户端验证服务器,本教程将演示这种更简单的方式。
# 进入您刚创建的目标目录
/> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/
# 设置一个用于客户端认证的用户名和密码
# 用户名为 myclient,密码为 a-very-strong-password
/> /iscsi/iqn.20...target1/tpg1> set auth user=myclient password=a-very-strong-password
# (可选,推荐)设置一个用于服务器认证(反向 CHAP)的用户名和密码
/> /iscsi/iqn.20...target1/tpg1> set auth user=myclient reverse_user=myserver reverse_password=another-strong-password
# 将客户端的 IQN 添加到 ACL 列表中,允许它连接
# 请将客户端的 IQN 替换为实际值
/> /iscsi/iqn.20...target1/tpg1> set acl initiator-iqn=iqn.2025-10.com.client:myinitiator

第 3 步:创建并配置 LUN (逻辑单元号)

LUN 是客户端看到的“虚拟硬盘”,我们将使用之前准备的 /dev/sdb 磁盘来创建它。

1 准备后端存储

我们需要将物理磁盘 /dev/sdb 格式化为 block 类型,这是 targetcli 所需的格式。

# 仍在 targetcli 内部
# 进入存储池目录
/> cd backstores/block
# 创建一个名为 disk1 的 block 后端存储,指向 /dev/sdb
/> /backstores/block> create /dev/sdb disk1

2 将 LUN 绑定到目标

我们将这个 disk1 LUN 绑定到我们的 iSCSI 目标上。

# 返回到目标目录
/> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/luns
# 创建 LUN 0,并将我们刚刚创建的 disk1 绑定到它
/> /iscsi/iqn.20...target1/tpg1/luns> create /backstores/block/disk1

3 设置端口als

为了确保客户端能发现目标,我们需要设置一个端口。targetcli 通常会自动创建,但我们可以手动确认。

# 进入 portals 目录
/> cd /iscsi/iqn.2025-10.com.example:storage.target1/tpg1/portals
# 删除任何自动创建的 0.0.0.0 portal(如果存在),因为我们希望绑定到具体 IP
/> /iscsi/iqn.20...target1/tpg1/portals> delete 0.0.0.0 3260
# 创建一个新的 portal,绑定到服务器的实际 IP 地址
# 请将 192.168.1.100 替换为您服务器的 IP 地址
/> /iscsi/iqn.20...target1/tpg1/portals> create 192.168.1.100

第 4 步:保存配置并启动服务

配置完成后,我们需要保存它并让 target 服务运行起来。

1 保存配置

targetcli 提示符下,执行以下命令:

/> /iscsi> saveconfig

这会将您在内存中的所有配置持久化到硬盘上的 /etc/target/saveconfig.json 文件。

2 退出 targetcli

/> exit

3 启动并启用服务

# 启动 target 服务
sudo systemctl start target
# 设置开机自启
sudo systemctl enable target
# 检查服务状态
sudo systemctl status target

如果服务状态为 active (running),则说明服务器端配置成功。


第 5 步:配置防火墙和 SELinux

客户端无法连接,最常见的原因就是防火墙和 SELinux 阻止了流量。

1 配置防火墙 (firewalld)

# 允许 iSCSI 服务 (3260/tcp) 通过防火墙
sudo firewall-cmd --permanent --add-service=iscsi-target
# 重新加载防火墙配置以使更改生效
sudo firewall-cmd --reload

2 配置 SELinux

SELinux 默认会阻止 target 服务访问块设备,我们需要为它设置正确的布尔值。

# 启用允许 target 服务读写块设备的布尔值
sudo setsebool -P target_friendly_use_block_devices on

注意: -P 参数会永久保存该设置,执行后,SELinux 将不再阻止 target 服务。


第 6 步:客户端连接验证

iSCSI 服务器已经配置完成,您可以从另一台 Linux 客户端(发起方)进行连接。

1 发现目标

在客户端机器上,使用 iscsiadm 工具发现服务器上的目标。

# -m discovery 表示发现模式
# -t st 表示发现存储目标
# -p 192.168.1.100 是您 iSCSI 服务器的 IP 地址
sudo iscsiadm -m discovery -t st -p 192.168.1.100

如果一切正常,您应该能看到您创建的目标名称: iqn.2025-10.com.example:storage.target1

2 登录目标

使用之前设置的 CHAP 凭据登录目标。

# -m node 表示节点模式
# -T iqn.2025-10.com.example:storage.target1 是目标 IQN
# -p 192.168.1.100:3260 是服务器 IP 和端口
# --op=new 表示执行新的登录操作
# --name 客户端认证用户名
# --value 客户端认证密码
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=new --name node.session.auth.username --value=myclient
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.password --value=a-very-strong-password
# 如果设置了反向 CHAP,也需要添加
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.username_in --value=myserver
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --op=update --name node.session.auth.password_in --value=another-strong-password
# 执行登录
sudo iscsiadm -m node -T iqn.2025-10.com.example:storage.target1 -p 192.168.1.100:3260 --login

登录成功后,您会看到 successful login 的消息。

3 验证 LUN

在客户端上,检查 /dev 目录下是否出现了新的块设备。

ls /dev/sd*

您应该能看到一个新的设备,/dev/sdb(或 /dev/sdc 等,这取决于您客户端已有的磁盘),这个新设备就是您在服务器上创建的 LUN,现在您可以像使用本地硬盘一样对其进行分区、格式化和挂载。

您已经成功地在 CentOS 服务器上配置了一个功能齐全的 iSCSI 目标,客户端现在可以访问这块网络存储了,为了生产环境的稳定性和安全性,请务必:

  • 使用强密码和复杂的 IQN 名称。
  • 考虑使用 LVM 或 ZFS 作为后端存储,以获得更好的灵活性和快照功能。
  • 定期备份您的 targetcli 配置。
分享:
扫描分享到社交APP
上一篇
下一篇