SCSI 即小型计算机系统接口(Small Computer System
Interface;简写:SCSI),一种用于计算机和外部设备之间(硬盘、光驱、软驱、打印机等)系统级接口的独立处理器标准。SCSI是一种智能的通用接口标准,它是各种计算机和外部设备之间的接口标准。iSCSI是由Cisco和IBM发起的,它将SCSI命令封装在TCP/IP包里,并使用一个iSCSI帧头。它基于IP协议栈,假设以不可靠的网络为基础,依靠TCP恢复丢失的数据包。
iSCSI是一种使用TCP/IP协议,在现有IP网络上传输SCSI块命令的工业标准,它是一种在现有的IP网络上无需安装单独的光纤网络即可同时传输消息和块数据的突破性技术。iSCSI基于应用非常广泛的TCP/IP协议,将SCSI命令/数据块封装为iSCSI包,再封装至TCP报文,然后封装到 IP 报文中。iSCSI通过TCP面向连接的协议来保护数据块的可靠交付。由于iSCSI基于IP协议栈,因此可以在标准以太网设备上通过路由或交换机来传输。
控制器系统架构:
iSCSI的核心处理单元采用与FC光纤存储设备相同的结构。即采用专用的数据传输芯片、专用的RAID数据校验芯片、专用的高性能cache缓存和专用的嵌入式系统平台。打开设备机箱时可以看到iSCSI设备内部采用无线缆的背板结构,所有部件与背板之间通过标准或非标准的插槽链接在一起,而不是普通PC中的多种不同型号和规格的线缆链接。控制器架构iSCSI存储内部基于无线缆的背板链接方式,完全消除了链接上的单点故障,因此系统更安全,性能更稳定。一般可用于对性能的稳定性和高可用性具有较高要求的在线存储系统,比如:中小型数据库系统,大型数据的库备份系统,远程容灾系统,网站、电力或非线性编辑制作网等。
连接桥系统架构:
整个iSCSI存储系统架构分为两个部分,一个部分是前端协议转换设备,另一部分是后端存储。结构上类似NAS网关及其后端存储设备。
前端协议转换部分一般为硬件设备,主机接口为千兆以太网接口,磁盘接口一般为SCSI接口或FC接口,可连接SCSI磁盘阵列和FC存储设备。通过千兆以太网主机接口对外提供iSCSI数据传输协议。后端存储一般采用SCSI磁盘阵列和FC存储设备,将SCSI磁盘阵列和FC存储设备的主机接口直接连接到iSCSI桥的磁盘接口上。iSCSI连接桥设备本身只有协议转换功能,没有RAID校验和快照、卷复制等功能。创建RAID组、创建LUN等操作必须在存储设备上完成,存储设备有什么功能,整个iSCSI设备就具有什么样的功能
PC系统架构:
即选择一个普通的、性能优良的、可支持多块磁盘的PC(一般为PC服务器和工控服务器),选择一款相对成熟稳定的iSCSI target软件,将iSCSI
target软件安装在PC服务器上,使普通的PC服务器转变成一台iSCSI存储设备,并通过PC服务器的以太网卡对外提供iSCSI数据传输协议。
在PC架构的iSCSI存储设备上,所有的RAID组校验、逻辑卷管理、iSCSI 运算、TCP/IP
运算等都是以纯软件方式实现,因此对PC的CPU和内存的性能要求较高。另外iSCSI存储设备的性能极容易收PC服务器运行状态的影响。PC+NIC系统架构
PC+iSCSI target软件方式是一种低价低效比的iSCSI存储系统架构解决方案,另外还有一种基于PC+NIC的高阶高效性iSCSI存储系统架构方案。这款iSCSI存储系统架构方案是指在PC服务器中安装高性能的TOE智能NIC卡,将CPU资源较大的iSCSI运算、TCP/IP运算等数据传输操作转移到智能卡的硬件芯片上,由智能卡的专用硬件芯片来完成iSCSI运算、TCP/IP运算等,简化网络两端的内存数据交换程序,从而加速数据传输效率,降低PC的CPU占用,提高存储的性能。
iSCSI有两大主要网络组件
第一个是网络团体,网络团体表现为可通过IP网络访问的一个驱动或者网关。一个网络团体必须有一个或者多个网络入口,每一个都可以使用,通过IP网络访问到一些iSCSI节点包含在网络团体中。
第二个是网络入口,网络入口是一个网络团队的组件,有一个TCP/IP的网络地址可以使用给一个iSCSI节点,在一个ISCSI会话中提供连接。一个网络入口在启动设备中间被识别为一个IP地址。一个网络入口在目标设备被识别为一个IP地址+监听端口。
iSCSI支持同一会话中的多个连接。在一些实现中也可以做到同一会话中跨网络端口组合连接。端口组定义了一个iSCSI节点内的一系列网络端口,提供跨越端口的会话连接支持。
通过ISCSI实现存储共享,创建IQN用于识别启动器和目标,然后建立tpg共享存储组,设置相应的访问控制权限,然后在共享存储组添加lun逻辑单元(存储设备),然后建立实现共享的portls入口(ip port)
TPG:共享存储组,某个特定ISCSI目标要侦听的接口IP地址和TCP端口的集合。可以将目标配置添到TPG以协调多个LUN的设置。
ACL:访问权限控制列表,一种使用节点IQN(通茶是启动器名称)来验证启动器的访问权限的访问限制。
IQN:ISCSI限定名称。全球唯一名称,用于以强制命名格式来识别启动器和目标。IQN格式如下: iqn.YYYY-MM.com.reversed.domain[:optional_string]
iqn:表示此名称使用域为标识符 YYYY-MM:表示拥有域名的年月时间
com.reversed.domain:拥有此ISCSI组织的逆向域名
:optional_string:以冒号为前缀的可选字符串,全球唯一,由域所有者分配,其中可包含冒号为分隔符的组织边界
LUN:逻辑单元号,带有编号的块设备,连接到目标且通过目标来使用。可以有一个或多个LUN连接到单个目标,但通常一个目标提供一个LUN
portals入口:目标或启动器上用于建立的IP地址和端口。 3260
iSCSI 命令封装:
发起端和目标端之间以消息的形式进行通信。PDU(Protocal Data Unit)就是用来传输这些消息的。
iSCSI 协议就是一个在网络上封包和解包的过程,在网络的一端,数据包被封装成包括TCP/IP头、iSCSI识别包和SCSI数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。iSCSI 系统由一块 SCSI 卡发出一个 SCSI 命令,命令被封装到第四层的信息包中并发送。
接收方从信息包中抽取SCSI 命令并执行,然后把返回的SCSI命令和数据封装到IP信息包中,并将它们发回到发送方。系统抽取数据或命令,并把它们传回SCSI子系统。所有这一切的完成都无需用户干预,而且对终端用户是完全透明的。 为了保证安全,iSCSI 有自己的上网登录操作
顺序。在它们首次运行的时候,启动器(initiator)设备将登录到目标设备中。
任何一个接收到没有执行登录过程的启动器的iSCSI PDU目标设备都将生成一个协议错误,而且目标设备也会关闭连接。在关闭会话之前,目标设备可能发送回一个被驳回的iSCSI PDU。这种安全性是基本的,因为它只保护了通信的启动,却没有在每个信息包的基础上提供安全性。
还有其他的安全方法,包括利用IPsec。在控制和数据两种信息包中,IPsec 可以提供整体性,实施再次(replay)保护和确认证明,它也为各个信息包提供加密。
iSCSI 会话:
iSCSI 会话建立于一个initiator与一个target之间,一个会话允许多个TCP连接,并且支持跨连接的错误恢复。大多数通信还是建立在SCSI基础之上的,例如,使用R2T进行流量控制。
iSCSI添加于SCSI之上的有:立即和主动的数据传输以避免往返通信;连接建立阶段添加登录环节,这是基于文本的参数协商。
建立一个iSCSI会话,包括
命名阶段:确定需要访问的存储,以及initiator,与FC不同,命名与位置无关;
发现阶段:找到需要访问的存储;
登录阶段:建立于存储的连接,读写之前首先进行参数协商,按照TCP连接登录。
3.3 局限性
成本高
3.4 SAN应用
SAN存储网络由于具有高带宽、独立的存储网络、管理便捷等特点。SAN主要用于存储量大的工作环境,如ISP、银行等。
3.5图片展示
下图所示是FC卡
如下图所示是FC交换机
ip-san设备
ip-san设备的接口展示
4 DAS、NAS、SAN比较
应用场景的比较
DAS比较古老了,很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业;
NAS多适用于文件服务器,比如文档、图片、静态网页等,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低;
SAN则适用于大型应用或数据库系统,缺点是成本高、较复杂。
其他对比如下图所示
1、准备
1.1、准备一个分区
#创建分区
[root@mail ~]# fdisk /dev/sda
n
P
Enter
Enter
Enter
W
#partprobe
#fdisk -l
/dev/sda4 /dev/sdb
#更新分区信息
#partprobe 重新读取分区表
[root@mail ~]# partx -a /dev/sda
1.2、准备一个空磁盘
#确认/dev/sdb设备
[root@mail ~]# fdisk -l
2、安装服务端软件
[root@mail ~]# yum install -y targetcli
3、创建
3.0、命令的使用
#targetcli
#使用ls命令查看菜单结构
/> ls
o- / … […]
o- backstores … […] 后备存储
| o- block … [Storage Objects: 2] 块设备
| | | o- LUN1 … [/dev/sdb (10.0GiB) write-thru deactivated]
| o- fileio … [Storage Objects: 0] 文件存储
| o- LUN0 … [/dev/sda5 (17.8GiB) write-thru deactivated]
| o- pscsi … [Storage Objects: 0] 物理scsi
| o- ramdisk … [Storage Objects: 0] 闪存
o- iscsi … [Targets: 2] 通过2create创建,两个分别将sdb sda5 共享出去
| o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.138cf1e3c10f … [TPGs: 1] 字符串
| | o- tpg1 … [no-gen-acls, no-auth] 共享存储的组
| | o- acls … [ACLs: 0]
| | o- luns … [LUNs: 0]
| | o- portals … [Portals: 1]
| | o- 0.0.0.0:3260 … [OK]
| o- iqn.2003-01.org.linux-iscsi.mail.x8664:sn.35c71b41d217 … [TPGs: 1]
| o- tpg1 … [no-gen-acls, no-auth]
| o- acls … [ACLs: 0]
| o- luns … [LUNs: 0]
| o-. portals … [Portals: 1]
| o- 0.0.0.0:3260 … [OK]
o- loopback … [Targets: 0]
3.1、创建LUN
#创建sda5分区为LUN0
/backstores/block> create name=LUN0 dev=/dev/sdb
#创建磁盘/dev/sdb为LUN1
/backstores/fileio> create name=LUN1 file_or_dev=/dev/sda5
#使用ls命令来查看创建的结果
/backstores/block> ls
3.2、创建IQN
注意:
在7.0版本中,创建target不会自动创建portal,但是在7.2版本中会自动创建portal,如果需要自定义ip和端口,需要在创建target之前关闭自动创建portal功能
使用以下命令
/iscsi>set group=global auto_add_default_portal=false
#使用ceate命令来创建一个IQN,我们的示例需要两个,所以执行两次该命令
/iscsi> create
#使用ls命令查看IQN的创建结果
/iscsi> ls
3.3、添加target
3.3.1、配置权限
#切换到tpg1目录,配置演示模式权限
/iscsi/iqn.20…f1e3c10f/tpg1>
#执行以下命令
/iscsi/iqn.20…f1e3c10f/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
属性认证关闭 演示模式写保护关闭 生成节点acl 缓存动态acl
注意
演示示例默认来说是不安全的如果你想了解更多安全方面的信息你可以查看, http://linux-iscsi.org/wiki/ISCSI#Define_access_rights
3.3.2、添加luns
#添加LUN0到第一个IQN
/iscsi/iqn.20…10f/tpg1/luns> create /backstores/block/LUN0
#添加LUN1到第二个IQN
/iscsi/iqn.20…217/tpg1/luns> create /backstores/fileio/LUN1
#创建完成后,切换到iscsi目录,使用ls命令查看创建结果
/iscsi> ls
3.3.3、创建portal 接口
#在第一个IQN中创建portal
/iscsi/iqn.20…/tpg1/portals> create 192.168.171.143 3260
#在第二个IQN中创建portal
/iscsi/iqn.20…/tpg1/portals> create 192.168.171.143 3261
#创建完成后,切换到iscsi目录,使用ls命令查看创建结果
/iscsi> ls
3.4、启动服务
配置完成后,使用exit命令退出程序,该程序会自动保存配置到配置文件中
/iscsi/iqn.20…/tpg1/portals> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
#启动服务
[root@mail ~]# systemctl restart target
#查看服务状态
[root@mail ~]# systemctl status target
4、验证
4.1、windows客户端
使用iscsi发起程序
4.2、linux客户端
确认客户端是否安装
[root@localhost ~]# yum install iscsi-initiator-utils
查看当前虚拟机的磁盘分区情况
发现目标,以下命令:
[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 192.168.171.143
这是全命令(iscsi辅助工具 )
iscsiadm --mode discovery --type sendtargets --portal 192.168.171.143
模式 发现 类型 发送目标 门户
登录目标:
登录服务器上的一个或多个iscsi目标
挂载命令格式:
iscsiadm --mode node --targetnameiqn.2003-01.org.linux-iscsi.localhost.x8664:sn.0f6a7f1386fc --portal 172.25.0.129:3261 --login
如下所示:
[root@localhost ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.mail.x8664:sn.5e7307059fbf -p 192.168.171.143:3261 -l
查看:
[root@localhost ~]# fdisk -l
[root@localhost ~]# lsscsi
查看和区分
[root@localhost ~]# ll /dev/disk/by-path/
查看日志
[root@localhost ~]# grep sdb /var/log/messages
自动挂载:
注意:必须使用UUID,否则会出问题,同时在参数中添加_netdev。
UUID=33899a29-9f9e-476f-b8e9-cc9ad0986dac /mnt xfs defaults,_netdev 0 0
开机启动关闭防火墙
原因:当计算机开机首先是bios自检查找硬盘中的操作系统引导启动,但是当系统没有完全启动时计算机就没有通过网络通讯,而iscsi是基于网络的共享存储,所以开机重启需要告诉内核这条开机挂在是基于网络的存储。
删除:
targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.mail.x8664:sn.5e7307059fbf