To be a better coder
分类: 服务器与存储
2018-01-09 16:36:37
原文地址:学习笔记之iSCSI 作者:yanjerry9133
谈到iSCSI,我能想到的就是存储分为NAS和SAN,NAS与SAN都是在DAS的基础上发展起来的,是新型数据存储模式中的两个主要发展方向。
网络存储技术(Network Storage Technologies) 网络存储技术是基于数据存储的一种通用网络术语。网络存储结构大致分为三种:直连式存储(DAS:Direct Attached Storage)、网络连接式存储(NAS:Network Attached Storage)和存储网络(SAN:Storage Area Network)。
直连式存储(DAS)
是一种直接与主机系统相连接的存储设备,如作为服务器的计算机内部硬件驱动。
将存储设备通过SCSI 接口或光纤通道直接连接到一台计算机上。其缺点是服务器成为网络瓶颈,存储容量不易扩充; 服务器发生故障时,连接在服务器上的存储设备中的数据不能被存取。
网络连接式存储(NAS)
一种采用直接与网络介质相连的特殊设备实现数据存储的机制。由于这些设备都分配有 IP 地址,所以客户机通过充当数据网关的服务器可以对其进行存取访问,甚至在某些情况下,不需要任何中间介质客户机也可以直接访问这些设备。
NAS的优点
第一,NAS适用于那些需要通过网络将文件数据传送到多台客户机上的用户。NAS设备在数据必须长距离传送的环境中可以很好地发挥作用。
第二,NAS设备非常易于部署。可以使NAS主机、客户机和其他设备广泛分布在整个企业的网络环境中。NAS可以提供可靠的文件级数据整合,因为文件锁定是由设备自身来处理的。
第三,NAS应用于高效的文件共享任务中,例如UNIX中的NFS和Windows NT中的CIFS,其中基于网络的文件级锁定提供了高级并发访问保护的功能。
存储网络(SAN)
SAN 是指存储设备相互连接且与一台服务器或一个服务器群相连的网络。其中的服务器用作 SAN 的接入点。在有些配置中,SAN 也与网络相连。SAN 中将特殊交换机当作连接设备。它们看起来很像常规的以太网络交换机,是 SAN 中的连通点。SAN 使得在各自网络上实现相互通信成为可能,同时并带来了很多有利条件。
SAN的优点SAN是通过网线连接的磁盘阵列,具备磁盘阵列的所有主要特征:高容量、高效能、高可靠。
1、SAN 具有安装容易、快速的特点
2、易于维护
3、非常好的可扩展性
4、具有更快的响应速度和更高的数据带宽
5、对服务器的要求降低,可大大降低服务器的成本,有利于高性能存储系统在更广的范围内普及及应用。
NAS与SAN的区别
NAS有文件操作和管理系统,而SAN却没有
SAN主要是高速信息存储,NAS偏重文件共享。
SAN和NAS相比不具有资源共享的特征
SAN是只能独享的数据存储池,NAS是共享与独享兼顾的数据存储池。
NAS是网络外挂式,而SAN是通道外挂式。
SAN高效可扩,NAS简单灵活
一般用在NAS中的有CIFS(在windows主机之间进行网络文件共享),NFS(用于unix上的网络文件系统),在SAN中有iSCSI(Internet 小型计算机系统接口),FCP(光纤信道协议)
ESX storage只支持NFS,iSCSI,FCP协议,不支持cifs协议
说了这么多有的没的,下面开始进入正题iSCSI
什么是 iSCSI:
早期的企业使用的服务器若有大容量磁盘的需求时,通常是透过SCSI来串接SCSI 磁盘,因此服务器上面必须要加装SCSI卡,而且这个SCSI是专属于该服务器的。 后来这个外接式的SCSI设备被SAN的架构所取代,在SAN的标准架构下,虽然有很多的服务器可以对同一个SAN 进行存取的动作,不过为了速度需求,通常使用的是光纤通道。但是光纤通道很贵,不但设备贵,服务器上面也要有光纤卡,很麻烦,所以光纤的SAN在中小企业很难普及。
后来网络实在太普及,尤其是以IP封包为基础的LAN技术已经很成熟,再加上以太网路的速度越来越快,所以就有厂商将SAN的连接方式改为利用IP技术来处理。 然后再透过一些标准的设定,最后就得到Internet SCSI (iSCSI)这个的产生! iSCSI主要是透过TCP/IP的技术,将储存设备端透过iSCSI target (iSCSI目标端)功能,做成可以提供磁盘的服务器端,再透过iSCSI initiator (iSCSI初始化用户)功能,做成能够挂载使用iSCSI target的用户端,如此便能透过iSCSI设置来进行磁盘的应用了。
也就是说,iSCSI 这个架构主要将储存装置与使用的主机分为两个部分,分别是:
配置iSCSI实验环境:两台主机
主机A:
主机名:Jerry (initiator端)
eth0:192.168.186.130
主机B:
主机名:Tom(target端)
eth0:192.168.186.207
先来配置initiator端
安装iscsi initiator
可以用rpm –qa |grep iscsi查看是否安装,iscsi initiator可以从linux系统镜像中找到.rpm安装就行。
安装好以后,我们再来看看initiator的配置文件
/etc/iscsi/initiatorname.iscsi 只有一行iqn,是target端识别initiator的唯一标识,默认就行。
iqn.yyyy-mm.
iqn.年-月.单位网域名的反转写法:这个分享的target名称
例如我的就是:iqn.2012-04.com.redhat:2cc7d328b934
这个iqn是initiator端 /etc/iscsi/initiatorname.iscsi文件中的,即target端通过initiator端的iqn号把新设备/dev/sdb 注册给initiator,这样initiator就可以用了新的磁盘了。
/etc/iscsi/iscsid.conf 主要的配置文件
node.startup = automatic 是表示当iscsi initator启动时就会自动登陆到target。
“CHAP Settings” 主要是一些安全设置。
“Timeouts” 部分是我们重点关注的地方:
node.session.timeo.replacement_timeout 指网络出现问题,多长时间通知上层:
node.session.timeo.replacement_timeout = 120
一般我们可以把这个时间改小,防止IO被hang太长时间,如:
node.session.timeo.replacement_timeout = 3
下面两个时间是sessison登录和登出Target的超时时间,也可以适当减少。
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval 指发ping包的时间间隔,
node.conn[0].timeo.noop_out_timeout 为接收心跳包的超时时间
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
这两个时间根据需要减少,如:
node.conn[0].timeo.noop_out_interval = 1
node.conn[0].timeo.noop_out_timeout = 1
node.session.initial_login_retry_max 为登录的重试次数:
node.session.initial_login_retry_max = 4
可以适当减少到 2:
node.session.initial_login_retry_max = 2
启动iscsi initiator服务
#service iscsi start或#/etc/init.d/iscsi start
配置target端
iSCSI 就是透过一个网路介质,将现有的磁盘给分享出去就是了。那么有哪些类型的磁盘可以分享呢?这包括:
其实没有那么复杂,我们大概知道可以透过(1)大型文件; (2)单一分区; (3)单一设备(包括磁盘、阵列、软磁盘阵列、LVM装置文件等等) 来进行分享。要注意,等一下我们要分享出去的资料,最好不要被使用,也最好不要开机就被挂载(/etc/fstab 当中没有存在记录的意思)
既然iSCSI要分享的是磁盘,那么我们要准备一个新的磁盘,在虚拟机中加一块新的磁盘/dev/sdb
解压软件包
#cd /usr/local/src/
#tar zxvf iscsitarget-1.4.20.2.tar.gz
#make
#make install
加入系统服务
#chkconfig --add iscsi-target 就可以通过service iscsi-target start来启动他了
配置iSCSI target
#vim /etc/iet/ietd.conf
Target iqn.2012-04.com.redhat:2cc7d328b934
Lun 0 Path=/dev/sdb,Type=blockio,ScsiId=xyz,ScsiSN=xyz
其中内容中的Target后面是Target的名称,一般名称为:iqn..com. : ,
其中为年月, 为主机名,< 为存储的名称,可以随便起一个名字。
Lun 1是指这个设备共享出去的Lun Id,同一个Target Lun Id不能重复。Type=blockio是指定使用blockio的方式,
也可以使用fileio,如果使用了fileio,会使用操作系统的文件缓存,如果出现掉电,可能会丢数据。使用blockio则没有这个问题。
IscsiId是这个Lun的名字,随便起一个名字就可以了。
启动iSCSI target
#service iscsi-target start
查看iSCSI-target共享出的硬盘
#cat /proc/net/iet/volume
查看客户端(initiator端)登陆到target的情况
#cat /proc/net/iet/session
两端的基本配置设置好后
iscsi initiator主要通过iscsiadm命令管理,我们先查看提供服务的iscsi target机器上有哪些target:
#iscsiadm --mode discovery --type sendtargets --portal 192.168.186.207
然后就可以登陆某个target了,登陆成功某个target后,这个target下的硬盘也就都共享过来了:
#iscsiadm --mode node --targetname iqn.2012-04.com.redhat:2cc7d328b934 –portal 192.168.186.207:3260 --login
登陆之后要对新磁盘进行分区,格式化,然后在挂载即可
完成这些命令后,iscsi initator会把这些信息记录到/var/lib/iscsi目录下:
/var/lib/iscsi/send_targets记录了各个target的情况,/var/lib/iscsi/nodes记录了各个target下的nodes情况。
下次再启动iscsi initator时(service iscsi start),就会自动登陆各个target上。如果想让重新手工登陆各个target,需要把/var/lib/iscsi/send_targets目录下的内容和/var/lib/iscsi/nodes下的内容全部删除掉。
要查看各个iscsi的信息:
# iscsiadm -m session -P 3
这个只是简单地共享一个磁盘,真正的企业中用到的应该是共享raid,nfs等,以后真正实践了再更新吧。第一次写技术博客,写的时候又是激动又是骄傲的,有很多不好的地方,以后会多多注意,我相信只要多做,多写,多理解,一定可以变得更优秀。。。