iSCSI架构中客户端与服务端

我们来系统地梳理一下iSCSI架构中客户端与服务端(通常称为启动器和目标器)的职责,并特别探讨其在光存储项目中的应用。

第一部分:iSCSI客户端与服务端的核心工作

iSCSI协议将SCSI命令封装在TCP/IP数据包中,通过网络传输,使得远程存储设备对主机看起来就像本地连接的SCSI设备。

一、iSCSI客户端(启动器 - Initiator)的核心工作
  1. 发现目标:向指定的网络端口(默认3260)发送发现请求,获取可用的iSCSI目标器列表及其参数。

  2. 会话管理

    • 登录协商:与选定的目标器建立TCP连接,进行登录阶段协商。协商内容包括认证方式(CHAP等)、会话参数(如最大数据段长度)。

    • 维护会话:通过定期发送"NOP-Out"命令作为心跳包,保持会话活跃,检测连接状态。

    • 登出:优雅地终止会话。

  3. SCSI命令封装与传输

    • 接收上层操作系统或应用(文件系统、数据库)发来的SCSI块级命令(如读、写)。

    • 将这些SCSI命令和数据封装成iSCSI协议数据单元

    • 为每个命令分配一个命令序列号,确保有序和可靠传输。

    • 通过建立的TCP连接将PDU发送给目标器。

  4. 数据处理

    • 写操作:如果数据超出协商的"最大数据段长度",启动器负责将数据拆分成多个序列进行传输。

    • 读操作:接收来自目标器的数据PDU,进行重组,提交给上层。

  5. 错误处理与恢复

    • 检测丢包、超时或校验错误。

    • 请求重传或重新连接,确保数据的完整性和命令的可靠性。

二、iSCSI服务端(目标器 - Target)的核心工作
  1. 服务发布与监听:在TCP 3260端口持续监听来自启动器的连接请求。

  2. 访问控制

    • 目标标识 :每个存储资源被定义为一个唯一的iSCSI限定名

    • 认证:在登录阶段验证启动器身份(通常使用CHAP双向认证)。

    • LUN映射 :将后端的逻辑单元(如物理磁盘、RAID组、卷、文件)映射为逻辑单元号,并只对经过授权的启动器可见。

  3. 会话管理:接受或拒绝启动器的登录请求,管理多个并发的iSCSI会话。

  4. 命令解析与执行

    • 接收并解析来自启动器的iSCSI PDU,提取出原始的SCSI命令。

    • 将SCSI命令传递给后端的存储对象(块设备)执行。

  5. 数据传输

    • 对于读请求,从存储设备读取数据,封装成iSCSI数据PDU发回启动器。

    • 对于写请求,将接收到的数据写入存储设备,并发送响应确认。

  6. 状态返回:将SCSI命令的执行状态(成功、校验错误、设备故障等)封装在响应PDU中返回给启动器。

  7. 队列管理:管理来自不同启动器的SCSI命令队列,可能涉及简单的调度。


第二部分:在光存储项目中的应用

光存储(如光盘库、蓝光存储、归档光盘系统)通常用于冷数据或温数据存储 ,特点是顺序访问性能好、随机访问慢、介质可移动、寿命长、成本低 。当通过iSCSI将其呈现给主机时,其行为模拟为一个块设备

在这种场景下,客户端和服务器端处理的命令会具有鲜明的光存储特性

一、客户端(启动器)通常会发送的命令

除了常规的读写命令,由于光存储介质的特殊性,客户端(或更准确地说,是客户端上运行的介质管理软件 )会发送一系列SCSI 机械臂和介质控制命令 ,这些命令通常属于SCSI媒体换片器命令集SCSI块命令扩展集

  1. 标准块操作命令

    • READ / WRITE:读取或写入数据。由于光盘写入通常是一次性的,WRITE 可能对应刻录操作。

    • INQUIRY:查询目标器及其LUN的设备类型、厂商信息。对于光存储,设备类型会报告为"光盘库"或"WORM"设备。

    • READ CAPACITY:获取存储容量信息。

    • TEST UNIT READY:检查设备(如特定光盘)是否就绪可读。

    • REQUEST SENSE:获取详细的错误状态信息(如"介质未装入"、"需要清洁")。

  2. 关键的光存储/自动化命令

    • START STOP UNIT(或 LOAD/UNLOAD MEDIUM):

      • LOAD: 将指定槽位的光盘装入驱动器。

      • UNLOAD: 将驱动器中的光盘退回到槽位。

      • EJECT: 将光盘弹出到存取口。

    • MOVE MEDIUM

      • 命令机械臂将光盘从一个槽位移动到另一个槽位(或从槽位到驱动器)。
    • READ ELEMENT STATUS

      • 这是最核心的库管理命令。客户端通过此命令查询整个光盘库的"元素"状态,包括:

        • 存储元素: 所有光盘槽位的状态(空、有盘、盘片ID)。

        • 传输元素: 机械臂的位置和状态。

        • 数据转移元素: 所有光盘驱动器的状态(空闲、就绪、在读、在写、需要清洁)。

    • SEND DIAGNOSTIC / RECEIVE DIAGNOSTIC RESULTS

      • 发送诊断命令,获取库的硬件状态(如机械臂错误、传感器故障、驱动器温度)。
  3. 与介质特性相关的命令

    • GET CONFIGURATION: 查询驱动器的能力和当前配置(支持的光盘类型、读写速度等)。

    • CLOSE TRACK/SESSIONSYNCHRONIZE CACHE: 在完成一批数据写入(刻录)后,发送此命令来最终化光盘的轨道或会话,使数据不可再修改并可被读取。

二、服务端(目标器)需要支持的命令实现

iSCSI目标器软件(如Linux的targetcli或专业存储软件)在此扮演了翻译官控制器的角色。它需要:

  1. 实现完整的SCSI命令集 :不仅要支持标准块命令,必须实现SCSI媒体换片器命令集,以响应客户端的库管理请求。

  2. 虚拟化与映射

    • 将物理的"槽位"、"驱动器"抽象为SCSI元素地址。

    • MOVE MEDIUM命令翻译成控制机械臂和驱动器的底层硬件指令(通常通过串口、SCSI或厂商专用API)。

    • 将针对某个LUN(可能对应某张光盘)的READ/WRITE命令,路由到正确的、已装入的光盘驱动器。

  3. 介质管理

    • 维护一个内部介质目录 ,记录每张光盘的卷序列号、位置(槽位/驱动器)、内容索引、剩余容量等。

    • 当客户端请求访问某个文件/逻辑块时,目标器需要根据目录自动定位装入所需的光盘。

  4. 缓存管理(非常重要)

    • 由于光盘驱动器装入和寻道时间很长,优秀的目标器会实现大容量磁盘缓存

    • 写缓存: 接收客户端的快速写入,先存入高速磁盘缓存,随后后台异步刻录到光盘,并立即向客户端返回"写成功",极大提升用户体验。

    • 读缓存/预取: 将经常访问的数据或根据访问模式预取的数据缓存到磁盘,加速读取。

  5. 支持关键的光存储协议

    • 支持SCSI WORM命令,确保一次写入多次读取的介质特性不被违反。

    • 支持SCSI MT(介质转移)命令,用于机械臂控制。

总结

在光存储项目中应用iSCSI:

  • 客户端 的角色从"纯数据读写"扩展为库管理器 ,它通过发送READ ELEMENT STATUS, MOVE MEDIUM, START STOP UNIT等命令,主动地、智能化地管理着庞大的光盘介质仓库。

  • 服务端 的角色是一个高度智能的协议转换器和存储虚拟化层 。它不仅处理数据I/O,更重要的是管理物理机械、维护介质目录、提供读写缓存,从而将一个缓慢、顺序、机械化的光存储系统 ,伪装成一个可以通过标准块协议(SCSI over IP)访问的、相对可用的网络存储设备

这种架构使得归档光存储能够无缝集成到现有的IT基础设施中,应用程序可以像使用普通硬盘一样使用它,而背后的复杂性完全由iSCSI目标器和客户端管理软件隐藏。

相关推荐
_w_z_j_14 小时前
Linux----Socket实现UDP简单服务器与客户端程序
linux·运维·服务器
TPBoreas14 小时前
服务器CPU过高问题排查思路
运维·服务器
..过云雨14 小时前
UDP 通信接口全维度解析:API 设计原理、调用规范与应用实战
网络·网络协议·udp
h7ml14 小时前
企业微信外部联系人同步中的数据一致性与最终一致性保障
运维·服务器·企业微信
oMcLin14 小时前
如何在Ubuntu 22.04上通过配置LVM优化存储,提升香港服务器的大规模数据库的读写性能?
服务器·数据库·ubuntu
草莓熊Lotso14 小时前
从冯诺依曼到操作系统:打通 Linux 底层核心逻辑
linux·服务器·c++·人工智能·后端·系统架构·系统安全
小股虫14 小时前
心脏手术指南:如何安全地为运行中的系统更换“数据库引擎”?
数据库·安全·架构·方法论
oMcLin14 小时前
如何在 Ubuntu 22.04 服务器上搭建并优化 Elasticsearch 集群,支持实时日志分析
服务器·ubuntu·elasticsearch
HABuo14 小时前
【Linux进程(二)】操作系统&Linux的进程状态深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos