本文主要介绍基于IP SAN的网络存储iSCSI。iSCSI技术以其低廉的构建成本和优秀的 存储性能博得了很多CIO和存储管理员的苒爱,目前陆续进入企业应用领域,推动了企业的存储环境向集中式转变。虽然,目前对于iSCSI应该在什么样的环境中使用还存在着诸多争议,但是iSCSI的前途是光明的,在未来的存储世界中,iSCSI—定会占据重要的席位, 本文重点介绍iSCSI在Linux环境下的配置和使用,
1.1存储的概念与术语
在存储的世界里,有各种各样的名词和术语,常见的有SCSI、FC、DAS、NAS、SAN等。 本节重点介绍与存储相关的术语和知识。
1.1.1 SCSI 介绍
SCSI是小型计算机系统接口(Small Computer System Interface)的简称,SCSI作为输 入/输出接口,主要用于硬盘、光盘、磁带机、扫描仪、打印机等设备。
1.1.2 FC 介绍
FC是光纤通道(Fibre Channel)的简称,是一种适合于千兆数据传输的、成熟而安全的解决方案.与传统的SCSI技术相比,FC提供更髙的数据传输速率,更远的传输距离,更多的设备连接支持,更稳定的性能,更简易的安装。
1.1.3 DAS 介绍
DAS是直连式存储(Direct-Attached Storage)的简称,是指将存储设备通过SCS丨接口 或光纤通道直接连接到一台计算机上。当服务器在地理上比较分散,很难通过远程进行互连 时,DAS是比较好的解决方案。但是这种式存储只能通过与之连接的主机进行访问,不能实现数据与其他主机的共享,同时,DAS会占用服务器操作系统资源,例如CPU资源、丨O资 源等,并且数据置越大,占用操作系统资源就越严重。
1.1.4 NAS 介绍
网络接入存储(Network-Attached Storage)简称NAS,它通过网络交换机连接存储系统和服务器,建立专门用于数据存储的私有网络,用户通TCP/IP协议访问数据,采用业界标准的文件共享协议如NFS、HTTP、CIFS来实现基于文件级的数据共享。NAS存储使文件共车访问变得更方便和快捷,并且能很容易地增加存储容量。通过专业化的文件服务器与存储技术相结合,NAS为那些需要共享大量文件数据的企业提供了一个高效的、高可靠的、 高性价比的解决方案。佴是NAS也有一定的局限性,它会受到网络带宽和网络拥堵的影响, 在一定程度上限制了NAS的网络传输能力。
1.1.5 SAN 介绍
存储区域网络(Storage Area Network)简称SAN,它是一种通过光纤交换机、光纤路由器、光纤集线器等设备将磁盘阵列、磁带等存储设备与相关服务器连接起来的高速专用子网。
SAN由3个部分组成,分别是连接设备(如路由器、光纤交换机和Hub)、接口(如 SCSI、FC)、通信协议(如IP和SCSI)。这3个部分再加上存储设备和服务器就构成了一个 SAN系统。SAN提供了一个灵活的、高性能的和高扩展性的存储网络环境,它可以更加有 效地传输海置的数据块。由于采用了光纤接口,因此SAN还具有更髙的带宽,同时,SAN 也使统一管理和集中控制实现简化。现在SAN已经广泛应用于ISP和银行等,随着用户业 务量的增大,SAN的应用前景将越来越光明.
1.2 iSCSI的概念
iSCSI,即internet SCSI,是IETF制丨了的一项标准,用干将SCSI数据块映射为以太网数据包。从根本上说,它是一种某干IP Storage理论的新型存储技术,该技术将存储行业广泛应用的SCSI接口技术与IP网络技术相结合,可以在IP网络上构建SAN。简单地说,iSCSI就是在IP网络上运行SCSI协议的一种网络存储技术。iSCSI技术最初由Cisco和IBM 两家开发,并且得到了广大IP存储技术爱好者的大力支持,这几年得到迅速的发展壮大。
对于中小企业的存储网络来说,iSCSI是个非常好的选择,首先,从技术实现来讲, iSCSI是基于IP协议的技术标准,它允许网络在TCP/IP协议上传输SCSI命令,实现SCSI 和TCP/IP协议的连接,这样用户就可以通过TCP/IP网络来构建SAN,只需要不多的投资, 就可以方便、快捷地对信息和数据进行交互式传输和管理。但是,在iSCSI出现之前,构建 SAN的唯一技术是利用光纤通道,这要花费很大的建设成本,一般中小企业无法承担。其次,iSCSI技术解决了传输效串、存储容量、兼容性、开放性、安全性等方面的诸多问题,在性能上绝不输给商业的存储系统或光纤存储网络。
iSCSI的优势主要表现为:首先,iSCSI沿用TCP/IP协议,而TCP/IP是在网络方面最通用、最成熟的协议,且IP网络的基础建设非常完善,同时,SCSI技术是被磁盘和磁带等设备广泛采用的存储标准,这两点使iSCSI的建设费用和维护成本非常低廉:其次,iSCSI 支持一般的以太网交换机而不是特殊的光纤通道交换机,从而减少了异构网络带来的麻烦: 还有,iSCSI是通过IP封包传输存储命令,因此可以在整个Internet上传输数据,没有距离的限制。
1.3 FC SAN 与 IP SAN 注释: FCoE:是思科专有的协议你懂得!
在iSCSI技术出现后,通过IP技术搭建的存储网络也应运而生,SAN技术也就出现了两种不间的实现方式,即FC SAN与IP SAN。简单来说,以光纤搭建的存储网络就是FC SAN,以iSCSI技术搭建的存储网络叫做IP SAN,
作为SAN的两种实现方式,FCSAN与IPSAN各有优劣,下面从几个方面分别阐述。
▲在数据传输方式上,FC SAN与IP SAN都采用块协议方式来完成。这是它们的相同点。
▲在传输速度上,就目前的传输速率而言,FCSAN(2Gbit/s)最快,iSCSI(lGbit/s)次之。
▲在传输距离上, FC SAN理论上可以达到100公里,而事实上,传输超过50公里后, 就会出现瓶颈。而通过丨P网络的iSCSI技术在理论上没有距离的限制,即iSCSI可以 进行没有距离限制的数据传输。
▲在管理及维护成本上,架设FCSAN网络需要投入很多硬件成本,并且需要特定的工 具软件进行操作管理,而IPSAN构建成本低廉,由干iSCSI是通过IP网络来传输数据和分配存储资源的,因此只要在现有的网络上进行管理和使用即可,这样就可以省下大笔的管理费用及培训成本。
其实IPSAN也面临着一些不可回避的困扰:首先,基于IP SAN的网络存储还没有得到用户的充分肯定:其次,IPSAN存储需要专门的驱动和设备,幸运的是,一些传统的光纤适配器厂商都发布了iSCSI HBA设备,同时Inter也推出了专用的IP存储适配器,而 Microsoft、HP、Novell、SUN、AIX' Linux 也具有 iSCSI Initiator 软件,并且免费供用户使用:还有,在安全方面,IPSAN虽然有一套规范的安全机制,但是尚未得到用户的认可。
这些问题和困扰虽然会妨碍iSCSI的发展,但是相信在未来的网络存储世界里,IPSAN 绝对会拥有一席之地。
1.4 iSCSI的组成
一个简单的iSCSI系统大致由以下部分组成:
▲ iSCSI Initiator 或者 iSCSI HBA
▲ iSCSI Target
▲以太网交换机
▲—台或者多台服务器
一个完整的iSCSI系统的拓扑结构如图1.1所示:
在图1-1中,iSCSI 服务器用来安装iSCSI驱动程序,即安装iSCSI Initiator; Storage Router可以是以太网交换机或者路由器:iSCSI存储设备可以是iSCSI磁盘阵列,也可以是具有存储功能的PC服务器,下面详细介绍一下iSCSI Initiator与iSCSI Target的含义。
1.4.1 iSCSI Initiator
iSCSI Initiator是一个安装在计算机上的软件或硬件设备,它负责与iSCSI存储设备进行通信。
iSCSI服务器与iSCSI存储设备之间的连接方式有两种:第一种是基于软件的方式,即iSCSI Initiator软件。在iSCSI服务器上安装Initiator后,Initiator软件可以将以太网卡虚拟为iSCSI卡,进而接受和发送iSCSI数据报文,从而实现主机和iSCSI存储设备之间的iSCSI协议和TCP/IP协议传输功能。这种方式只需以太网卡和以太网交换机,无需其他设备,因此成本是最低的。但是iSCSI报文和TCP/IP报文转换需要消耗iSCSI服务器的一部分CPU资源,只有在低I/O和低带宽性能要求的应用环境中才能使用这种方式。
第二种是硬件iSCSI HBA (Host Bus Adapter)卡方式,即iSCSI Initiator硬件。这种方式需要先购买iSCSI HBA卡,然后将其安装在iSCSI服务器上,从而实现iSCSI服务器与交换机之间、iSCSI服务器与存储设备之间的高效数据传输。与第一种方式相比,硬件iSCSI HBA卡方式不需要消耗iSCSI服务器的CPU资源,同时硬件设备是专用的,所以基于硬件的iSCSI Initiator可以提供更好的数据传输和存储性能。但是,iSCSI HBA卡的价格比较昂贵,因此用户要在性能和成本之间进行权衡。
iSCSI Initiator软件一般都是免费的,Centos和RHEL对iSCSI Initiator的支持都非常不错,现在的Linux发行版本都默认自带了 iSCSI Initiator.
1.4.2 iSCSI Target
一个可以用于存储数据的iSCSI磁盘阵列或者具有iSCSI功能的设备都可以被称 为“iSCSI Target”,因为大多数操作系统都可以利用一些软件将系统转变为一个“iSCSI Target".本文重点讲述如何构建一个PC构架的iSCSI存储系统。所谓PC构架就是选择一个普通的、性能优良的、可支持多块磁盘的PC (—般为PC服务器),再选择一款相对成熟稳定的iSCSI Target软件,将iSCSI Target软件安装在PC服务器上,使普通的PC服务器转变成一台iSCSI存储设备,并通过PC服务器的以太网卡对外提供iSCSI数据传输服务,
目前大多数iSCSI Target软件都是收费的,例如DataCore Software的SANmelody, FalconStor Software 的 iSCSI Server for Windows 等,这些都是 Windows 平台支持的。不过,也有一些Linux平台的开源iSCSI Target软件,例如iSCSI Enterprise Target,后面的内容会重点介绍这个软件。
利用iSCSI Target软件,可以将服务器的存储空间分配给客户机使用,客户机可以像使用本地硬盘一样使用iSCSI磁盘,包括对其进行分区、格式化及读写等,而且毎个客户端都可以向iSCSI磁盘写数据,互不干扰,并且不会破坏存储到服务器中的数据。同时,iSCSI Target软件对用户权限控制非常灵活,支待配置文件。
我们知道,iSCSI是使用TCP/IP协议进行通信的,因此,将iSCSI两端连接起来,仅仅需要一个以太网络就可以了。由此可知,iSCSI的存储性能和这个以太网络有直接关系,所以最好在iSCSI网络中使用千兆以太网交换机,劣质的网络设备会严重影响存储系统的性能,也就是说,要为每个服务器配备髙质量的千兆以太网交换机,并提供两个连接。对于iSCSI Target,应该为每个独立阵列中的两个独立端口配备交换机,最后将交换机连接起来, 采用这种配置方式,即使两个交换机中的一个出现了故障,整个iSCSI存储系统仍然能够正常工作,这保证了存储系统的不间断运行。
1.5 iSCSI的工作原理
要理解iSCSI的工作原理,就必须知道iSCSI的层次结构。根据OSI模型,iSCSI的协 议自顶向下一共可以分为三层,如图1-2所示。
下面对每个分层进行简单介绍。
▲ SCSI层:根据客户端发出的请求建立SCSI CDB (命令描述块),并传给iSCSI层。 同时接收来自iSCSI层的CDB,并向应用返回数据
▲ iSCSI层:对SCSI CDB进行封装,以便能够在基于TCP/IP协议的网络上进行传输,完成SCSI到TCP/IP的协议映射,这一层是iSCSI协议的核心 层。本文也主要针对这一层的配置和管理进行介绍。
▲ TCP/IP层:对IP报文进行路由和转发,并且提供端到端的透明可靠的传输。 iSCSI协议定义了在TCP/IP网络 发送、接收数据块存储数据的规则和方式。先发送端将SCSI命令和数据封装到TCP/IP包中,然后通过IP网络转发,接收端收到TCP/IP包之后,将其还原为SCSI命令和数据并执行,执行完成后,将返回的SCSI命令和数据再封装到 TCP/IP包中,之后再传回发送端。这样就完成了数据传输的整个过程。
iSCSI的整个数据传输过程在用户 看来是完全透明的,用户使用远端的存储设备就像使用本地的硬盘设备一样。不过,这只是理论状态,实际iSCSI的数据传输速率并不能完全达到本地硬盘的数据传输速率,但差别并不明显。而且这种网络存储模式还有一个优点是安全性髙,这对于数据集中存储的iSCSI来说显然非常审要。
图1-3 显示出 SCSI 如何通过 iSCSI 层映射到 TCP/IP,使 SCSI 脱离其并行总线结构.利用 SCSI 和 IP 实现网络化存储
环境Centos6.5
Target:
1、准备要共享的设备,这里使用本地磁盘上的新分区:
建立所需要的新分区
# fdisk /dev/sda
# partprobe
2、安装iscsi服务端:
# yum -y install scsi-target-utils
# service tgtd start
# chkconfig tgtd on
# netstat -tnlp | grep 3260
3、服务端配置管理工具tgtadm的使用:
tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
(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]
例如:
(1)创建一个target:
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2013-05.com.magedu:tsan.disk1
(2)显示所有:
# tgtadm --lld iscsi --op show --mode target
(3)显示刚创建的target:
# tgtadm --lld iscsi --op show --mode target --tid 1
(4)创建LUN,号码为1:
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
(5)开放给192.168.0.0/24网络中的主机访问:
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.0.0/16
其中的-I相当于--initiator-address
(6)Create a new account:
# tgtadm --lld iscsi --op new --mode account --user christina --password 123456
# tgtadm --lld iscsi --op show --mode account
Assign this account to a target:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user christina
# tgtadm --lld iscsi --op show --mode target
(7)Set up an outgoing account. First, you need to create a new account like the previous example
# tgtadm --lld iscsi --op new --mode account --user clyde --password 123456
# tgtadm --lld iscsi --op show --mode account
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user clyde --outgoing
# tgtadm --lld iscsi --op show --mode target
客户端配置:
# yum install iscsi-initiator-utils
# echo "InitiatorName=`iscsi-iname -p iqn.2014-04.com.firefox`" > /etc/iscsi/initiatorname.iscsi
# echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi
# service iscsi start
# chkconfig iscsi on
2、iscsiadm工具的使用:
iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discoverydb、node、fw、session、host、iface几个,如果没有额外指定其它选项,则discoverydb和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 -m discovery -t sendtargets -p 192.168.0.11
# iscsiadm -m node -T iqn.2014-04.com.firefox:tsan.disk1 -p 172.16.249.7:3260 -l
Logging in to [iface: default, target: iqn.2014-04.com.firefox:tsan.disk1, portal: 172.16.249.7,3260] (multiple)
Login to [iface: default, target: iqn.2014-04.com.firefox:tsan.disk1, portal: 172.16.249.7,3260] successful.
[root@node5 ~]# fdisk -l /dev/sd[a-z]
Disk /dev/sdb: 4078 MB, 4078715904 bytes
126 heads, 62 sectors/track, 1019 cylinders
Units = cylinders of 7812 * 512 = 3999744 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
[root@node5 ~]# fdisk /dev/sdb
[root@node5 ~]# cat /proc/partitions
[root@node5 ~]# mke2fs -t ext4 /dev/sdb1
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -u
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -o delete
查看会话相关信息:
# iscsiadm -m session -s
挂载时使用_netdev作为选项
CHAP: 单向
创建服务端谁所需要的帐号,并实现单方向的认证:
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 account
2、编辑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 = christina
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 192.168.0.11:3260 -u # iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -o delete # rm -rf -rf /var/lib/iscsi/send_targets/192.168.0.11,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主机地址可能需要按照您的实际情况修改。
FreeNAS
Openfiler
Nexenta
fence_manual
lvmconf --enable-cluster
cman
rgmanager
clvmd
创建一个GFS文件系统:
需要提供的信息:
1、锁类型:
lock_nolock
lock_dlm
2、锁文件的名字,通常即文件系统名
cluster_name:fs_name
3、日志的个数,通常一个节点对应一个日志文件,但建议提供比节点数更多的日志数目,以提供冗余;
4、日志文件大小
5、文件系统大小
Syntax: gfs_mkfs -p lock_dlm -t ClusterName:FSName -j Number -b block_size -J journal_size BlockDevice
如:
# gfs_mkfs -p lock_dlm -t gfscluster:gfslv -j 5 /dev/vg0/gfslv
可以通过其对应挂载点查看gfs文件系统属性信息;
# gfs_tool df /mount_point
挂载GFS文件系统:
mount -o StdMountOpts,GFSOptions -t gfs DEVICE MOUNTPOINT
前提:挂载GFS文件的主机必须是对应集群中的节点;
挂载GFS文件时有如下常用选项可用:
lockproto=[locl_dlm,lock_nolock]
locktable=clustername:fsname
upgrade # GFS版本升级时有用
acl
如果不想每一次启用GFS时都得指定某选项,也可以通过类似如下命令为其一次性指定:
# gfs_tool margs "lockproto=lock_dlm,acl"
载入相应的gfs模块,并查看lv是否成功
# modprobe gfs # modprobe gfs2 # chkconfig gfs on # chkconfig gfs2 on # chkconfig clvmd on # /etc/init.d/gfs restart # /etc/init.d/gfs2 restart # /etc/init.d/clvmd restart # lvscan lvmconf --enale-cluster Openfiler, NAS, SAN FreeBSD, AIX, power /lib64 Openfiler: CentOS NAS: nfs, samba SAN: IPSAN webGUI FreeNAS: FreeBSD tgtd iscsitarget tgtadm --lld iscsi --op new --mode account --user iscsiuser --password mypass tgtadm --lld iscsi --op new --mode account --user myuser --password mypass tgtadm --lld iscsi --op bind --mode account --tid 1 --user iscsiuser tgtadm --lld iscsi --op bind --mode account --tid 1 --user myuser --outgoingbacking-store /dev/sdb incominguser iscsiuser mypass outgoinguser myuser mypass /etc/iscsi/iscsid.conf