Chinaunix首页 | 论坛 | 博客

分类: 服务器与存储

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 target:就是储存设备端,存放磁盘或RAID的设备,目前也能够将Linux主机模拟成iSCSI target了! 目的在提供其他主机使用的『磁盘』;
  • iSCSI initiator:就是能够使用target的用户端,通常是服务器。 也就是说,想要连接到iSCSI target的服务器,也必须要安装iSCSI initiator的相关功能后才能够使用iSCSI target提供的磁盘。

配置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.:identifier  

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 就是透过一个网路介质,将现有的磁盘给分享出去就是了。那么有哪些类型的磁盘可以分享呢?这包括:

  • 使用dd 指令所建立的大型文件可供模拟为磁碟(无须预先格式化);
  • 使用单一分区(partition) 分享为磁盘;
  • 使用单一完整的磁盘(无须预先分区);
  • 使用磁碟阵列分享(其实与单一磁盘相同方式);
  • 使用软磁盘阵列(software raid) 分享成单一磁盘;
  • 使用LVM 的装置分享为磁盘。

其实没有那么复杂,我们大概知道可以透过(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等,以后真正实践了再更新吧。第一次写技术博客,写的时候又是激动又是骄傲的,有很多不好的地方,以后会多多注意,我相信只要多做,多写,多理解,一定可以变得更优秀。。。

阅读(150) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册