CN109413142B - 一种Linux下的iSCSI虚拟代理实现方法 - Google Patents
一种Linux下的iSCSI虚拟代理实现方法 Download PDFInfo
- Publication number
- CN109413142B CN109413142B CN201811043889.6A CN201811043889A CN109413142B CN 109413142 B CN109413142 B CN 109413142B CN 201811043889 A CN201811043889 A CN 201811043889A CN 109413142 B CN109413142 B CN 109413142B
- Authority
- CN
- China
- Prior art keywords
- iscsi
- data packet
- target
- data
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
Abstract
本发明公开了一种Linux下的iSCSI虚拟代理实现方法,包括步骤:启动端在与目标端进行连接时,首先进行发现操作,通过发送登录指令协议数据单元进行参数协商,对包含iSCSI登录指令的第2个报文的以太网帧进行修改,将其IP段数据头中的目标IP地址改为在组网内广播的形式,发送至组网内其余的启动端,通知其他启动端暂不向此启动端转发消息;完成连接的启动端进行登录操作,成为代理客户端,并将登录指令协议数据单元的目标IP地址改为在组网内广播模式;其他启动端接收到此数据包时,将处于连接状态的目标端LUN与数据包的源IP地址建立二元表进行关联;当其他启动端有读写请求时,将数据包转发至源IP地址,实现多个启动端同时对同一LUN进行读写操作。
Description
技术领域
本发明涉及网络通信领域,具体地,涉及一种Linux下的iSCSI虚拟代理实现方法。
背景技术
iSCSI是一种常用在存储网络中的通信协议,其协议建立在TCP/IP协议之上。通过将对读写操作的SCSI指令映射到TCP协议上再进行传输。实现数据的异地存储。一个完整的ISCSI系统拓扑结构图如图1所示。
按图1所示,IP网络中可以存在多台iSCSI服务器(initiator,启动端)以及多台的ISCSI存储设备(target,目标端)。在每个目标端之下还包含有多个LUN(Logical UnitNumber),用于将整个存储设备的存储介质(HDD、SDD及其构成的RAID)进行统一管理如图2所示。
根据OSI模型,ISCSI的协议自顶向下可以分为7层如图3所示。
iSCSI协议检测块数据的传输并确保完成了I/O操作,这些需要在启动端和目标端的TCP连接上进行。在实际应用中,IP网内一个启动端允许有多个目标端资源,所以有多个活动的TCP连接,故可能导致目标端设备的处理器在处理多个活动的TCP连接时性能降低,从而影响整个系统的性能。ISCSI 目标端通常支持与多个iSCSI 启动端同时连接,但不支持同时与同一个LUN进行连接。可以理解为生产厂商为每一个LUN设置了数据锁机制,这是为了防止不同的iSCSI 启动端同时对单一LUN进行读写操作时,由于数据的复写而导致的数据丢失。目前业内通常采用集群文件系统,如IBM的GFPS,Oracle的OCFS以及Linux的GFS,来解决多个服务器连接同一存储块设备的问题。集群文件系统是指协同多个节点提供高性能、高可用的文件系统,它是分布式存储系统的一个子集,对于用户来说是透明的看到的是一个全局命名的空间,所有的文件访问被分散到整个集群的存储设备进行处理,即任意数据都是被存储在不同的LUN上,从而解决了多个iSCSI 启动端也能同时连接一个目标端的问题。
但严格意义上,集群文件系统并未实际解决多个iSCSI 启动端连接同一个目标端LUN的问题,因为其要求有足够数量的LUN以实现分布存储,即同时进行文件访问的启动端数量实际上不能都大于当前存储空间中LUN的数量。故现提出一种在Linux下的多个启动端可以同时访问一个LUN的方案,即ISCSI虚拟代理方案。
代理即代理服务器(proxy server)其工作在OSI七层模型的会话层,通常是在互联网访问中,被限制访问的IP地址可以通过采用代理服务器的方式来实现对某些特定网站,如大学或企业内内数据库以及一些境外网站的访问,代理起到了将源IP设备的请求(Request)进行转发的作用。对于目标服务器而言,其收到的数据请求来自于合法的代理服务器从而达到对源IP的隐藏作用。在本发明中,采用了代理的思想,将读写请求通过当前与目标LUN连接的启动端进行转发,在收到回复时再转发回组网内的数据请求源。对于目标端中的LUN而言,其通信对象则一直是当前建立连接的启动端,其他通信对象被隐藏。从而实现在同一时刻多启动端连接上同一LUN的目标。采用虚拟代理后,若当前客户端B与指定LUN处于连接状态,而客户端 A向此iSCSI LUN进行写操作时,则数据流如图4。
客户端A的数据包,首先需要经路由器转发至客户端B,在以客户端B的“名义”发送至指定的iSCSI 目标端 LUN。从iSCSI 目标端 LUN的一侧看,其始终在与iSCSI客户端B进行通信,而客户端A对于其是透明的,此时,iSCSI客户端B即是代理。当iSCSI客户端A需要对此特定LUN进行读操作时,数据的流向如图5所示。
综上所述,本申请发明人在实现本申请发明技术方案的过程中,发现上述技术至少存在如下技术问题:
当前iSCSI技术中,只支持单一iSCSI 启动端连接单一iSCSI 目标端 LUN,即使主动进行配置为多连接,也不能保证存入数据的完整性。
发明内容
本发明提供了一种Linux下的iSCSI虚拟代理实现方法,解决了现有技术的不足,在不采用丛集文件感应系统的条件下,实现多个启动端可以同时对同一LUN进行读写操作,而不会导致某些启动端与LUN的连接断开或数据丢失。
其中,本申请中的英文的注释为: iSCSI为internet small computer systeminterface,互联网小型电脑系统接口。
为实现上述发明目的,本申请提供了一种Linux下的iSCSI虚拟代理实现方法,包括以下步骤:
S1、iSCSI 启动端在与iSCSI 目标端进行连接时,首先会进行一次发现操作,通过发送登录指令协议数据单元进行参数协商,对包含iSCSI登录指令的第2个报文的以太网帧进行修改,将其IP段数据头中的目标IP地址改为在组网内广播的形式,发送至组网内其余的启动端,通知其他启动端暂时不要向此启动端转发消息;
S2、完成连接的启动端进行登录操作,成为代理客户端,并将登录指令协议数据单元的目标IP地址改为在组网内广播模式;其他启动端接收到此数据包时,将处于连接状态的目标端LUN与数据包的源IP地址建立二元表进行关联;当其他启动端有iSCSI 读写请求时,将数据包转发至所述源IP地址;当有来自多个其他的启动端的多个读写请求同时发送至代理客户端时,代理客户端提取不同请求的数据包中的最大等待时间和立即位,并判断立即位是否有效,对读写请求进行排序后发送至目标端进行处理。
进一步地,iSCSI 启动端在与iSCSI 目标端进行连接时,当发送2次登录指令后,若连接仍未建立,则主动终止当前iSCSI对话。
进一步地,iSCSI的参数协商信息以文本数据的形式,保存在iSCSI PDU的数据段中,其中包括了启动端的iSCSI名称以及会话类型。
进一步地,步骤S2中,完成连接的启动端进行登录操作的具体流程包括:进入登录阶段后,iSCSI的启动端首先进行参数协商,包括安全协商以及操作参数协商,操作参数协商中包括的是支持的最大TCP连接数,源及目的iSCSI名称的发送、接收与保存,还包括最大数据缓冲区的设置,LUN数量的设置,并发送PDU报文中的外读数据测试当前网路是否正常。
进一步地,步骤S2中完成连接的启动端作为代理客户端,其他的服务器为一般客户端,代理客户端收到来自一般客户端的数据包后,修改此数据包内的源、目的IP地址,以及发送方iSCSI名称;当收到来自目标端的回复后再转发回一般客户端。
进一步地,当有来自多个其他的启动端的多个读写请求同时发送至代理客户端时,代理客户端提取不同请求的数据包中的最大等待时间和立即位,并判断立即位是否有效,对读写请求进行排序后发送至目标端进行处理,具体包括:根据最大等待时间的大小,将最大等待时间较大的数据包放在发送队列的后端,较小的则放在前端,对于立即位有效的数据包,将其直接放在发送队列的最前方,若有若干的数据包的立即位都有效则再根据最大等待时间按照相同的方法排序。
本申请提供的一个或多个技术方案,至少具有如下技术效果或优点:
本发明给出Linux下的iSCSI虚拟代理实现方案,在不采用丛集文件感应系统的条件下,实现多个启动端可以同时对同一LUN进行读写操作,而不会导致某些启动端与LUN的连接断开或数据丢失。本发明采用软件方式实现了iSCSI虚拟代理,实现了多个启动端实时连接同一LUN的目标。本发明对实时的多个ISCSI请求采用调度算法,最优化传输性能。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定;
图1是iSCSI系统结构示意图;
图2是 iSCSI拓扑结构示意图;
图3是 iSCSI协议层次示意图;
图4 是iSCSI代理写流程示意图;
图5是 iSCSI代理写流程示意图;
图6是 iSCSI发现阶段流程示意图;
图7是 iSCSI 登录PDU报文的数据段示意图;
图8是iSCSI登录阶段流程示意图;
图9是iSCSI登录阶段PDU示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
本发明的核心由三个模块组成,分别为:程序间通信模块、数据包转发模块以及读写请求队列算法模块。
(1)程序间通信模块:
其作用是当组网内任一iSCSI 启动端与某一iSCSI 目标端 LUN建立连接时,通知组网内其余启动端。使其在需要与此LUN进行通信时,首先将数据包转发至此客户端。
iSCSI 启动端在与iSCSI 目标端进行连接时,首先会进行一次发现操作,通过发送登录指令PDU报文(Protocol Data Unit,协议数据单元,iSCSI协议的数据包格式)进行相关参数的协商,但当发送2次登录指令后,若连接仍未建立,则主动终止当前iSCSI对话。如下图6所示:
iSCSI的参数协商信息都以文本数据的形式,保存在iSCSI PDU的数据段中,如下图7所示,其中包括了启动端的iSCSI名称,以及会话类型。
程序间通信模块通过对包含iSCSI登录指令的第2个报文的以太网帧进行修改,将其IP段数据头中的目标IP地址改为在组网内广播的形式,发送至组网内其余的启动端,此做法的目的是通知其他启动端,暂时不要向此启动端转发消息。
当某一启动端要开始进行登录操作后,会进入到登录阶段,其流程如下图8所示。
登录阶段的登录PDU报文中的参数协商信息也保存在数据段中,如图9所示,其中还包括了此启动端正在进行连接的目标端名称,同样将此数据包的目标IP地址改为广播模式,其他启动端上的软件接收到此数据包时,将会将此目标端 LUN与数据包的源IP地址建立二元表进行关联。当有iSCSI 读写请求时,将数据包转发至此IP地址。当连接断开时,删除表内的对应关系,进行正常的连接和发送。
(2)数据转发模块:
数据转发模块的作用是,当组网内的启动端侦测到需要执行操作的LUN与另一启动端连接时,根据组网内通信模块的作用此iSCSI PDU将转发至这个启动端。
如上图5的(2)、(3)步所示,客户端B收到来自客户端A的数据包后,修改此数据包内的源、目的IP地址,以及发送方iSCSI名称。当收到来自目标端的回复后再转发回客户端A。从而实现iSCSI代理功能。
(3)读写队列调度算法模块:
此模块的作用是,当有来自多个启动端的多个读写请求同时发送至代理客户端时,客户端提取不同数据包中的最大等待时间和立即位,并判断立即位是否有效,来对读写请求进行排序后发送至目标端进行处理。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (6)
1.一种Linux下的iSCSI虚拟代理实现方法,其特征在于,包括以下步骤:
S1、iSCSI 启动端在与iSCSI 目标端进行连接时,首先会进行一次发现操作,通过发送登录指令协议数据单元进行参数协商,对包含iSCSI登录指令的第2个报文的以太网帧进行修改,将其IP段数据头中的目标IP地址改为在组网内广播的形式,发送至组网内其余的启动端,通知其他启动端暂时不要向此启动端转发消息;
S2、完成连接的启动端进行登录操作,成为代理客户端,并将登录指令协议数据单元的目标IP地址改为在组网内广播模式;其他启动端接收到此数据包时,将处于连接状态的目标端LUN与数据包的源IP地址建立二元表进行关联;当其他启动端有iSCSI 读写请求时,将数据包转发至所述源IP地址;当有来自多个其他的启动端的多个读写请求同时发送至代理客户端时,代理客户端提取不同请求的数据包中的最大等待时间和立即位,并判断立即位是否有效,对读写请求进行排序后发送至目标端进行处理。
2.根据权利要求1所述的Linux下的iSCSI虚拟代理实现方法,其特征在于,iSCSI 启动端在与iSCSI 目标端进行连接时,当发送2次登录指令后,若连接仍未建立,则主动终止当前iSCSI对话。
3.根据权利要求1所述的Linux下的iSCSI虚拟代理实现方法,其特征在于,iSCSI的参数协商信息以文本数据的形式,保存在iSCSI PDU的数据段中,其中包括了启动端的iSCSI名称以及会话类型。
4.根据权利要求1所述的Linux下的iSCSI虚拟代理实现方法,其特征在于,步骤S2中,完成连接的启动端进行登录操作的具体流程包括:进入登录阶段后,iSCSI的启动端首先进行参数协商,包括安全协商以及操作参数协商,操作参数协商中包括的是支持的最大TCP连接数,源及目的iSCSI名称的发送、接收与保存,还包括最大数据缓冲区的设置,LUN数量的设置,并发送PDU报文中的外读数据测试当前网路是否正常。
5.根据权利要求1所述的Linux下的iSCSI虚拟代理实现方法,其特征在于,步骤S2中完成连接的启动端作为代理客户端,其他的服务器为一般客户端,代理客户端收到来自一般客户端的数据包后,修改此数据包内的源、目的IP地址,以及发送方iSCSI名称;当收到来自目标端的回复后再转发回一般客户端。
6.根据权利要求1所述的Linux下的iSCSI虚拟代理实现方法,其特征在于,当有来自多个其他的启动端的多个读写请求同时发送至代理客户端时,代理客户端提取不同请求的数据包中的最大等待时间和立即位,并判断立即位是否有效,对读写请求进行排序后发送至目标端进行处理,具体包括:根据最大等待时间的大小,将最大等待时间较大的数据包放在发送队列的后端,较小的则放在前端,对于立即位有效的数据包,将其直接放在发送队列的最前方,若有若干的数据包的立即位都有效则再根据最大等待时间按照相同的方法排序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811043889.6A CN109413142B (zh) | 2018-09-07 | 2018-09-07 | 一种Linux下的iSCSI虚拟代理实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811043889.6A CN109413142B (zh) | 2018-09-07 | 2018-09-07 | 一种Linux下的iSCSI虚拟代理实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109413142A CN109413142A (zh) | 2019-03-01 |
CN109413142B true CN109413142B (zh) | 2020-07-31 |
Family
ID=65464606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811043889.6A Active CN109413142B (zh) | 2018-09-07 | 2018-09-07 | 一种Linux下的iSCSI虚拟代理实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109413142B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109981768B (zh) * | 2019-03-21 | 2021-12-07 | 上海霄云信息科技有限公司 | 分布式网络存储系统中的io多路径规划方法及设备 |
CN109992433B (zh) * | 2019-04-11 | 2021-06-29 | 苏州浪潮智能科技有限公司 | 一种分布式tgt通信优化方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1753406A (zh) * | 2005-10-26 | 2006-03-29 | 华中科技大学 | 一种基于iSCSI协议的IP存储控制方法及其装置 |
CN101471830A (zh) * | 2007-12-25 | 2009-07-01 | 英业达股份有限公司 | Linux系统下的多路径访问远程逻辑设备的方法 |
CN101984638A (zh) * | 2010-11-10 | 2011-03-09 | 河海大学常州校区 | 用于处理跨IPv4和IPv6网络的存储代理系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030105830A1 (en) * | 2001-12-03 | 2003-06-05 | Duc Pham | Scalable network media access controller and methods |
US8892789B2 (en) * | 2008-12-19 | 2014-11-18 | Netapp, Inc. | Accelerating internet small computer system interface (iSCSI) proxy input/output (I/O) |
-
2018
- 2018-09-07 CN CN201811043889.6A patent/CN109413142B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1753406A (zh) * | 2005-10-26 | 2006-03-29 | 华中科技大学 | 一种基于iSCSI协议的IP存储控制方法及其装置 |
CN101471830A (zh) * | 2007-12-25 | 2009-07-01 | 英业达股份有限公司 | Linux系统下的多路径访问远程逻辑设备的方法 |
CN101984638A (zh) * | 2010-11-10 | 2011-03-09 | 河海大学常州校区 | 用于处理跨IPv4和IPv6网络的存储代理系统及方法 |
Non-Patent Citations (3)
Title |
---|
iSCSI;IBM等;《IETF INTERNET DRAFT,RFC3720》;20020614;见69-85页 * |
基于ISCSI技术的SAN应用研究;邵必林等;《西安建筑科技大学学报(自然科学版)》;20090228;第41卷(第1期);见805-808页 * |
基于SSH的安全iSCSI技术研究;刘卫平等;《小型微型计算机系统》;20060531;第27卷(第5期);见112-116页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109413142A (zh) | 2019-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6564960B2 (ja) | ネットワーキング技術 | |
US10592464B2 (en) | Methods for enabling direct memory access (DMA) capable devices for remote DMA (RDMA) usage and devices thereof | |
US7987266B2 (en) | Failover in proxy server networks | |
US6226684B1 (en) | Method and apparatus for reestablishing network connections in a multi-router network | |
US8396981B1 (en) | Gateway for connecting storage clients and storage servers | |
TWI252651B (en) | System, method, and product for managing data transfers in a network | |
US8725879B2 (en) | Network interface device | |
WO2004077211A2 (en) | Method and apparatus for increasing file server performance by offloading data path processing | |
EP1759317B1 (en) | Method and system for supporting read operations for iscsi and iscsi chimney | |
US8527661B1 (en) | Gateway for connecting clients and servers utilizing remote direct memory access controls to separate data path from control path | |
KR100793349B1 (ko) | Ppp 멀티링크를 지원하는 시스템에서의 멀티캐스트트래픽 포워딩 장치 및 제어방법 | |
US20050169309A1 (en) | System and method for vertical perimeter protection | |
CN109413142B (zh) | 一种Linux下的iSCSI虚拟代理实现方法 | |
WO2006065101A1 (en) | Method for balancing load among subsystems in communication network system of bus network structure | |
EP3261302B1 (en) | Storage network element discovery method and device | |
JP2002305535A (ja) | データを転送する信頼できるプロトコルを提供する方法および装置 | |
US20030016669A1 (en) | Full transmission control protocol off-load | |
CN113839862B (zh) | Mclag邻居之间同步arp信息的方法、系统、终端及存储介质 | |
US6988125B2 (en) | Servicing client requests in a network attached storage (NAS)-based network including replicating a client-server protocol in a packet generated by the NAS device | |
CN112398754B (zh) | 数据传输方法、装置、介质、电子设备及网络接入设备 | |
US20090240813A1 (en) | Communication network system of bus network structure and method using the communication network system | |
CN107483628A (zh) | 基于dpdk的单向代理方法及系统 | |
US7460528B1 (en) | Processing data packets at a storage service module of a switch | |
US7382776B1 (en) | Performing block storage virtualization at a switch | |
CN113572575A (zh) | 一种自适应数据传输方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |