在Linux上设置iSCSI环境

在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文件管理器是目标。

设置过程简要介绍如下:

  1. 我们应该在Debian和Netapp文件管理器之间建立tcp / ip连接。 发起者和目标必须彼此ping通。 我们假设在Debian上已经安装了open-iscsi软件包。
  2. Debian主机必须发现NetApp目标。 它被称为“发现”过程。 然后目标发送目标列表。
  3. 目标必须使启动器能够访问LUN。 在Netapp方面,这意味着我们应该创建一个启动器组,这是主机和luns之间的逻辑绑定。 启动器组包含可以访问此LUN的lun和一个Debian主机。
  4. 当启动器获取目标列表时,它必须“登录”到目标。
  5. 当“登录”进程成功完成并且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帧)。

是我简单的主页。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏