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
    • 谁需要TargetInitiator 都必须有自己唯一的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在这个名单里的客户端,才被允许连接和访问存储。
    • 作用:保障存储安全,防止未经授权的访问。

小结一下流程

  1. 服务器端(Target)配置好一块硬盘(创建LUN),设置好监听地址(Portal),并生成自己的IQN。
  2. 服务器端制作一个“允许访问的客户名单”(ACL),里面写上允许连接的客户端IQN。
  3. 客户端(Initiator)配置自己的IQN,然后去服务器地址(Portal)“敲门”发现可用的Target。
  4. 客户端出示自己的IQN(登录),服务器核对ACL名单,匹配成功则“放行”。
  5. 客户端成功将服务器的远程硬盘映射为本地的一块新硬盘(如/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 是一个交互式配置工具,结构像文件树。我们按顺序“创建”所需组件。

  1. 进入配置界面

    bash

    targetcli
    

    你会看到类似这样的结构:

    text

    /> ls
    o- / ................................................................. [...]
    o- backstores ...................................................... [...]  # 后备存储(真实的硬盘/文件)
    | o- block .......................................... [Storage Objects: 0]
    | o- fileio ......................................... [Storage Objects: 0]
    o- iscsi .................................................... [Targets: 0]   # iSCSI目标
    
  2. 创建后备存储对象 (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.
    
  3. 创建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(门户组)。
    
  4. 在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.
    
  5. 设置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
    
  6. (可选)配置具体的监听门户
    默认监听所有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.
    
  7. 保存并退出

    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
  1. 发现:查询服务器(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

  2. 登录:连接到发现的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步:使用远程磁盘
  1. 查看新磁盘:登录成功后,系统会多出一块“本地”硬盘。

    bash

    lsblk
    # 你应该能看到一个新的磁盘,例如 /dev/sdb
    
  2. 格式化与挂载:(警告:格式化会清空数据!确保这是你要操作的磁盘)

    bash

    # 1. 创建文件系统(例如XFS)
    mkfs.xfs /dev/sdb
    
    # 2. 创建挂载点
    mkdir -p /data
    
    # 3. 临时挂载
    mount /dev/sdb /data
    
    # 4. 验证
    df -h /data
    
第5步:配置开机自动挂载

为了让系统重启后自动连接并挂载,需要做两件事:

  1. 确保iscsi服务自启(默认已启用):

    bash

    systemctl enable iscsi iscsid
    
  2. 配置 /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 快速配置多路径

  1. 服务端:为同一个Target配置两个不同网段的Portal(例如 10.1.8.10:326010.1.1.10:3260)。

  2. 客户端

    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
    

    此时,你会看到一个由 mpathawwid 命名的多路径设备(如/dev/mapper/mpatha),而不是直接使用 /dev/sdb/dev/sdc

  3. 使用多路径设备:后续所有操作(分区、格式化、挂载)都应针对 /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后必须)
lsblkls /dev/disk/by-path/ 查看挂载的iSCSI磁盘
多路径 (Multipath) 命令
命令 作用 示例
mpathconf --enable 启用多路径并生成配置
systemctl start multipathd 启动多路径守护进程
multipath -ll 查看多路径拓扑详情(推荐
multipath -l 查看多路径拓扑简况
ls /dev/mapper/ 查看多路径设备节点

文档总结:本文档从“网络硬盘”的比喻出发,逐步解释了iSCSI的核心概念、详细演示了服务端与客户端的配置流程,并简要介绍了提升可靠性的多路径技术。附录部分的知识点与命令速查表,是日常操作和复习备考的实用工具。希望它能帮助你轻松掌握iSCSI网络存储技术。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐