【Linux应用】SAN网络ISCSI中target组建工具tgt架构及原理

1.SAN网络

SAN,即存储区域网络(storage area network and SAN protocols),它是一种高速网络实现计算机与存储系统之间的数据传输。常见的分类是FC-SAN和IP-SAN两种。FC-SAN通过光纤通道协议转发scsi协议;IP-SAN通过TCP协议转发scsi协议,也就是IP 地址。存储设备是指一台或多台用以存储计算机数据的磁盘设备,通常指磁盘阵列,主要厂商EMC、日立等。
iSCSI是一种基于TCP/IP 的协议,用来建立和管理IP存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。SCSI 结构基于C/S模式,其通常应用环境是:设备互相靠近,并且这些设备由SCSI 总线连接。
在这里插入图片描述

2.SCSI简述

SCSI(Small Computer System Interface)是一种I/O技术,规范了一种并行的I/O总线和相关的协议,SCSI的数据传输是以块的方式进行的。
在这里插入图片描述
如上图,SCSI总线通过SCSI控制器来和硬盘之类的设备进行通信, SCSI控制器称为Target,访问的客户端应用称为Initiator。窄SCSI总线最多允许8个、宽SCSI总线最多允许16个不同的SCSI设备和它进行连接,每个SCSI设备都必须有自己唯一的SCSI ID(设备的地址)。
LUN(Logical Unit Number,逻辑单元号)是为了使用和描述更多设备及对象而引进的一个方法,每个SCSI ID上最多有32个LUN,一个LUN对应一个逻辑设备。

3.LUN

每个在同一个target上的backing-store 称为逻辑单元号Logical Unit Number,LUN ID由iSCSI目标设备(Target)分配。iSCSI 启动端(Initiator)设备当前支持在每个目标设备(Target)中导出最多256个LUN,即最大支持16个target。

对于LUN的理解,比较通俗就是整个磁盘,磁盘分区、LVM卷组、RAID等等。在iSCSI通信中,都有一个发起I/O请求的启动端(Initiator)和响应请求并执行实际I/O操作的目标设备(Target),我们能够提供 BlockLevel I/O 给 Initiator 主机,其目的不外乎是“将硬盘的排线网路化”、“把Target 主机的共享磁盘幻化成Initiator 主机的磁盘”以达成更大空间、更高 I/O 速度及具有冗余与高延展度的应用。

Target 即储存设备(Storage Device),也就是存放数据的硬盘(以硬盘阵列居多),在使用iSCSI时,会在 iSCSI 储存设备上去建立 LUN来提供给具备 iSCSI Initiator 功能的主机来存取数据的。可以把Target主机看作是服务端,把Initiator主机看作是客户端。LUN 好比是个“逻辑单位磁碟”,为追求效率、冗余与延展性,这个 LUN 通常会是由数个实体磁碟( RAID 或 LVM 技术的技术实现)所组成。

4.iscsi target tgt架构

–服务端

yum install scsi-target-utils

–客户端

yum install iscsi-initiator-utils

tgt中命令的操作,与initiator端的通信都是通过epoll来实现的。
在这里插入图片描述
在启动tgtd进程的时候,就会初始化一个unix socket,将该fd加到epoll中,监听EPOLLIN事件,后续每执行一条tgtadm命令,就会使用这个unix socket来和tgtd通信。
在这里插入图片描述
当在命令行里敲一条tgtadm命令时,通过unix socket发起请求,就会触发epoll 的EPOLLIN事件,tgtd端accept,将连接fd加到epoll中,并注册回调函数mtask_recv_send_handler,返回连接建立的响应给tgtadm端,然后tgtadm命令触发EPOLLIN事件,tgtd端调用mtask_recv_send_handler,根据不同的mode调用不同的处理函数进行处理(这里有sys_mgmt/target_mgmt/portal_mgmt等),处理完后,将事件改为EPOLLIN|EPOLLOUT,然后发送响应给tgtadm端。
在这里插入图片描述
tgtd进程在启动的时候就会创建一个socket,用于监听initiator的请求(具体是iscsi_tcp_init_portal函数中的处理),将该socket加到epoll中,注册回调函数accept_connection。 initiator端的请求到来时,将新连接的fd加到epoll中,并注册回调函数iscsi_tcp_event_handler,然后当收到EPOLLIN事件时,会调用iscsi_rx_handler进行iscsi请求的一些解析处理操作,并调用backing store的接口进行io的操作,操作完成后,修改事件为EPOLLLOUT,就会触发调用到iscsi_tx_handler来发送响应给initiator。

5.参考

1.multipath多路径实验01-构建iSCSI模拟环境
2.Linux下IP SAN共享存储操作记录
3.Linux下搭建iSCSI共享存储的方法 TGT 方式

6.参与讨论

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值