iSCSI-服务搭建

介绍

SCSI (Small Computer System Interface) 是一种用于连接计算机系统与外部设备(如硬盘驱动器, 磁带机, 光驱等) 进行数据传输和控制的标准接口.

而 iSCSI (Internet Small Computer System Interface) 则是把 SCSI 协议封装到 TCP/IP 协议栈中,通过网络传输 SCSI 命令和数据. 这使得远程计算机可以通过 IP 网络访问远程存储设备.

一些概念

NAS

NAS (Network Attached Storage) 是一种存储设备, 通过网络协议以提供文件级别的数据存储服务, 常见的协议如 NFS, SMB/CIFS.

可以把 NAS 理解为一个 file server.

SAN

SAN (Storage Area Network), 是一种专用高速网络, 用于连接存储设备和服务器. 其通过光纤或以太网等传输数据, 可用于多个服务器共享存储设备. 常见接口为 SCSI.

可以把 SAN 视为一个外接的存储设备, 可以提供磁盘.

将 SAN 应用到局域网外, 则通过使用 iSCSI.

RAID

RAID (Redundant Array of Independent Disks), 是一种数据存储技术, 通过将多个独立的硬盘驱动器组合成一个逻辑存储单元, 提供数据冗余和性能增强.

不同的 RAID 级别 (如 RAID 0, RAID 1, RAID 5等) 提供不同的数据保护级别和性能特性

iSCSI 相关概念

iSCSI 架构将存储装置和使用的主机分为两个部分:

  • iSCSI target
  • iSCSI initiator

示意图:

iSCSI target

存储设备端, 存放磁盘或 RAID 的设备, 目前也能够将 Linux 主机仿真成 iSCSI target.

iSCSI initiator

能够使用 target 的客户端, 通常是服务器.

iSCSI target 的设置

需要安装 scsi-target-utils, 其能够将 Linux 系统仿真成 iSCSI target:

1
dnf install -y scsi-target-utils

这个软件包提供的重要文件有:

  • /etc/tgt/targets.conf, 主配置文件, 设置要分享的磁盘格式与哪几块
  • /usr/sbin/tgt-admin, 可在线查询, 删除 target 等功能
  • /usr/sbin/tgt-setup-lun, 建立 target 以及设置分享的磁盘和可使用的客户端等
  • /usr/sbin/tgtadm, 用于手动直接管理 (可使用配置文件取代)
  • /usr/sbin/tgtd, 提供 iSCSI target 服务的主程序
  • /usr/sbin/tgtimg, 用于搭建预计共享的映像文件设备

可设置分享的磁盘类型

  • dd 命令创建的文件
  • 单一的分区
  • 单一完整的分区
  • 磁盘阵列
  • 软件磁盘阵列
  • LVM 设置的 LV 设备

iSCSI target 文件名

iSCSI target 都是以 iqn (iSCSI Qualified Name) 开头, 命名一般遵循:

1
iqn.yyyy-mm.<reversed domain name>:identifier

identifier 则为自己取的名称.

如:

1
iqn.2011-08.vbird.centos:vbirddisk

一个 target 可以拥有多个磁盘装置, 每个在同一个 target 上的磁盘可以为其定义逻辑单位编号 (Logical Unit Number, LUN)

iSCSI initiator 就是和 target 协调后取得 LUN 的存储权.

/etc/tgt/targets/conf 的设置

语法如:

1
2
3
4
<target iqn.相关target名称>
backing-store /to/虚拟设备/完整路径1
backing-store /to/虚拟设备/完整路径2
</target>

示例:

1
2
3
4
<target iqn.2011-08.vbird.centos:vbirddisk>
backing-store /srv/iscsi/disk1.img
backing-store /dev/vda2
</target>

backing-store 以外, 还有:

  • direct-store, 只有当整个磁盘用于分享时才会用到
  • initiator-address, 限制客户端的来源
  • incominguser, 设置账目密码才能访问
  • write-cache [off|on], 是否设置 cache

假设仅允许 192.168.100.0/24 网段, 且有账户密码分别为 vbirduser, vbirdpasswd, 则配置为:

1
2
3
4
5
6
7
<target iqn.2011-08.vbird.centos:vbirddisk>
backing-store /srv/iscsi/disk1.img
backing-store /dev/vda2
initiator-address 192.168.100.0/24
incominguser vbirduser vbirdpasswd
write-cache off
</target>

启动 iSCSI, 查看信息以及防火墙设置

1
systemctl enable --now tgtd

查看端口

1
ss -ntpl

查看 target 相关信息, 以及 LUN

1
tgt-admin --show

防火墙设置

1
firewall-cmd --add-service=iscsi-target --permanent

iSCSI initiator 的设置

需要安装 scsi-initiator-utils, 其能够挂载来自 target 的磁盘到 Linux 主机上:

1
dnf install -y scsi-initiator-utils

重要文件有:

  • /etc/iscsi/iscsid.conf, 主配置文件, 用于连接到 iSCSI target
  • /usr/sbin/iscsid, 启动 iSCSI initiator 的主程序
  • /usr/sbin/iscsiadm, 管理 iSCSI initiator

设置登录用的账户密码

修改 /etc/iscsi/iscsi.conf 文件:

1
2
3
4
node.session.auth.username = vbirduser
node.session.auth.password = vbirdpasswd
discovery.sendtargets.auth.username = vbirduser
discovery.sendtargets.auth.password = vbirdpasswd

侦测 target 的相关数据

1
iscsiadm -m discovery -t sendtargets -p IP:port

侦测到的信息会存储到 /var/lib/iscsi/nodes/ 目录下.

1
ll -R /var/lib/iscsi/nodes/

根据侦测的数据启动 target

1
systemctl start iscsid

显示目前系统上所有的 target 数据

1
iscsiadm -m node

登入某一个 target

1
2
iscsiadm -m node -T target名称 --login
fdisk -l

更新/删除/新增 target 数据

登出一个 target

1
2
3
iscsiadm -m node -T targetname --logout
iscsiadm -m node -o [delete|new|update] -T targetname
systemctl restart iscsid

基于命令行的 target 配置

主要用 tgtadm 命令, 启用于管理 target.

创建一个 target

1
tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2023-04.com.openeuler:target1
  • --lld iscsi, “lower-level driver”, 指定使用 ISCSI 作为底层存储驱动
  • --mode target, 表示要操作的对象是 ISCSI 存储目标
  • --op new, “operation”, 表示要执行的具体操作是 “new”, 即创建一个新的目标
  • --tid 1, “target id”, 指定创建目标的 ID 为 1
  • --targetname, 指定 target 名称

查看创建的 target 信息

1
tgtadm -L iscsi -m target -o show

给一个 target 添加新的 LUN

1
tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/vdb
  • --tid 1: 指定我们要在 ID 为 1 的 ISCSI 存储目标上创建这个逻辑单元
  • --lun 1: 为新创建的逻辑单元指定一个逻辑单元号为 1
  • --backing-store /dev/vdb: 指定这个逻辑单元的后备存储设备是 /dev/vdb, 这个设备可以是一个物理磁盘分区或者一个逻辑卷

target 共享配置

1
tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 192.168.1.21
  • --initiator-address 192.168.1.21: 指定要绑定的 ISCSI initiator 的 IP 地址为 192.168.1.21

注意 IP 共享为 target 级别的.

删除允许连接的 initiator 地址

1
tgtadm --lld iscsi --mode target --op unbind --tid 1 --initiator-address 192.168.1.21

删除指定 tid 下的 lun

1
2
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
tgtadm --lld iscsi --mode target --op show

删除 target

1
tgtadm --lld iscsi --mode target --op delete --tid 1

基于命令行的 initiator 操作

发现 target

1
iscsiadm -m discovery -t sendtargets -p 192.168.1.3
  • -m, “mode”, 实际上是指定 operation, 这里是发现
  • -t, “type”, 只有 discovery mode 需要用到, 表明查找的类型是什么
  • -p, “portal”, 要查找的 ipv4 地址和端口

关联所有发现的 targets

1
iscsiadm -m node -L all
  • -m node, 表示对已发现的 iSCSI 节点操作
  • -L all, “login all”, 登入所有节点

之后可用:

1
fdisk -l

查看.

登出 target

1
iscsiadm -m node -T iqn.2023-04.com.openeuler:target1 -u
  • -T, “targetname”, 指定 targetname 以操作
  • -u, “logout”, 登出操作

越过发现指定连接

1
iscsiadm -m node -T iqn.2023-04.com.openeuler:target1 -p 192.168.1.3 -l
  • -l, “login”

查看连接状态

1
iscsiadm -m session

启用自动登录

1
2
iscsiadm -m node -T iqn.2023-04.com.openeuler:target2 -p 192.168.1.3 --op update -n node.startup -v
automatic

iSCSI-服务搭建
http://example.com/2024/03/05/iSCSI-服务搭建/
作者
Jie
发布于
2024年3月5日
许可协议