在Linux上设置iSCSI环境
如今,iSCSI技术在存储领域颇受欢迎。 本文介绍了一个由一个Debian Linux主机和一个NetApp Filer组成的iSCSI演示环境。我们尝试展示该协议最重要的功能。
什么是iSCSI?
它是TCP / IP以上的网络存储协议。 该协议将SCSI数据封装成TCP数据包。 iSCSI允许我们通过简单的以太网连接(磁带驱动器)将主机连接到存储阵列。 该解决方案比光纤通道SAN便宜(光纤通道HBA和交换机价格昂贵)。 从主机视图,用户可以看到存储阵列LUN像本地磁盘。 iSCSI设备不应与NAS设备(例如NFS)混淆。 最重要的区别是NFS卷可由多个主机访问,但一个iSCSI卷可以由一个主机访问。 它类似于SCSIi协议:通常只有一个主机可以访问一个SCSI磁盘(不同的是集群环境)。 iSCSI协议由IETF(Internet Engineering Task Force)在RFC3720文档中定义。
一些批评者表示,与光纤通道相比,iSCSI的性能较差,导致主机的CPU负载高。 我想如果我们使用千兆以太网,速度就够了。 为了克服高CPU负载,一些供应商开发了iSCSI TOE(TCP卸载引擎)。 这意味着该卡具有内置的网络芯片,它创建并计算tcp帧。 Linux内核不直接支持这一点,并且卡厂商为操作系统编写自己的驱动程序。
最重要的iscsi术语:
发起人:
启动器是iSCSI客户端的名称。 iSCSI客户端具有对iSCSI设备的块级访问,iSCSI设备可以是磁盘,磁带机,DVD / CD刻录机。 一个客户端可以使用多个iSCSI设备。
目标:
目标是iSCSI服务器的名称。 iSCSI服务器向客户端提供其设备(磁盘,磁带,DVD / CD等)。 一个设备可以由一个客户端访问。
发现:
发现是显示启动器目标的过程。
发现方法:
描述可以找到iSCSI目标的方式。目前可用的方法有:
- 互联网存储名称服务(iSNS) - 通过与一个或多个iSNS服务器交互来发现潜在的目标。
- SendTargets - 通过使用发现地址发现潜在目标。
- SLP - 通过服务定位协议(RFC 4018)发现目标
- 静态 - 指定静态目标地址。
iSCSI命名:
RFC文档还包括iSCSI名称。iSCSI名称由两部分组成:类型字符串和唯一的名称字符串。
类型字符串可以是以下内容:
- iqn :iscsi有资格的名字
- 呃 :eui-64位标识符
大多数实现使用iqn格式。 让我们看看我们的启动器名称: iqn.1993-08.org.debian:01.35ef13adb6d
iqn
:我们使用iSCSI限定名地址。
1993-08
:命名机构获得iSCSI名称中使用的域名的月份。
org.debian
:反向定义组织命名权限的dns名称。
01.35ef13adb6d
:该字符串由命名机构定义。
我们的目标名称是相似的(iqn.1992-08.com.netapp:sn.84211978
)。 不同之处在于包含NetApp文件管理器的序列号。 这两个名称都是用户可编辑的(启动器,目标)。 我们也需要为目标和启动器两个ip地址。
下图显示了我们的演示环境。 它由一个Debian主机,它是iSCSI启动器,并访问
iSCSI磁盘通过/ dev / sdb
设备。 Netapp filer是我们的iSCSI目标设备,它为Debian Linux主机提供/ vol / iscsivol / tesztlun0
磁盘或lun
。 iSCSI会话由登录阶段组成,然后是数据交换阶段。
2.其他Unix平台上的iSCSI支持
Cisco iSCSI驱动程序是最早的软件iSCSI启动器实现之一。该驱动程序支持所有主要的商业Unix系统及其版本(HPUX:10.20,11,11i,AIX:4.3.3,5.1,5.2,Solaris:2.6, 7,8,9)。 最早的版本可以追溯到2001年。目前,每个Unix供应商都实现了自己的驱动程序,我们调查这些驱动程序。
Solaris:
Solaris 10(从1/06版本)支持iSCSI。 启动器驱动程序可以执行以下操作:
- 多个会话到一个目标支持:此功能使一个客户端可以根据需要创建更多的iSCSI会话到一个目标,并提高性能。
- 多路径:借助Solaris Mpxio或IPMP功能,我们可以为目标创建冗余路径。
- 还支持2 Tb磁盘和CHAP身份验证。 Solaris驱动程序可以使用三种发现方法(SLP不能)。 iSCSI磁盘可以
由格式化程序访问。
HPUX:
HP支持HP11i v1操作系统的iSCSI。 该驱动程序可以通过也由IETF(RFC 4018)定义的SLP(服务定位协议)来发现目标。 这意味着iSCSI启动器和目标器在SLP目录代理程序中注册自己。 注册后,iSCSIi启动器仅查询目录代理。 HPUX驱动程序实现所有的发现方法。 还实现了CHAP身份验证,并且还支持OS多路径工具(PVLinks)。 HPUX驱动程序也提供传输统计信息。
AIX:
从5.2 AIX支持iSCSI。驱动程序仅实现静态目标发现。我们可以使用iSCSI磁盘与AIX多路径称为MPIO。 还支持CHAP身份验证。
没有驱动程序允许我们从iSCSI引导。 这可能是驱动程序开发的下一步。
3.cscsi Linux实现
启动器实现:
思科还发布了Linux驱动程序,但它已经很旧了。
Intel iSCSI实现包含目标和启动器驱动程序,也是生成工作负载的便利工具。
UNH-iSCSI是新罕布什尔大学的发起人和目标实施机构。
Open-iSCSI项目是最新的实现。它可以与2.6.11内核一起使用。 我们将用Debian主机测试这个驱动。 它包含内核模块和一个iscsid
守护进程。
可以使用以下命令启动iscsid
:
/etc/init.d/open-scsi start
可以使用iscsiadm
命令控制iSCSI操作。 该命令可以发现目标,登录/注销目标,并显示会话信息。
配置文件位于/ etc / iscsi
目录下:
-
iscsid.conf
:iscsi守护程序的配置文件。 它在启动时读取。 -
initiatorname.iscsi
:启动器的守护程序红色的initator的名称。 -
节点
目录:目录包含节点及其目标。 -
send_targets
目录:目录包含发现的目标。
安装过程很简单。 问题:
apt-get install open-iscsi
此驱动程序实现了Sendtargets发现方法。
目标实现:
iSCSI企业目标是Linux的开源目标实现。 它基于Ardis iSCSI Linux实现,并需要2.6.14内核。
Openfiler是一种非常受欢迎的Linux NAS实现,并提供基于Linux的基于Linux的NAS软件。
许多其他公司提供基于软件的商业iSCSI目标驱动程序(Amgeon,Mayastor,Chelsio)。
存储阵列制造商还提供对iSCSI(EMC,Netapp等)的本机支持。
我们选择NetApp FAS文件管理器进行测试,但您可以使用免费软件进行测试。 文章底部有一个链接,显示了我们如何使用Openfiler。
4.设置iSCSI Linux演示环境
我们的演示环境包含一个Debian Linux主机和一个Netapp文件管理器。 Debain主机是启动器,NetApp文件管理器是目标。
设置过程简要介绍如下:
- 我们应该在Debian和Netapp文件管理器之间建立tcp / ip连接。 发起者和目标必须彼此ping通。 我们假设在Debian上已经安装了
open-iscsi
软件包。 - Debian主机必须发现NetApp目标。 它被称为“发现”过程。 然后目标发送目标列表。
- 目标必须使启动器能够访问LUN。 在Netapp方面,这意味着我们应该创建一个启动器组,这是主机和luns之间的逻辑绑定。 启动器组包含可以访问此LUN的lun和一个Debian主机。
- 当启动器获取目标列表时,它必须“登录”到目标。
- 当“登录”进程成功完成并且NetApp文件管理器允许访问时,启动器可以使用iSCSI磁盘作为普通磁盘。 它出现在
/ dev / sdx
设备下,您可以格式化,像普通磁盘一样安装。
具体步骤如下:
我们从Linux主机ping Netapp文件管理器:
debian:~# ping nasa
PING nasa(192.168.2.222)56(84)字节的数据。
从nasa(192.168.2.222)64字节:icmp_seq = 1 ttl = 255时间= 0.716毫秒
从nasa(192.168.2.222)64字节:icmp_seq = 2 ttl = 255时间= 0.620毫秒
这是成功的。
2.我们使用iscsiadm
命令发现netapp filer iSCSI LUN。 我们选择了st
(sendtargets)发现方法。 目前它是用这个驱动程序实现的:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222
通过发送目标192.168.2.222:3260
我们来看看发现的目标:
debian:~# iscsiadm -m node
192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978
3.我们必须准备NetApp方面:在本例中,我们将创建一个4GB LUN(RAID组的一部分),并将其分配给Debian主机。 我们应该检查可用空间:
nasa> df -k
文件系统总共使用了可用性容量
/ vol / vol0 / 8388608KB 476784KB 7911824KB 6%/ vol / vol0 /
/vol/vol0/.snapshot 2097152KB 10952KB 2086200KB 1%/vol/vol0/.snapshot
/ vol / iscsiLunVol / 31457280KB 20181396KB 11275884KB 64%/ vol / iscsiLunVol /
//vol/iscsiLunVol/.snapshot 0KB 232KB 0KB ---%/vol/iscsiLunVol/.snapshotunVol/testlun1
以下命令在iscsiLunVol
卷上创建一个4GB Lun:
nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1
核实:
nasa> lun show
/vol/iscsiLunVol/iscsitestlun 7.0g (7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/iscsitestlun2 7.0g (7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/testlun1 4g (4294967296) (r/w, online)
我们应该检查NetApp主机是否可以看到Debian主机:
nasa> iscsi initiator show
Initiators connected:
TSIH TPGroup Initiator
19 1000 debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)
好的,我们看到Deb主机。 我们来创建一个叫做Debian2
的启动器组。
nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6d
nasa> igroup show
Debian2 (iSCSI) (ostype: linux):
iqn.1993-08.org.debian:01.35ef13adb6d (logged in on: e0a)
我们应该将新创建的Lun分配给Debian2
主机。
nasa> lun map /vol/iscsiLunVol/testlun1 Debian2
lun map:自动分配Debian2 = 2
检查命令:
nasa> lun show -v
/vol/iscsiLunVol/testlun1 4g (4294967296) (r/w, online, mapped)
Serial#: hpGBe4AZsnLV
Share: none
Space Reservation: enabled
Multiprotocol Type: linux
Maps: Debian2=2
让我们回到我们的启动器主机。 现在一切都准备进入4GB的lun。 以下命令可使磁盘从Linux主机访问。
debian:~# iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p
192.168.2.222:3260 --login
我们应该在消息
文件中看到以下条目:
debian:〜#tail / var / log / messages
Apr 13 00:31:34 debian kernel:scsi:unknown device type 31
4月13日00:31:34 debian内核:供应商:NETAPP型号:LUN Rev:0.2
4月13日00:31:34 debian内核:类型:未知ANSI SCSI版本:04
4月13日00:31:34 debian内核:供应商:NETAPP型号:LUN Rev:0.2
4月13日00:31:34 debian内核:类型:直接访问ANSI SCSI版本:04
4月13日00:31:34 debian内核:SCSI设备sdb:8388608 512字节hdwr sector(4295 MB)
4月13日00:31:34 debian内核:sdb:Write Protect关闭
4月13日00:31:34 debian内核:SCSI设备sdb:驱动器缓存:写入
4月13日00:31:34 debian kernel:sd 1:0:0:2:附加scsi disk sdb
该磁盘显示为sdb设备( / dev / sdb
)。
我们可以用它作为普通磁盘。 您可以创建一个partion,您可以轻松地挂载它。
debian:~# fdisk /dev/sdb
debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt
如果要在下次重新启动后使用sdb,则应更改以下条目:
node.conn [0] .startup =手动自动
在/ etc / iscsi / nodes / <iscsi目标名称> / <ip地址>
文件中。 更改后,iSCSI守护程序将登录到该目标。 在/ etc / fstab
文件中添加自动安装条目( / dev / sdb1 / mnt
)不起作用,因为open-iscsi
守护程序将比文件系统的安装更晚。 一个简单的脚本可以解决这个问题,这在iSCSI守护程序启动后自动安装。
open-iscsi启动器实现容忍网络错误。 如果断开以太网电缆并再次连接,则必须重新启动io进程,但会自动重新连接。
另一个很好的解决方案是网络故障,如果您为一个LUN创建多个路径(例如: / dev / sdb
, / dev / sdc
),则启动器将登录到两个位置(两个RAID控制器),然后使两个磁盘作为使用Linux多路径软件( dmsetup
)的单个逻辑磁盘。
我推荐另一种iSCSI目标实现方法:Openfiler(如果你不能在Netapp框上测试)。 它是一个免费的基于Linux的NAS软件,可以使用基于Web的GUI进行管理。
在其他Unix实现的情况下,iSCSI设置过程非常相似。
总结和结果
iSCSI是廉价的灾难恢复站点的一个很好的解决方案。您不应该在灾难恢复站点购买昂贵的光纤通道卡,您可以使用以太网和iSCSI。 您还可以使用它将主机连接到没有光纤通道主机适配器的磁盘阵列(如果阵列具有iSCSI功能)。
在测试期间,我在Vmware播放器程序中运行Debian主机,我的网络连接是100 Mbit / s。 我无法达到超过15 MB / s的读/写性能,但不相关。 使用千兆以太网可以达到更好的性能,唯一的缺点是它会增加CPU负载(CPU必须构建和计算TCP帧)。
这是我简单的主页。