Linux_iSCSI存储_搭建记录
核心原理
iSCSI通过将SCSI命令封装在TCP/IP协议中,实现基于IP网络的块存储传输。它由以下组件组成:
- Target:存储服务端,提供块设备
- Initiator:存储客户端,连接并使用远程块设备
- IQN:iSCSI限定名称,唯一标识Target和Initiator
环境准备
系统要求
- 操作系统:Linux(例如CentOS、RHEL、Debian等)
- 软件包:targetcli(用于配置iSCSI目标)
- 磁盘:本地的块设备,例如/dev/sdb1和/dev/sdc1,可以是未使用的硬盘或分区
步骤1:安装targetcli工具
在大多数Linux发行版中,你可以通过包管理器安装targetcli。
# 对于RHEL/CentOS:
yum install targetcli -y
# 对于Debian/Ubuntu:
apt install targetcli-fb -y注意:如果使用CentOS 8/RHEL 8及以上版本,可能需要启用PowerTools或AppStream仓库:
bash# CentOS 8 dnf install targetcli -y
步骤2:启动targetcli并配置后端存储
启动targetcli命令行界面:
targetcli进入存储配置目录/backstores/block,创建块设备backstore,将本地磁盘/dev/sdb1和/dev/sdc1作为后端存储:
/backstores/block> create winqj_1 /dev/sdb1
/backstores/block> create winqj_2 /dev/sdc1说明:
winqj_1和winqj_2是两个用于标识后端存储对象的名字,分别对应物理设备/dev/sdb1和/dev/sdc1。这些名称可以自定义,建议使用有意义的命名规则。
步骤3:创建iSCSI目标(IQN)
进入iSCSI配置目录:
/backstores/block> cd /iscsi创建两个iSCSI目标,分别命名为iqn.2021-07.com.miscrosft:winqj1和iqn.2021-07.com.miscrosft:winqj2,并自动分配默认端口3260:
/iscsi> create iqn.2021-07.com.miscrosft:winqj1
/iscsi> create iqn.2021-07.com.miscrosft:winqj2IQN命名规则:iSCSI限定名称(IQN)格式为
iqn.YYYY-MM.reverse.domain:name,其中:
YYYY-MM:年月,表示分配该名称的时间reverse.domain:反向域名name:特定标识符
步骤4:关联LUN与Backstore
LUN(逻辑单元号)是iSCSI中发起程序(Initiator)访问的存储单元。需要将后端存储对象(backstore)与iSCSI目标的LUN进行关联。
进入第一个iSCSI目标的LUN目录并创建LUN:
/iscsi/iqn.2021-07.com.miscrosft:winqj1/tpg1/luns> create /backstores/block/winqj_1同样地,为第二个iSCSI目标创建LUN:
/iscsi/iqn.2021-07.com.miscrosft:winqj2/tpg1/luns> create /backstores/block/winqj_2原理说明:LUN将后端存储块设备映射到iSCSI目标,每个LUN在客户端表现为一个独立的磁盘。TPG(Target Portal Group)用于组织LUN和访问控制。
步骤5:配置网络端口
默认情况下,iSCSI目标监听在所有网络接口的0.0.0.0:3260端口。为了提高安全性和可控性,我们可以绑定特定的IP地址。
- 进入iSCSI目标的网络端口配置目录并删除默认的0.0.0.0:3260端口:
/iscsi/iqn.2021-07.com.miscrosft:winqj1/tpg1/portals> delete 0.0.0.0 3260- 为两个iSCSI目标配置特定的IP地址和端口号(例如:192.168.122.131:3260):
/iscsi/iqn.2021-07.com.miscrosft:winqj1/tpg1/portals> create 192.168.122.131 3260
/iscsi/iqn.2021-07.com.miscrosft:winqj2/tpg1/portals> create 192.168.122.131 3260安全提醒:绑定特定IP可以限制iSCSI服务的访问范围,提高安全性。生产环境中建议使用专用存储网络,并配置防火墙规则。
步骤6:设置访问控制列表(ACL)
iSCSI发起程序使用IQN标识它们的身份。我们需要为发起程序创建访问控制列表(ACL),以允许它们访问iSCSI目标。
- 进入第一个iSCSI目标的ACL目录,并为发起程序
iqn.1991-05.com.microsoft:win-132和iqn.1991-05.com.microsoft:win-133创建访问权限:
/iscsi/iqn.2021-07.com.miscrosft:winqj1/tpg1/acls> create iqn.1991-05.com.microsoft:win-132
/iscsi/iqn.2021-07.com.miscrosft:winqj1/tpg1/acls> create iqn.1991-05.com.microsoft:win-133- 同样地,为第二个iSCSI目标添加相同的发起程序:
/iscsi/iqn.2021-07.com.miscrosft:winqj2/tpg1/acls> create iqn.1991-05.com.microsoft:win-132
/iscsi/iqn.2021-07.com.miscrosft:winqj2/tpg1/acls> create iqn.1991-05.com.microsoft:win-133说明:ACL(访问控制列表)基于客户端的IQN进行权限控制。只有被明确允许的客户端才能连接到iSCSI目标,这是iSCSI安全性的重要组成部分。
步骤7:保存配置并退出
- 保存所有配置:
/> saveconfig- 退出targetcli:
/> exit注意:必须执行
saveconfig命令,否则配置将在服务重启后丢失。
步骤8:启动iSCSI服务并配置自动启动
- 启动target服务:
systemctl start target- 设置服务开机自动启动:
systemctl enable target- 检查服务状态:
systemctl status target步骤9:在发起程序端测试连接
在客户端(iSCSI发起程序)上,可以使用以下命令发现和连接到iSCSI目标:
1. 安装iSCSI工具
# CentOS/RHEL
yum install iscsi-initiator-utils -y
# Debian/Ubuntu
apt install open-iscsi -y2. 发现目标
iscsiadm -m discovery -t sendtargets -p 192.168.122.1313. 登录到iSCSI目标
# 登录所有发现的目标
iscsiadm -m node --login
# 或登录特定目标
iscsiadm -m node -T iqn.2021-07.com.miscrosft:winqj1 -p 192.168.122.131:3260 --login4. 查看和使用挂载的iSCSI磁盘
lsblk
fdisk -l5. 配置自动登录(可选)
# 设置自动登录
iscsiadm -m node -T iqn.2021-07.com.miscrosft:winqj1 -p 192.168.122.131 --op update -n node.startup -v automatic
# 启动iscsi服务
systemctl start iscsi
systemctl enable iscsi参数详解
Target端常用命令
| 命令 | 功能 | 示例 |
|---|---|---|
ls | 列出当前目录内容 | /backstores/block> ls |
cd | 切换目录 | /backstores> cd /iscsi |
create | 创建对象 | /iscsi> create iqn.2021-07.com.example:target1 |
delete | 删除对象 | /iscsi> delete iqn.2021-07.com.example:target1 |
saveconfig | 保存配置 | /> saveconfig |
Initiator端常用命令
| 命令 | 功能 | 示例 |
|---|---|---|
iscsiadm -m discovery | 发现目标 | iscsiadm -m discovery -t sendtargets -p 192.168.1.100 |
iscsiadm -m node | 节点管理 | iscsiadm -m node --login |
iscsiadm -m session | 会话管理 | iscsiadm -m session |
iscsiadm -m iface | 接口管理 | iscsiadm -m iface |
注意事项
⚠️ 安全提醒:
- 在生产环境中,应使用专用存储网络(VLAN或物理隔离网络)
- 启用CHAP认证以增强安全性
- 定期备份iSCSI配置文件(
/etc/target/saveconfig.json)
⚠️ 性能优化:
- 使用Jumbo Frames(9000 MTU)提高传输效率
- 为高I/O负载场景配置多路径(Multipath I/O)
- SSD后端存储可适当调整队列深度
⚠️ 故障处理:
session failed to reconnect错误通常是网络问题- 使用
iscsiadm -m node -R重新连接所有节点- 检查防火墙设置(确保3260端口开放)
扩展应用
CHAP认证配置
# 在targetcli中设置CHAP认证
/iscsi/iqn.2021-07.com.example:target1/tpg1/acls> create iqn.1991-05.com.microsoft:win-132
/iscsi/iqn.2021-07.com.example:target1/tpg1/acls/iqn.1991-05.com.microsoft:win-132> set auth userid=username
/iscsi/iqn.2021-07.com.example:target1/tpg1/acls/iqn.1991-05.com.microsoft:win-132> set auth password=password123使用文件作为后端存储
# 创建大文件作为后端存储
dd if=/dev/zero of=/var/lib/iscsi-storage/disk1.img bs=1M count=10240
# 在targetcli中创建fileio backstore
/backstores/fileio> create disk1 /var/lib/iscsi-storage/disk1.img