数据往往是应用程序(架构)核心,那么如何存储数据就非常重要。

一、常见的存储技术(存储架构)

1、DAS(Direct Attacted Storage 直接附加存储)

顾名思义,直接附加存储就是将存储直接附加在应用服务器中来实现数据的存储。存储设备是通过接口类型于应用程序服务器连接的。

常见的接口类型有:

IDE (并行):数据可能有干扰 理论:133MB/s。早期是叫做ATA

SATA (串行)II: 3Gbps III: 6Gbps

IDE速度慢,出现了SCSI(Smal System System Interface)。

SCSI接口:

UltraSCSI-320:320MB/s

UltraSCSI-640:640MB/s

SAS: 6Gbps

USB,sSATA,1394

现在直连式存储与服务器主机之间的连接通道通常采用SCSI协议连接

2、NAS(Network Attacted Storage 网络附加存储)

一般说来,NAS是文件服务器。像NFS,Samba等。提供文件级别的共享。

3、SAN(Storage Aere Network 存储区域网络)

简单的来说就是借助于网络来传输SCSI协议报文。 操作系统中的内核中有对应的scsi模块。借助于隧道模式将 SCSI 报文传输出去。还需要底层的硬盘接口虚拟为scsi接口。

二、SCSI之间的通信模型

SCSI之间通信是一种C/S架构。

客户端:

叫做Initator(发起者 C)

服务端:

这里称之为Target:(目标 S),每个Target可包含多个LUN(Logical Unit Number 逻辑单元)。真正提供服务的是LUN。

下图是SCSI协议之间通信的过程:

三、操作系统如何识别SCSI协议的报文(设别协议的过程)

操作系统接收到SCSI报文后,请求数据(读写)的过程如下:

内核空间:系统调用 --》 虚拟文件系统 --》 文件系统 --》 buffer cache --》 驱动 --》 SCSI接口

用户空间:通过GNU c library 调用内核空间的系统调用

如下图:

所谓iSCSI是利用tcp/ip协议来传输SCSI报文的一种机制。

四、DIY(Do It Youself) iSCSI

说明:

172.166.10.16 Target端

在服务端:

### Target端:(172.16.10.16)
1、准备要共享的设备,这里使用本地磁盘上的新分区代替(只需要分区,不需要格式化即可)
fdisk /dev/sda
partx -d /dev/sda
partx -a /dev/sda

准备好共享磁盘后,继续以下的操作:

2、安装iscsi服务端:
yum -y install scsi-target-utils
service tgtd start
chkconfig tgtd on
netstat -tnlp | grep 3260

服务端的配置,可以使用命令方式,也可使用配置文件的方式。

使用tgtadm命令方式配置SCSI服务:

tgtadm命令的介绍:

tgtadm 是一个模式化的命令
使用格式:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
常见的模式(mode):target logicalunit account
#####################################################
target模式的管理命令:管理targetnew:创建一个新的 targetshow:显示targetdelete:删除targetupdate:更新(修改)targetbind:基于IP地址控制unbind:解除绑定
#####################################################
logicalunit模式的管理命令:关联tid和后端磁盘new:创建一个新的LUNdeltete:删除一个已有的LUN
#####################################################
account模式的管理命令:管理account CHAP(挑战式握手应用) 单向认证 newdeltetebindunbid
#####################################################
target和Initator之间是通过iqn名称来通信的
iqn格式名称:iqn.yyyy-mm.reverse-domaim-name:string[.sunstring]
例如:iscsi-iname -p iqn.2014-09.com.magedu.target也可通过命令的生成的方式:iscsi-iname -p iqn.2014-09.com.magedu
#####################################################
示例:
# (1)、添加一个新的 target 且其ID为 [id], 名字为 [name].
--lld [driver] --op new --mode target --tid=[id] --targetname [name]# (2)、显示所有或某个特定的target:
--lld [driver] --op show --mode target [--tid=[id]]# (3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。
## [path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。
--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]# (4)、删除ID为[id]的target:
--lld [driver] --op delete --mode target --tid=[id]# (5)、删除target [id]中的LUN [lun]:
-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]# (6)、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的
#  initiator客户端的列表:
--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]# (7)、解除target [id]的访问控制列表中[address]的访问控制权限:
--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]

通过tgtadm命令提供SCSI服务:

步骤如下:
# 创建一个target:
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2014-09.com.magedu:test2
# 创建LUN,号码为1:
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5# 开放给172.16.0.0/16网络中的主机访问:
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.0.0/16
其中的-I相当于--initiator-address

创建完成后,可以使用如上图的命令查看,查看正确后,服务端配置完成。

在客户端:

这里使用的地址是:172.16.10.22

客户端配置(Initiator):
yum install iscsi-initiator-utils # 客户端管理工具# 以下配置是非必需的,默认情况下,会有一个默认的iqn名称
echo "InitiatorName=`iscsi-iname -p iqn.2014-09.com.magedu`" >  \/etc/iscsi/initiatorname.iscsi
echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsiservice iscsi start
chkconfig iscsi on

客户端Initator使用iscsiadm命令来发现,登陆设备。

iscsiadm命令的介绍:

iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个。
如果没有额外指定其它选项,则discovery和node会显示其相关的所有记录;
session用于显示所有的活动会话和连接
fw显示所有的启动固件值
host显示所有的iSCSI主机
iface显示/var/lib/iscsi/ifaces目录中的所有ifaces设定。# 用法如下:
iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] \[ -I iface -t type -p ip:port [ -l ] ]
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] \[ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] \[ -l | -u | -R | -s] ] [ [ -o operation ] # 参数说明:
-d, --debug=debug_level   显示debug信息,级别为0-8;
-l, --login
-t, --type=type  这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;
-p, --portal=ip[:port]  指定target服务的IP和端口;
-m, --mode op  可用的mode有discovery, node, fw, host iface 和 session
-T, --targetname=targetname  用于指定target的名字
-u, --logout
-o, --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;
-I, --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

通过iscsiadm命令发现target命令:

iscsiadm -m discovery -t sendtargets -p 172.16.10.16
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16 -l

登陆成功后,在客户端会发现多了一块磁盘,可以向本地磁盘一样,分区、格式化、挂载使用。

完成挂载使用。

Target端使用配置文件配置:

一般情况下,在服务端是使用配置文件。使用命令式为了更好的了解Target端的工作模式。

# 配置文件/etc/tgt/targets.conf <target iqn.2014-09.com.magedu:test2>backing-store /dev/sda5initiator-address 172.16.0.0/16
</target>

如果客户端不想使用的话,可以登出

iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -u
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -o delete
# 必要的时候,使用
rm -rf -rf /var/lib/iscsi/send_targets/*

补充:

创建服务端谁所需要的帐号,并实现单方向的认证:1、在target端创建帐号christina,并为其授予访问某tid的权限:
# tgtadm --lld iscsi --op new --mode account --user mageedu --password 123456接下来还要将用户与某target进行绑定:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user mageedu
# tgtadm --lld iscsi --op show --mode account2、编辑initiator端主配置文件,配置客户端登录target时使用此帐号和密码:
# vim /etc/iscsi/iscsid.conf取消如下项的注释:
# node.session.auth.authmethod = CHAP
# node.session.auth.username = username
# node.session.auth.password = password而后,将后两项的用户名密码设置为target端设置的用户名和密码:
node.session.auth.username = mageedu
node.session.auth.password = 123456哪果此前尚未登录过此target,接下来直接发现并登入即可。否则,则需要按照下面的第三步实现认证的启用。3、如果initiator端已经登录过此target,此时还需要先注销登录后重启iscsid服务,并在删除此前生成的database后重新发现target,并重新登入,过程如下:# iscsiadm -m session -r sid -u# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -u
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -o delete
# rm -rf -rf /var/lib/iscsi/send_targets/172.16.10.16:3260
# service iscsid restart# iscsiadm -m discovery -t sendtargets -p 192.168.0.11
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -l说明:其中的target名字和target主机地址可能需要按照您的实际情况修改。

配置完成。

转载于:https://blog.51cto.com/guoting/1556487

iSCSI原理和实现相关推荐

  1. IP网络存储iSCSI之一iSCS的概念、组成及工作原理

    一.iscsi的概念 iscsi,即internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射为以太网数据包.iscsi技术最初由cisco和ibm两家公司开发,并且得到了广大IP ...

  2. ISCSI概念、构架、连接方式、组成和工作原理

    本文是参照 高俊峰 老师的 构建高性能Linux服务器的视频写的.希望能给有需要的人一点帮助,同时也是为了方便自己. 1.存储的一些概念和术语: SCSI:小型计算机系统接口(Small Comput ...

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

    1.SAN网络 SAN,即存储区域网络(storage area network and SAN protocols),它是一种高速网络实现计算机与存储系统之间的数据传输.常见的分类是FC-SAN和I ...

  4. 【I/O-网卡】网卡工作原理及分类:以太网卡,FC HBA,iSCSI HBA

    网卡工作在物理层和数据链路层 参考:https://zhidao.baidu.com/question/441234047.html?qbl=relate_question_1&word=%C ...

  5. iSCSI的原理及配置

    iSCSI,即Internet Small Computer System Interface,Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术. ...

  6. blktrace 工具集使用 及其实现原理

    文章目录 工具使用 原理分析 内核I/O栈 blktrace 代码做的事情 内核调用 ioctl 做的事情 BLKTRACESETUP BLKTRACESTOP BLKTRACETEARDOWN 内核 ...

  7. iscsi没有可用于使用快速连接登陆的目标_iSCSI的基本架构及操作简介

    iSCSI是由IBM发明的基于以太网的存储协议,该协议与SUN的NFS协议都是为了解决存储资源共享问题的解决方案.两者意图一致,只不过两者是不同的实现方式,前者在客户机上呈现的是一个块设备,而后者则是 ...

  8. 网络文件系统(samba、nfs、iscsi)

    一.samba服务简介 1.smb协议 smb(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及 ...

  9. 从无盘启动看 Linux 启动原理

    作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了 volumio(https://volu ...

最新文章

  1. asp.net编程:asp.net中如何设置页面的编码
  2. 接口自动化(四)--数据依赖的处理
  3. ConfigParser模块简明教程
  4. 洛谷P1083 [NOIP2012提高组Day2T2]借教室
  5. fatal error C1189: #error : Building MFC application with /MD[d]
  6. 如何防止单例模式被JAVA反射攻击
  7. linux redhat 6.3: /lib/libz.so.1: no version information available
  8. java测试磁盘读写速度_用来测试自己硬盘读写性能的代码勿尝试
  9. 加密机组会 会议纪要
  10. 在opencv3中的机器学习算法
  11. JavaScript、canvas小球加速和减速运动
  12. jest : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\jest.ps1,因为在此系统上禁止运行脚本
  13. 99乘法表,读写文件,函数
  14. 计算机sci 四区,sci四区什么水平
  15. 手机屏幕按键测试软件,涨见识了——手机居然能作为维修检测工具来用!
  16. Rstudio与R的绑定和更新
  17. 好心情心理咨询平台:独处≠孤独,独处对心理健康有多重要?
  18. 大数据阿里云工具之DataWorks(一)
  19. 计算机集群搭建教程,Windows搭建Redis集群-详细教程
  20. three js 报错, 贴图黑乎乎

热门文章

  1. HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
  2. Python中fnmatch模块的使用
  3. iOS导航栏标题错乱的解决方法
  4. 首个最全的MongoDB 3.6 全览
  5. SQL 解决从分组数据中总是挑选第一条数据的问题
  6. java.io.IOException: No FileSystem for scheme: hdfs
  7. 正确实现用spring扫描自定义的annotation
  8. 怎么申请 bing api key
  9. maven实现依赖的“全局排除”
  10. tar 解压缩命令详解