iSCSI 网络存储服务从入门到精通
为什么需要多路径?为了提高可靠性和性能。就像去一个地方有两条路,一条堵了或断了,可以立刻走另一条。多路径为iSCSI存储配置多个网络连接(多个Portal),避免单点故障。3.1 核心概念:Linux上实现多路径的软件。故障切换 (Failover):主路径故障时,自动切换到备用路径。负载均衡 (Load Balancing):在多条活动路径上分配I/O流量(需要存储设备支持)。3.2 快速配置多
iSCSI 网络存储服务从入门到精通
引言:什么是iSCSI?一个生活化的比喻
想象一下,你的电脑(客户端)需要通过家里的网络(以太网),去访问和使用放在书房另一头的一个大硬盘(服务器)。这个硬盘插在一个特殊的“网络硬盘盒”里,你的电脑上需要安装一个对应的“驱动软件”。iSCSI 就是实现这一整套过程的技术标准和协议。
简单说:iSCSI = 把SCSI硬盘指令“打包” + 通过TCP/IP网络“运输”。它让你感觉那个远程的大硬盘就像是直接插在自己电脑上一样,可以分区、格式化、存文件。
第一部分:核心概念大白话
1.1 基础角色(先记住这两个!)
- Target(目标端 / 服务器端):
- 生活化理解:那个提供存储空间的“网络硬盘盒”或“存储服务器”。
- 专业表述:iSCSI服务端,负责导出(提供)一个或多个块设备(如硬盘、分区、逻辑卷)给网络上的客户端使用。
- Initiator(发起端 / 客户端):
- 生活化理解:你电脑上安装的那个用来连接和使用“网络硬盘”的“驱动软件”。
- 专业表述:iSCSI客户端,负责发起连接请求,并将在服务器端发现的远程块设备映射到本地,使其看起来像一块本地硬盘。
一句话关系:Initiator(客户端) 去连接和访问 Target(服务器端) 提供的存储空间。
1.2 关键术语解析
理解了角色,再来看看它们互动时需要哪些“身份证”和“规则”。
- IQN (iSCSI Qualified Name):
- 这是什么:全球唯一的名称,相当于iSCSI世界里的“身份证号”。
- 格式:
iqn.年份-月份.反向域名:自定义名称- 例如:
iqn.2024-08.com.example.server:datadisk
- 例如:
- 谁需要:Target 和 Initiator 都必须有自己唯一的IQN。客户端连接时,服务器会核对客户端的IQN是否在允许访问的名单里。
- LUN (Logical Unit Number):
- 这是什么:逻辑单元号。一个Target可以对外提供好几块“硬盘”(逻辑单元),LUN就是给这些“硬盘”编的号(LUN 0, LUN 1…)。
- 生活化理解:就像一个硬盘盒(Target)有好几个硬盘插槽(LUN),每个插槽里有一块硬盘。
- Portal(门户):
- 这是什么:Target监听的网络地址和端口,告诉客户端“来哪里找我”。
- 格式:
IP地址:端口号(默认端口是3260)。 - 示例:
10.1.8.10:3260
- ACL (Access Control List, 访问控制列表):
- 这是什么:服务器端的一道“安检门”名单。只有IQN在这个名单里的客户端,才被允许连接和访问存储。
- 作用:保障存储安全,防止未经授权的访问。
小结一下流程:
- 服务器端(Target)配置好一块硬盘(创建LUN),设置好监听地址(Portal),并生成自己的IQN。
- 服务器端制作一个“允许访问的客户名单”(ACL),里面写上允许连接的客户端IQN。
- 客户端(Initiator)配置自己的IQN,然后去服务器地址(Portal)“敲门”发现可用的Target。
- 客户端出示自己的IQN(登录),服务器核对ACL名单,匹配成功则“放行”。
- 客户端成功将服务器的远程硬盘映射为本地的一块新硬盘(如
/dev/sdb),后续就可以像使用本地硬盘一样操作它。
第二部分:实战配置指南(一步一步来)
让我们分服务器端和客户端两步,完成一个典型的iSCSI存储共享。
2.1 服务器端(Target)配置
目标:将本地的一块硬盘(例如/dev/sdb)通过iSCSI共享出去。
第1步:安装软件并启动服务
bash
# 安装必要的软件包
yum install -y targetcli targetd
# 启动并设置开机自启
systemctl enable --now target
# 配置防火墙,开放iSCSI服务端口(默认3260)
firewall-cmd --permanent --add-service=iscsi-target
firewall-cmd --reload
第2步:使用 targetcli 工具进行配置
targetcli 是一个交互式配置工具,结构像文件树。我们按顺序“创建”所需组件。
-
进入配置界面
bash
targetcli你会看到类似这样的结构:
text
/> ls o- / ................................................................. [...] o- backstores ...................................................... [...] # 后备存储(真实的硬盘/文件) | o- block .......................................... [Storage Objects: 0] | o- fileio ......................................... [Storage Objects: 0] o- iscsi .................................................... [Targets: 0] # iSCSI目标 -
创建后备存储对象 (backstore):告诉服务器“我要共享哪块物理存储”
bash
# 进入backstores/block路径,创建一个名为`my_disk`的存储对象,对应物理硬盘/dev/sdb /> cd /backstores/block /backstores/block> create my_disk /dev/sdb Created block storage object my_disk using /dev/sdb. -
创建iSCSI Target并设置IQN
bash
# 返回到根路径,进入iscsi目录,创建一个Target /> cd /iscsi /iscsi> create iqn.2024-08.com.example.server:webdata Created target iqn.2024-08.com.example.server:webdata. # 注意:这会自动创建一个默认的门户(0.0.0.0:3260)和一个TPG(门户组)。 -
在Target中创建LUN,关联后备存储
bash
# 进入刚创建的Target的LUNs目录 /> cd /iscsi/iqn.2024-08.com.example.server:webdata/tpg1/luns # 创建LUN 0,并指向我们之前创建的存储对象`my_disk` /iscsi/iqn.../tpg1/luns> create /backstores/block/my_disk Created LUN 0. -
设置ACL,允许特定客户端访问
bash
# 进入ACLs目录 /> cd ../acls # 创建一条ACL规则,允许IQN为`iqn.2024-08.com.example.client`的客户端连接 /iscsi/iqn.../tpg1/acls> create iqn.2024-08.com.example.client Created Node ACL for iqn.2024-08.com.example.client -
(可选)配置具体的监听门户
默认监听所有IP(0.0.0.0),如果你想指定IP:bash
/> cd ../portals /iscsi/iqn.../tpg1/portals> delete 0.0.0.0 3260 # 删除默认门户 Deleted network portal 0.0.0.0:3260 /iscsi/iqn.../tpg1/portals> create 10.1.8.10 3260 # 创建指定IP的门户 Created network portal 10.1.8.10:3260. -
保存并退出
bash
/> exit Configuration saved to /etc/target/saveconfig.json恭喜!服务器端配置完成。
2.2 客户端(Initiator)配置
目标:连接并挂载使用服务器端共享出来的硬盘。
第1步:安装客户端软件
bash
yum install -y iscsi-initiator-utils
第2步:配置客户端的IQN
这个IQN必须和服务器ACL里允许的IQN一致。
bash
# 编辑配置文件
vim /etc/iscsi/initiatorname.iscsi
# 修改为如下内容(与服务器ACL匹配):
InitiatorName=iqn.2024-08.com.example.client
# 重启服务使IQN生效
systemctl restart iscsid
第3步:发现并连接Target
-
发现:查询服务器(
10.1.8.10)上有哪些Target可用。bash
iscsiadm -m discovery -t st -p 10.1.8.10成功会返回类似:
10.1.8.10:3260,1 iqn.2024-08.com.example.server:webdata -
登录:连接到发现的Target。
bash
iscsiadm -m node -T iqn.2024-08.com.example.server:webdata -p 10.1.8.10 -l # 参数说明:-T 指定Target名称,-p 指定门户地址,-l 执行登录看到
Login successful即表示成功。
第4步:使用远程磁盘
-
查看新磁盘:登录成功后,系统会多出一块“本地”硬盘。
bash
lsblk # 你应该能看到一个新的磁盘,例如 /dev/sdb -
格式化与挂载:(警告:格式化会清空数据!确保这是你要操作的磁盘)
bash
# 1. 创建文件系统(例如XFS) mkfs.xfs /dev/sdb # 2. 创建挂载点 mkdir -p /data # 3. 临时挂载 mount /dev/sdb /data # 4. 验证 df -h /data
第5步:配置开机自动挂载
为了让系统重启后自动连接并挂载,需要做两件事:
-
确保iscsi服务自启(默认已启用):
bash
systemctl enable iscsi iscsid -
配置
/etc/fstab自动挂载文件系统:- 重要:不要使用设备名(如
/dev/sdb),因为它可能会变。使用UUID或磁盘路径标识。 - 必须添加
_netdev挂载选项,确保在网络就绪后再挂载。
bash
# 获取磁盘的UUID blkid /dev/sdb # 编辑 /etc/fstab,添加一行 vim /etc/fstab # 添加如下内容(将UUID替换为上一步查询到的实际值): UUID="你的磁盘UUID" /data xfs defaults,_netdev 0 0 # 测试fstab配置是否正确 mount -a df -h /data # 确认挂载成功 - 重要:不要使用设备名(如
第三部分:进阶主题 - 多路径(MPIO)简介
为什么需要多路径?
为了提高可靠性和性能。就像去一个地方有两条路,一条堵了或断了,可以立刻走另一条。多路径为iSCSI存储配置多个网络连接(多个Portal),避免单点故障。
3.1 核心概念
- DM-Multipath:Linux上实现多路径的软件。
- 故障切换 (Failover):主路径故障时,自动切换到备用路径。
- 负载均衡 (Load Balancing):在多条活动路径上分配I/O流量(需要存储设备支持)。
3.2 快速配置多路径
-
服务端:为同一个Target配置两个不同网段的Portal(例如
10.1.8.10:3260和10.1.1.10:3260)。 -
客户端:
bash
# 1. 安装多路径软件 yum install -y device-mapper-multipath # 2. 生成并启用默认配置 mpathconf --enable --with_multipathd y # 3. 启动服务 systemctl start multipathd systemctl enable multipathd # 4. 重新发现Target(从两个Portal) iscsiadm -m discovery -t st -p 10.1.8.10 iscsiadm -m discovery -t st -p 10.1.1.10 # 5. 重新登录 iscsiadm -m node -T iqn.2024-08.com.example.server:webdata -l # 6. 查看多路径设备 multipath -ll此时,你会看到一个由
mpatha或wwid命名的多路径设备(如/dev/mapper/mpatha),而不是直接使用/dev/sdb或/dev/sdc。 -
使用多路径设备:后续所有操作(分区、格式化、挂载)都应针对
/dev/mapper/mpatha进行。bash
mkfs.xfs /dev/mapper/mpatha mount /dev/mapper/mpatha /data # 在 /etc/fstab 中也使用 /dev/mapper/mpatha
附录:核心知识点与命令速查
A. 核心知识点提炼
| 概念 | 生活化比喻 | 专业定义 | 关键作用 |
|---|---|---|---|
| iSCSI | 网络硬盘盒协议 | 基于IP网络的SCSI传输协议 | 实现块级存储的网络化 |
| Target | 存储服务器/硬盘盒 | iSCSI服务端,导出存储资源 | 提供远程块设备 |
| Initiator | 客户端驱动软件 | iSCSI客户端,发起连接 | 连接并使用远程块设备 |
| IQN | 全球唯一身份证 | iSCSI限定名,格式 iqn.yyyy-mm.reverse.domain:name |
唯一标识Target和Initiator |
| LUN | 硬盘盒的插槽编号 | 逻辑单元号,Target提供的逻辑磁盘单元 | 区分同一个Target上的不同存储卷 |
| Portal | 服务器的门牌地址 | Target监听的IP:Port(默认3260) |
客户端连接的入口 |
| ACL | 门禁白名单 | 访问控制列表,基于Initiator的IQN | 控制哪些客户端可以访问 |
| 多路径 | 去目的地的多条路 | 通过多条物理路径访问同一存储设备 | 提高可用性和可靠性 |
B. 常用命令速查表
服务端 (Target) 命令
| 命令 | 作用 | 示例 |
|---|---|---|
targetcli |
进入交互式配置界面 | targetcli |
targetcli /路径 操作 |
命令行模式配置 | targetcli /backstores/block create disk1 /dev/sdb |
systemctl status target |
查看服务状态 | |
firewall-cmd --add-service=iscsi-target |
防火墙放行服务 |
客户端 (Initiator) 命令
| 命令 | 作用 | 示例 |
|---|---|---|
iscsiadm -m discovery -t st -p IP |
发现目标端 | iscsiadm -m discovery -t st -p 10.1.8.10 |
iscsiadm -m node -T IQN -p IP -l |
登录目标 | iscsiadm -m node -T iqn.xxx -p 10.1.8.10 -l |
iscsiadm -m node -T IQN -p IP -u |
注销目标 | iscsiadm -m node -T iqn.xxx -p 10.1.8.10 -u |
iscsiadm -m node -T IQN -p IP -o delete |
删除目标记录 | iscsiadm -m node -T iqn.xxx -p 10.1.8.10 -o delete |
iscsiadm -m session -P 3 |
查看详细会话信息 | |
systemctl restart iscsid |
重启服务(改IQN后必须) | |
lsblk 或 ls /dev/disk/by-path/ |
查看挂载的iSCSI磁盘 |
多路径 (Multipath) 命令
| 命令 | 作用 | 示例 |
|---|---|---|
mpathconf --enable |
启用多路径并生成配置 | |
systemctl start multipathd |
启动多路径守护进程 | |
multipath -ll |
查看多路径拓扑详情(推荐) | |
multipath -l |
查看多路径拓扑简况 | |
ls /dev/mapper/ |
查看多路径设备节点 |
文档总结:本文档从“网络硬盘”的比喻出发,逐步解释了iSCSI的核心概念、详细演示了服务端与客户端的配置流程,并简要介绍了提升可靠性的多路径技术。附录部分的知识点与命令速查表,是日常操作和复习备考的实用工具。希望它能帮助你轻松掌握iSCSI网络存储技术。
更多推荐



所有评论(0)