16.iSCSI 服务器
iSCSI 服务介绍
SCSI(小型计算机系统接口)是一种用于连接计算机与外部设备(如硬盘、光驱、打印机等)的通用接口标准。
iSCSI(互联网小型计算机系统接口)则是将 SCSI 接口与以太网技术结合的产物,也被称为 IP-SAN。它基于 TCP/IP 协议,让 SCSI 数据可以通过网络传输,实现了 “远程存储像本地硬盘一样使用” 的效果 —— 服务器(Target)提供存储资源,客户端(Initiator)通过网络访问这些资源。
通常 iSCSI 会用 10Gb 以上的以太网以保证性能,且数据中心内的 SAN 流量一般不加密(为了性能),若需通过公网传输,可搭配 IPsec 加密。
iSCSI 架构
iSCSI服务是C/S架构。访问的iSCSI目标在客户端系统上显示为本地且未格式化的SCSI快设备,等同于通过SCSI布线、FC直连或FC交换光线连接的设备。
-
Initiator(发起者):iSCSI 客户端,通常是软件(也可用硬件 HBA 卡),需要有唯一标识(IQN)。
-
Target(目标):iSCSI 服务器端的存储资源,也需要唯一标识(IQN),可提供一个或多个块设备(LUN)。
-
IQN(iSCSI 唯一名称):全球唯一的标识,格式为iqn.YYYY-MM.com.reversed.domain:name_string
- 示例:
iqn.2025-08.cloud.bq.server:disk1(2025-08 是日期,cloud.bq.server 是反向域名,disk1 是自定义名称)
- YYYY-MM,年和月。示例,2020年6月为2020-06。该日期有助于确保IQN唯一性。
- com.reversed.domain,反向域名。 例如,server.redhat.fun的反向域名为cloud.bq.www。
- name_string,用于标识您管理的特定目标。 如果服务器只具有一个目标,则有时会省略此名称。
-
Portal,指定服务器监听的ip地址和端口,例如,172.25.250.50:3260。
-
LUN(Logical Unit Number),代表Target提供的块设备。 每个目标可以提供一个或多个LUN。
-
ACL(Access Control List),使用Initiator的IQN限制客户端访问Target。
-
TPG(Target Portal Group),是目标的完整配置,包括Portal,LUN和ACL。 几乎所有目标都使用一个TPG,但是高级配置有时可能会定义多个TPG。
-
discovery,查询服务器上有Target列表。
-
login,向Target验证,验证通过后即可以使用Target服务器提供的块设备。
配置 iSCSI Targets
配置 iSCSI Targets需要安装两个核心工具:
- targetd,服务端软件。
- targetcli,用于配置targetd服务。
# 安装软件
[root@server ~]# yum install -y targetd targetcli
# 启用并启动服务
[root@server ~]# systemctl enable –now target # 注意服务名是target而非targetd
# 配置防火墙
[root@server ~]# firewall-cmd –permanent –add-service=iscsi-target
[root@server ~]# firewall-cmd –reload
常用工具:targetcli 用法
targetcli是配置 iSCSI Target 的核心工具,支持交互模式(进入 shell 操作)和非交互模式(直接执行命令)。
- 交互模式:输入targetcli进入,支持ls(查看配置)、cd(切换目录)、create(创建资源)等命令,类似文件系统操作。
- 非交互模式:直接在targetcli后接命令(如targetcli /backstores/block create myblock1 /dev/sdb)。
在以下示例中,使用ls命令显示当前布局。
[root@server ~]# targetcli # 进入交互模式
targetcli shell version 2.1.fb49
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ................................................................. [...]
o- backstores ...................................................... [...]
| o- block .......................................... [Storage Objects: 0]
| o- fileio ......................................... [Storage Objects: 0]
| o- pscsi .......................................... [Storage Objects: 0]
| o- ramdisk ........................................ [Storage Objects: 0]
o- iscsi .................................................... [Targets: 0]
o- loopback ................................................. [Targets: 0]
/>
配置存储后端(backstore对象)
backstore类型:
- block:本地块设备(如硬盘/dev/sdb、分区、逻辑卷)
- fileio:本地文件(作为磁盘镜像)
- pscsi:物理 SCSI 设备(直接共享物理设备)
- ramdisk:内存盘(数据不持久,重启丢失)
要使用targetcli创建后备存储,请使用其create命令。 该命令的行为取决于您在配置树中的当前位置。
示例:
/> cd /backstores/block # 切换到block类型的存储后端目录
/backstores/block> create myblock1 /dev/sdb # 创建名为myblock1的存储后端,关联/dev/sdb
Created block storage object myblock1 using /dev/sdb.
等同于
/> /backstores/block create myblock1 /dev/sdb #一种是进入到目录中,一种在根目录下操作
Created block storage object myblock1 using /dev/sdb.
命令说明:
- 语法:/backstores/<类型> create <名称> <实际存储路径>
- 作用:将本地存储资源(如/dev/sdb)封装为 iSCSI 可共享的存储对象。
创建 Target 的 IQN
在/iscsi伪目录中,创建IQN,将您选择的IQN名称作为其第一个参数,每个 Target 必须有唯一的 IQN,用于标识自身。。
/> cd /iscsi
/iscsi> create iqn.2025-08.cloud.bq.server:disk1 #创建硬盘的一个标识(格式需符合规范),如若不会写可以输入create回车会产生示例
Created target iqn.2025-08.cloud.bq.server:disk1.
Created TPG 1. # 自动创建TPG 1
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260. # 自动创建默认门户
/iscsi> ls
o- iscsi ...................................................... [Targets: 1]
o- iqn.2025-08.cloud.bq.server:disk1 ............................... [TPGs: 1]
o- tpg1 ......................................... [no-gen-acls, no-auth]
o- acls .................................................... [ACLs: 0]
o- luns .................................................... [LUNs: 0]
o- portals .............................................. [Portals: 1]
o- 0.0.0.0:3260 ............................................... [OK]
命令说明:
- 语法:/iscsi create <IQN>
- 作用:创建 Target 并自动生成 TPG 和默认门户(监听所有 IP 的 3260 端口)。
关联 LUN(将存储后端分配给 Target)
LUN 是 Target 对外提供的块设备,需关联到之前创建的存储后端。
/> cd /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/luns # 切换到当前Target的LUN配置目录
/iscsi/iqn.20...sk1/tpg1/luns> create /backstores/block/myblock1 # 将存储后端myblock1关联为LUN(默认LUN编号为0)
Created LUN 0.
命令说明:
- 语法:/iscsi/<IQN>/tpg1/luns create <存储后端路径>
- 作用:将存储后端资源分配给 Target,客户端登录后可看到该 LUN 作为块设备。
配置 ACLS
通过客户端的 IQN 设置访问控制,只有在 ACL 中的客户端才能登录 Target。
/> cd /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/acls # 切换到当前Target的ACL配置目录
/iscsi/iqn.20...sk1/tpg1/acls> create iqn.2025-08.cloud.bq.client ## 允许IQN为iqn.2025-08.cloud.bq.client的客户端访问
Created Node ACL for iqn.2025-08.cloud.bq.clien
Created mapped LUN 0. # 自动映射LUN 0到该客户端
命令说明:
- 语法:/iscsi/<IQN>/tpg1/acls create <客户端IQN>
- 作用:仅允许指定 IQN 的客户端访问当前 Target。
配置 Portal(指定监听 IP 和端口)
默认 Portal 监听所有 IP(0.0.0.0),建议改为服务器的具体 IP(增强安全性)。
/> cd /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/portals/ # 切换到当前Target的Portal配置目录
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260 ## 删除默认的0.0.0.0:3260监听
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 10.1.8.10 3260 # 设置监听指定IP(如10.1.8.10)和端口(默认3260)
Using default IP port 3260
Created network portal 10.1.8.10:3260.
命令说明:
- 语法 1(删除):/iscsi/<IQN>/tpg1/portals delete <IP> <端口>
- 语法 2(创建):/iscsi/<IQN>/tpg1/portals create <IP> [端口](端口默认 3260)
- 作用:指定服务器监听的 IP 和端口,仅允许通过该 IP 访问 iSCSI 服务。
保存配置
退出targetcli shell时,该命令将配置保存在/etc/target/saveconfig.json文件中。
/> exit # 退出交互模式,自动保存配置(默认auto_save_on_exit=true)
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json # 配置文件路径
非交互式管理 Targets
若用非交互命令配置,需手动执行保存
[root@server ~]# targetcli /backstores/block create myblock1 /dev/sdb # 创建存储后端
Created block storage object myblock1 using /dev/sdb.
[root@server ~]# targetcli /iscsi create iqn.2025-08.cloud.bq.server:disk1 # 创建Target IQN
Created target iqn.2025-08.cloud.bq.server:disk1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
[root@server ~]# targetcli /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/luns \\
> create /backstores/block/myblock1 # 关联LUN
Created LUN 0.
[root@server ~]# targetcli /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/acls \\
> create iqn.2025-08.cloud.bq.client # 配置ACL(允许客户端IQN)
Created Node ACL for iqn.2025-08.cloud.bq.client
Created mapped LUN 0.
[root@server ~]# targetcli /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/portals \\
> delete 0.0.0.0 3260 # 修改Portal(删除默认)
Deleted network portal 0.0.0.0:3260
[root@server ~]# targetcli /iscsi/iqn.2025-08.cloud.bq.server:disk1/tpg1/portals \\
> create 10.1.8.10 3260 # 设置监听指定IP
Using default IP port 3260
Created network portal 172.25.250.10:3260.
[root@server ~]# targetcli saveconfig # 手动保存配置
Configuration saved to /etc/target/saveconfig.json
提示:与交互式使用targetcli不同,命令行模式必须显式运行saveconfig子命令以保存配置。
访问 iSCSI 存储(客户端配置)
iSCSI 启动器通常以软件方式实现。 使用基于软件的iSCSI启动器需要连接到具有足够带宽的现有以太网网络,以承载存储流量。
您也可以使用硬件启动器-主机总线适配器(HBA),从而减轻了其他系统资源的负担。
客户端(Initiator)需通过软件工具访问 Target,步骤如下:
步骤 1:安装客户端工具
客户端需安装iscsi-initiator-utils,包含 iSCSI 客户端服务和配置工具(/etc/iscsi/iscsid.conf和**/etc/iscsi/initiatorname.iscsi**配置文件)。
[root@client ~]# yum install -y iscsi-initiator-utils
步骤 2:配置客户端 IQN
客户端必须有唯一 IQN(与服务器 ACL 中允许的 IQN 一致),配置文件为/etc/iscsi/initiatorname.iscsi,存储到该文件中。管理员通常需要更改该名称。
[root@client ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-08.cloud.bq.client # 需与服务器ACL中配置的IQN一致
修改后重启客户端服务:
/etc/iscsi/iscsid.conf文件包含您连接的目标的默认设置。 这些设置包括iSCSI超时,重试以及用于身份验证的用户名和密码参数。
软件包安装会自动配置iscsid服务,以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当您修改启动程序的配置文件时,请重新启动iscsid服务。
[root@client ~]# systemctl restart iscsid # 使IQN生效
步骤 3:发现 Target(扫描服务器存储)
通过iscsiadm工具扫描服务器,获取可访问的 Target 列表。
# 语法:iscsiadm -m discovery -t st -p <服务器IP[:端口]>
[root@client ~]# iscsiadm -m discovery -t st -p 10.1.8.10 # 服务器IP为10.1.8.10,端口默认3260
10.1.8.10:3260,1 iqn.2025-08.cloud.bq.server:disk1 # 发现的Target信息
命令参数说明:
- -m discovery:指定模式为 “发现 Target”
- -t st:指定发现类型为 “发送目标”(最常用)
- -p:指定服务器的 Portal(IP [: 端口])
步骤 4:登录 Target(挂载存储)
发现 Target 后,登录即可使用其提供的块设备。
# 语法:iscsiadm -m node -T <Target的IQN> -p <服务器IP[:端口]> -l
[root@client ~]# iscsiadm -m node -T iqn.2025-08.cloud.bq.server:disk1 -p 10.1.8.10:3260 -l
Logging in to [iface: default, target: iqn.2025-08.cloud.bq.server:disk1, portal: 10.1.8.10,3260]
Login to [iface: default, target: iqn.2025-08.cloud.bq.server:disk1, portal: 10.1.8.10,3260] successful.
命令参数说明:
- -m node:指定模式为 “管理 Target 节点”
- -T:指定要登录的 Target 的 IQN
- -p:指定服务器的 Portal
- -l:表示 “登录”(login)
步骤 5:验证存储设备
登录成功后,Target 提供的 LUN 会作为本地块设备出现(如/dev/sdc),可通过以下命令查看:
# 查看iSCSI会话及关联的设备
[root@client ~]# iscsiadm -m session -P 3 # -P 3表示详细输出
...
Attached scsi disk sdc State: running # 这里sdc即为远程存储设备
# 或查看块设备列表
[root@client ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdc 8:32 0 10G 0 disk # 新出现的iSCSI设备
步骤 6:使用存储设备
若设备为空,可格式化后挂载使用(注意:禁止多客户端同时挂载非集群文件系统,会导致数据损坏)。
# 格式化设备(以xfs为例)
[root@client ~]# mkfs.xfs /dev/sdc
# 创建挂载点
[root@client ~]# mkdir /data/iscsi
# 临时挂载
[root@client ~]# mount /dev/sdc /data/iscsi
步骤 7:持久化挂载(开机自动挂载)
为避免重启后需手动挂载,需配置/etc/fstab,但需注意:
- 用 UUID 而非设备名(设备名可能变动)
- 加_netdev选项(确保网络就绪后再挂载)
# 1. 获取设备UUID
[root@client ~]# blkid /dev/sdc
/dev/sdc: UUID="3d49d1dd-8209-43a1-a106-4de328762e00" TYPE="xfs"
# 2. 编辑/etc/fstab,添加如下行
[root@client ~]# vim /etc/fstab
UUID="3d49d1dd-8209-43a1-a106-4de328762e00" /data/iscsi xfs defaults,_netdev 0 0
# 3. 确保iscsi服务开机自启(默认已开启)
[root@client ~]# systemctl enable iscsi
断开 Target 连接
若需停止使用远程存储,按以下步骤操作:
# 1. 卸载挂载点
[root@client ~]# umount /data/iscsi
# 2. 从Target注销(退出登录)
# 语法:iscsiadm -m node -T <Target IQN> -p <服务器IP:端口> -u
[root@client ~]# iscsiadm -m node -T iqn.2025-08.cloud.bq.server:disk1 -p 10.1.8.10:3260 -u
# 3. 删除本地记录(避免开机自动登录)
# 语法:iscsiadm -m node -T <Target IQN> -p <服务器IP:端口> -o delete
[root@client ~]# iscsiadm -m node -T iqn.2025-08.cloud.bq.server:disk1 -p 10.1.8.10:3260 -o delete
命令参数说明:
- -u:表示 “注销”(logout)
- -o delete:表示 “删除” 本地节点记录
故障处理
登录失败:IQN 不匹配
现象:发现 Target 成功,但登录时提示权限不足。
原因:客户端 IQN 未在服务器 ACL 中配置。
解决:
确认客户端/etc/iscsi/initiatorname.iscsi中的 IQN 正确。
重启客户端iscsid服务清除缓存:
[root@client ~]# systemctl stop iscsid
[root@client ~]# iscsiadm -m discovery -t st -p 10.1.8.10 # 重新发现
[root@client ~]# iscsiadm -m node -T iqn.2025-08.cloud.bq.server:disk1 -l # 重新登录
如涉及版权问题,请联系作者处理!!!!!!
评论前必须登录!
注册