Orange的运维学习日记--37.iSCSI详解与服务部署

发布于:2025-08-10 ⋅ 阅读:(10) ⋅ 点赞:(0)

Orange的运维学习日记–iSCSI 服务介绍

SCSI(Small Computer System Interface)是一种用于计算机与存储设备(如硬盘、光驱、磁带机、打印机)之间交换命令和数据的标准接口

iSCSI(Internet Small Computer System Interface)将 SCSI 命令封装到 TCP/IP 包中,使得远程存储可以通过以太网像本地磁盘一样被访问

默认情况下 iSCSI 使用 TCP 端口 3260,可以部署在专用存储网络中以保证性能和安全;在跨地域或混合云环境中常结合 IPsec、CHAP 等技术加密和认证存储流量


iSCSI 架构

iSCSI 采用客户端/服务器(Initiator/Target)模式

在 Initiator 与 Target 之间建立会话后,Initiator 发起 SCSI 命令,Target 负责执行并返回结果

在这里插入图片描述

组件说明

  • Initiator
    软件或硬件形式的客户端,负责发起 iSCSI 会话和发送 SCSI 命令
    常见软件启动器为 iscsi-initiator-utils,硬件形式为专用 iSCSI HBA
  • Target
    存储端的 iSCSI 实例,提供一个或多个逻辑单元(LUN)用于数据读写
  • IQN(iSCSI Qualified Name)
    全球唯一标识符,格式为 iqn.YYYY-MM.reversed.domain:name
    • YYYY-MM 为注册该域名的年与月
    • reversed.domain 为域名倒序,例如 com.example
    • name 为该 Target 或 Initiator 的自定义后缀
  • Portal
    Target 侦听的 IP 地址和端口,支持多路径和多网卡冗余
  • LUN(Logical Unit Number)
    目标上的块设备序号,每个 LUN 对应一个后端存储对象
  • ACL(Access Control List)
    通过 Initiator 的 IQN 控制访问权限,防止未授权客户端连接
  • TPG(Target Portal Group)
    一个 Target 配置集,包含多个 Portal、LUN、ACL,用于高可用和负载均衡
  • 发现(Discovery)
    Initiator 查询 Target 列表的操作
  • 登录(Login)
    Initiator 与 Target 完成认证并建立数据通道的步骤

配置 iSCSI Target(服务器端)

以下示例使用通用域 com.example 和主机名 storage1

安装和启动服务

yum install -y targetd targetcli

systemctl enable --now target

firewall-cmd --permanent --add-service=iscsi-target
firewall-cmd --reload
  • targetd 提供后台服务
  • targetcli 是交互式和脚本化管理工具
  • 开放防火墙中的 iscsi-target 服务,以便 Initiator 能够发现和连接

后端存储对象(Backstore)

Backstore 定义了 Target 实际使用的存储资源

  • block:使用系统块设备(磁盘、分区、逻辑卷)
  • fileio:普通文件,模拟磁盘映像
  • pscsi:物理 SCSI 设备直接透传
  • ramdisk:基于内存的临时存储

创建一个基于块设备 /dev/sdb 的存储对象:

targetcli /backstores/block create disk1 /dev/sdb

此命令会在 /backstores/block 下创建名为 disk1 的存储对象

创建 Target 和默认 TPG

targetcli /iscsi create iqn.2025-07.com.example:storage1.disk1
  • 自动生成 TPG 1
  • 默认 Portal 监听 0.0.0.0:3260
  • 默认无 ACL、无认证

配置 LUN

将前面创建的后端存储映射为 LUN 0

targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1/luns create /backstores/block/disk1

配置 ACL

只允许特定 Initiator IQN 访问该 LUN

targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1/acls create iqn.2025-07.com.example:client1

系统会自动映射 LUN 0 给该 ACL 条目

配置 Portal

建议将 iSCSI 流量隔离到专用网络

删除默认 Portal,添加私有网段 IP

targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1/portals delete 0.0.0.0 3260
targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1/portals create 192.168.10.5 3260

启用 CHAP 认证(可选)

在某些环境中需要双向 CHAP 增加安全性

targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1 set attribute authentication=1
targetcli /iscsi/iqn.2025-07.com.example:storage1.disk1/tpg1/chap create username=storage_user password=strongpass

在客户端 iscsid.conf 中填写相同的用户名和密码

保存配置

退出时自动保存或显式执行

targetcli saveconfig

配置会写入 /etc/target/saveconfig.json,重启后继续生效


访问 iSCSI 存储(客户端)

安装和配置 Initiator

yum install -y iscsi-initiator-utils

vim /etc/iscsi/initiatorname.iscsi
# 修改 InitiatorName=iqn.2025-07.com.example:client1

systemctl enable --now iscsid
systemctl enable --now iscsi
  • initiatorname.iscsi 存放客户端 IQN,需与服务器 ACL 一致
  • iscsid 服务管理 iSCSI 会话
  • iscsi 服务负责自动发现和登录

发现 Target

通过 Portal IP 执行发现操作,将 Target 信息写入 /var/lib/iscsi/nodes

iscsiadm -m discovery -t sendtargets -p 192.168.10.5[:3260]

如果使用 CHAP,需在 /etc/iscsi/iscsid.conf 中配置认证选项

登录 Target

使用发现的 IQN 与 Portal 登录

iscsiadm -m node -T iqn.2025-07.com.example:storage1.disk1 -p 192.168.10.5[:3260] -l

登录成功后,系统会自动识别新的 SCSI 块设备

lsblk --fs
dmesg | grep -i scsi

格式化和分区

在单机环境中可以使用传统文件系统

mkfs.xfs /dev/sdc

如果多台主机需要并发访问,请使用 GFS2、OCFS2 等集群文件系统避免数据损坏

持久化挂载

/etc/fstab 中使用 UUID 和 _netdev 选项

UUID=abcdef12-3456-7890-abcd-ef1234567890 /mnt/storage xfs defaults,_netdev 0 0
  • _netdev 确保网络可用后再挂载
  • 建议使用 noauto,x-systemd.automount 配合 systemd 优雅挂载

断开和清理

  1. 卸载所有使用中的文件系统

  2. 注销当前会话

    iscsiadm -m node -T iqn.2025-07.com.example:storage1.disk1 -u
    
  3. 删除本地记录以防重启后自动登录

    iscsiadm -m node -T iqn.2025-07.com.example:storage1.disk1 -o delete
    

性能与安全最佳实践

  • 将 iSCSI 流量隔离到物理或逻辑专用网络,提高吞吐和稳定性
  • 启用多路径 I/O(MPIO)以实现链路冗余和负载均衡
  • 启用 CHAP 或 IPsec 提供认证与加密防止中间人攻击
  • 使用适当队列深度和分片大小调整,可结合 iscsiadm 或 HBA 驱动优化延迟
  • 定期检查并更新 ACL,避免遗留未经授权的 Initiator
  • 将大容量或关键 LUN 划分到逻辑卷或 RAID 组,提高管理灵活性和可靠性

常见故障排除

  • 登录失败

    • 确认 Initiator IQN 与 Target ACL 匹配
    • 检查网络连通性、端口防火墙和 MTU 设置
  • 发现不到 Target

    • 确认 Portal IP 和端口无误
    • 检查服务器上 target 服务状态和监听地址
  • 设备丢失或重命名

    • 在客户端使用 UUID 或 /dev/disk/by-path/*iscsi* 持久化引用
    • 配置 HCTL(主机-通道-目标-LUN)固定路径,防止设备序号变更
  • 性能不稳定

    • 启用 MPIO
    • 调整 queue_depthmax_sectors_kb 等参数
    • 使用 Jumbo Frame 减少数据包开销
  • 确认 Portal IP 和端口无误

    • 检查服务器上 target 服务状态和监听地址
  • 设备丢失或重命名

    • 在客户端使用 UUID 或 /dev/disk/by-path/*iscsi* 持久化引用
    • 配置 HCTL(主机-通道-目标-LUN)固定路径,防止设备序号变更
  • 性能不稳定

    • 启用 MPIO
    • 调整 queue_depthmax_sectors_kb 等参数
    • 使用 Jumbo Frame 减少数据包开销

确保在修改任何配置后保存并重启相应服务,以使更改生效


网站公告

今日签到

点亮在社区的每一天
去签到