iSCSI 网络存储服务从入门到精通

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网络存储技术。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式