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 优雅挂载
断开和清理
卸载所有使用中的文件系统
注销当前会话
iscsiadm -m node -T iqn.2025-07.com.example:storage1.disk1 -u
删除本地记录以防重启后自动登录
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)固定路径,防止设备序号变更
- 在客户端使用 UUID 或
性能不稳定
- 启用 MPIO
- 调整
queue_depth
、max_sectors_kb
等参数 - 使用 Jumbo Frame 减少数据包开销
确认 Portal IP 和端口无误
- 检查服务器上
target
服务状态和监听地址
- 检查服务器上
设备丢失或重命名
- 在客户端使用 UUID 或
/dev/disk/by-path/*iscsi*
持久化引用 - 配置 HCTL(主机-通道-目标-LUN)固定路径,防止设备序号变更
- 在客户端使用 UUID 或
性能不稳定
- 启用 MPIO
- 调整
queue_depth
、max_sectors_kb
等参数 - 使用 Jumbo Frame 减少数据包开销
确保在修改任何配置后保存并重启相应服务,以使更改生效