iSCSI网络存储服务

一网络存储概述

·直接附加存储

通常我们所熟悉的存储设别就是硬盘,其通过与计算机主板的I/O接口(如IDE、SCSI)相连接,由本机操作系统负责读写及管理,这就是最传统的数据存储技术,称为DAS(Direct Attached Storage,直接附加存储)

·网络存储

随着企业中数据信息的不断增长,尤其当成百上千TB的数据需要备份、恢复,以及面临着扩容、灾难恢复等需求时,DAS方式使得数据的管理与维护日益困难。正因为如此,网络存储技术应运而生,其最常见的就是NAS和SAN

SAN(Storage Area Network,存储区域网络)

SAN是通过光纤交换机、光纤路由器等设备将磁盘阵列、磁带机或独立的ISCSI设备与服务器连接,构成一个高速存储子网,存储的数据以数据块的形式通过ISCSI协议进行传输,从而优于普通的IP包传输;结构如图所示

9.1 iSCSI网络存储服务_云计算

NAS(network attachment storage,网络附加存储)

NAS存储设备相当于一台独立的服务器,设备本身带有操作系统,也拥有网络接口,因此不依赖于其他服务器,在NAS设备中为客户机分配存储空间时,通常采用共享文件夹的方式进行发布,存储的数据以文件的形式进行传输,采用CIFS或者NFS等协议;结构如图所示

9.1 iSCSI网络存储服务_马向军_02

除了购买硬件NAS设备外,通过为PC服务器安装FreeNAS系统平台也可以作为高校的NAS存储设备使用;FreeNAS是一个专为NAS、iSCSI存储定制的精简版UNIX系统,基于FreeBSD系统开发而成,其官网http://www.freenas.org(与此类似的存储平台还有OpenFiler)

二构建iSCSI服务器

·iSCSI概述

iSCSI(iscsi= internet Small Computer System Interface )

是由IEETF开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的传递,同时也促进了数据的远距离管理

ISCSI技术的核心

是在TCP/IP网络上传输SCSI协议,是指用TCP/IP报文、和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输

iSCSI协议

定义了在 TCP/IP 网络发送、接收 block(数据块)级的存储数据的规则和方 法。发送端将SCSI命令和数据封装到 TCP/IP 包中再通过网络转发,接收端收到 TCP/IP 包之后,将其还原为SCSI命令和数据并执行,完成之后将返回的SCSI命令和数据再封装到 TCP/IP包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就像访问本地的 SCSI设备一样简单

iSCSI的工作方式

服务(设备)端 target

客户(应用)端 initiator

·在RHEL6中搭建ISCSI存储服务器

ISCSI服务器通常也称为Target端,负责定义存储对象、分配逻辑空间LUN(Logical Unit,逻辑单元)(实验环境时,开虚拟机前最好添加四块以上硬盘)

1准备存储设备

存储设备指将要分配给某一个客户机使用的设备文件,在RHEL6系统中,硬盘、分区、逻辑卷、软RAID等都可以用作ISCSI服务的存储设备,为了延续磁盘空间的可扩展性,建议以一个逻辑卷为单位分配给客户机使用,对于个别有特殊要求的客户机,也可以将一个软RAID

LVM逻辑卷存储设备

将新添加的一块磁盘创建为物理卷,创建卷组,在卷组中创建一个容量为10G的逻辑卷

9.1 iSCSI网络存储服务_云_03

软RAID磁盘阵列

在Linux系统中做RAID,磁盘阵列的设备可以是一块磁盘中的三个以上的分区,也可以是三块或以上的磁盘;使用mdadm管理工具(默认已安装)来创建软RAID设备,这里使用三块硬盘,每块20G,创建一个RAID5阵列

[root@svr ~]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sd[b-f]        或简写为

9.1 iSCSI网络存储服务_云_04

执行完以上命令后会在后台进行创建,执行以下命令可查看详细信息和创建进度

9.1 iSCSI网络存储服务_云计算_05

其中

--create             //表示要创建raid

--auto=yes /dev/md0 //新建立的软件磁盘阵列设备为md0,md序号可以为0-9

--level=5             //磁盘阵列的等级,这里表示创建是的raid5

--raid-devices         //添加作为磁盘阵列用的磁盘的块数

--spare-devices         //添加作为预备(spare)磁盘的块数

/dev/sd[b-d]         //磁盘阵列所使用的设备,还可写成/dev/sdb /dev/sdc /dev/sdd

如果磁盘容量比较大,可以直接查看/proc/mdstat文件来了解RAID创建和运行情况

9.1 iSCSI网络存储服务_云计算_06

如果要本机使用,可以格式化并挂载(建议设置开机自启动和自动挂载)

创建/etc/mdadm.conf这个配置文件,即可开机自启动

9.1 iSCSI网络存储服务_云_07

修改/etc/fstab文件,设置开机自动挂载

9.1 iSCSI网络存储服务_网络存储_08

软RAID的扩展知识

1扩容raid磁盘阵列

显示磁盘阵列的组成情况,4个块设备组成,:
# cat /proc/mdstat
9.1 iSCSI网络存储服务_虚拟化_09
把/dev/sdg增加进阵列/dev/md0:
# mdadm  --add /dev/md0 /dev/sdg
9.1 iSCSI网络存储服务_网络存储_10
raid5阵列/dev/md0修改为5个块设备:
# mdadm --grow /dev/md0 -n5
9.1 iSCSI网络存储服务_虚拟化_11
再显示一下磁盘阵列的组成情况,现在/dev/md1是6个块设备组成,完成扩容,还需要7.7分钟。
# cat /proc/mdstat
9.1 iSCSI网络存储服务_云_12

等待扩容完成.....

执行下列命令:

9.1 iSCSI网络存储服务_云计算_13

验证:

9.1 iSCSI网络存储服务_云计算_14

2模拟RAID5中一块磁盘损坏,检验spare磁盘的功能(raid5中允许一块磁盘损坏,我们所设置的那1块spare磁盘会立即替代损坏的磁盘,进行RAID的重建,保障数据的安全):

[root@svr ~]# mdadm --manage /dev/md0 --fail /dev/sdd

//使用此命令设置磁盘sdd成为出错的状态

来查看一下:mdadm --detail /dev/md0

9.1 iSCSI网络存储服务_云_15

可以查看cat /proc/mdstat文件查看RAID5的重建过程

再来看一下重建完后的结果

9.1 iSCSI网络存储服务_虚拟化_16

9.1 iSCSI网络存储服务_网络存储_17

/mnt/raid5还可以正常使用

9.1 iSCSI网络存储服务_虚拟化_18

3将出错的磁盘删除并加入新的磁盘:

先删除损坏的磁盘sdd:

[root@svr raid5]# mdadm --manage /dev/md0    --remove /dev/sdd       //将损坏的磁盘sdd从RAID中删除

再添加一块新的磁盘作为spare磁盘:

[root@svr raid5]# mdadm --manage /dev/md0 --add /dev/sdg        //添加新的磁盘sdg

OK,再来查看一下:

执行以下命令

mdadm --detail /dev/md0查看结果

9.1 iSCSI网络存储服务_云_19

4关闭软件RAID的方法:

当你不再需要已经设置的RAID的时候,可以用以下方法关闭RAID:

1)卸载/dev/md0,并且删除或注释掉/etc/fstab文件中的配置:

[root@svr ~]# umount /dev/md0    
[root@svr ~]# vi /etc/fstab    
#/dev/md0         /mnt/raid5        ext4        defaults            0 0

2)注释掉或删除/etc/mdadm.conf中的设置:    
[root@svr ~]# vi /etc/mdadm.conf    
#ARRAY /dev/md0 UUID=d58ed27d:00ce5cf5:b26ed1e9:879d0805

3)停止raid设备

# mdadm --stop /dev/md0

4)删除raid中的所有磁盘

9.1 iSCSI网络存储服务_云计算_20

这时候raid中的磁盘就删除了,重启后也不会产生md127了.

RAID0和RAID1实同于RAID5

RAID0:并行读写数据

RAID1:镜像磁盘阵列

2安装scsi-target-utils软件包

在RHEL6服务器中需要安装scsi-target-utils软件包,对应的系统服务为tgtd,命令行管理工具为tgtadm;有相关依赖包,建议使用yum安装

9.1 iSCSI网络存储服务_马向军_21

3创建iSCSI对象(Target)

即将准备好的存储设备(逻辑卷和RAID5)添加到iSCSI中,为客户端准备存储空间(LUN);有两种方法:一种是使用命令的添加方式(略);一种是直接修改配置文件;

iscsi target配置文件是/etc/tgt/targets.conf(在文件尾部添加如下内容)

9.1 iSCSI网络存储服务_网络存储_22

Target的命名在同一子网内应该是唯一的,标准命名方式为:

iqn.yyyy-mm.<reversed domain name>[:identifier]

其中:

iqn:表示"iSCSI Qualified Name",简称iqn。

yyyy-mm:表示年份-月份。这里是2011-08。

reversed domain name:表示倒过来的域名,这里是com.example。

identifier:表示识别代码,这里是disk

backing-store用于指定存储设备,一般指非实际的物理磁盘,如LVM卷、某个分区、raid磁盘阵列。

initiator-address 地址 用于将target指派给指定的客户机使用,为了安全,可自定义设置

4重启服务并将服务设置为开机自启动,然后设置防火墙开启3260号端口通信

9.1 iSCSI网络存储服务_云_23

记得保存防火墙规则

5验证target信息

9.1 iSCSI网络存储服务_网络存储_24

9.1 iSCSI网络存储服务_马向军_25

至此,iscsi target存储服务器配置完成,客户端使用iSCSI Initiator就可以连接iscsi target服务器了

二客户端使用iSCSI存储设备

·Linux客户端使用iSCSI存储设备

1客户端安装iscsi-initiator-utils和lsscsi软件包

这个没有依赖关系,可以用rpm安装

9.1 iSCSI网络存储服务_云计算_26

其中iscsi-initiator-utils是连接服务器的客户端软件,lsscsi是查看iSCSI设备信息的工具包

2发现并连接iSCSI设备

发现设备,若是默认端口3260可以省略不写

9.1 iSCSI网络存储服务_网络存储_27

发现两个设备(为了安全考虑,可以在服务器上设置ACL访问控制策略,以免被别人发现)

连接设备

9.1 iSCSI网络存储服务_云_28

--login可以简写为-l;--out表示断开连接,简写-u

3查看网络存储设备

9.1 iSCSI网络存储服务_云_29

4使用磁盘

接下来使用磁盘就跟使用本地磁盘几乎一样(fdisk、mkfs、mount操作,与普通设备无异);进行分区格式化,挂载设置开机自启动等;若iSCSI设备已包含文件系统,则无需再格式化

9.1 iSCSI网络存储服务_网络存储_30

·windows客户端使用iSCSI存储设备

Windows Server2008 自带iSCSI客户端程序

1确保客户机与服务器的通信

2打开管理工具-iSCSI发起程序

9.1 iSCSI网络存储服务_虚拟化_31

3输入服务器地址,直接点击快速连接

9.1 iSCSI网络存储服务_马向军_32

4连接成功后单击完成,可以关闭连接面板了

9.1 iSCSI网络存储服务_云计算_33

5右键计算机选择管理-存储-磁盘管理,可以看到新加的磁盘1

9.1 iSCSI网络存储服务_马向军_34

6右击磁盘1选择联机,再右击选择初始化磁盘,直接点击确定

9.1 iSCSI网络存储服务_云计算_35

7现在的操作和普通磁盘一样了,可以新建简单卷等