dcsimg

通过ZFS与Linux客户端共享iSCSI卷

Sun的Thumper备受瞩目,它提供了充足的存储空间和出色的吞吐量。这是使用Solaris的ZFS与网络上的Linux客户端共享所有存储的方法。

Sun x4500系列存储服务器大受欢迎。您将获得48个磁盘,ZFS利用大量磁盘心轴来实现惊人的吞吐量。这里’x4500的另一个重要用途:在其上托管所有虚拟机,并通过以下方式将其共享给Linux客户端 iSCSI。我们’ll show you how.

在我们开始之前,有必要快速澄清。 x4500的代号为“Thumper.” The Thumper has 48 SATA硬盘 磁盘(每个磁盘最多1TB),并且出厂时已配置了使用两个镜像的1TB磁盘的操作系统。 x4540被称为“Thor,”并且它附带用于操作系统的紧凑型闪存驱动器。

在Solaris中共享iSCSI

这不能’更简单。在基本模式下,无需配置身份验证,只需运行两个命令即可在ZFS中创建卷并通过iSCSI共享该卷。但是,这不是您可能习惯于运行的标准zfs create命令,因为我们没有’实际要创建一个ZFS文件系统。

相反,我们要在池中创建一个块设备,这将使我们可以将其导出。我们仍然可以享受到ZFS池中的好处,即RAID-Z和校验和,但没有ZFS文件系统。默认情况下,会同时创建一个保留,以确保您所有的空间’已分配的ve可从池大小中扣除。如果选择,则可以使用带有-s(稀疏)选项的精简配置,但是不建议这样做。如果另一个操作系统正在使用该块设备,而该设备突然变得无法写入,但操作系统认为存在’的可用空间,可能会发生不好的事情。

所以让’s创建块设备:

# zfs create -V 20g VMs1/xen03

上面的命令在zpool中创建了一个大小为20GB的块设备(-V),名为VMs1,并将其命名为xen03,这是将为此设备提供的我的测试VM的名称。

接下来,我们需要通过iSCSI共享它:

# zfs set shareiscsi=on VMs1/xen03

简单地说,这将在卷上设置shareiscsi属性,并在不启动所需的服务时启动它们’t already running.

We can use zfs list to view the results, but the juicy details are in the output of zfs list - o all, which lists all properties of the file system. I prefer to limit it to the set of values I care about with these options, for example:

# zfs list -o name,type,used,avail,ratio,compression,reserv,volsize,shareiscsi VMs1/xen03
NAME              TYPE   USED  AVAIL  RATIO  COMPRESS  RESERV  VOLSIZE  SHAREISCSI
VMs1/xen03 volume  35.9K  1.75T  1.00x       off             20G           20G          on

这告诉我们该类型是一个卷,它使用了35.9K,池中的总可用空间为1.75TB,压缩率为1.0x,关闭了压缩,该卷的大小为20GB,并且保留了存在相同的数量,最后启用iSCSI共享。

在Linux中挂载iSCSI卷

最后,我们准备建立iSCSI连接并开始使用我们的新块设备。在以下示例中,我们’重新使用Red Hat Enterprise Linux 5。

首先安装iscsi-initiator-utils软件包并启用该服务:

yum install iscsi-initiator-utils
service iscsi start

接下来,我们有一些选择。我们需要在远程服务器上发现目标,并且实际上有两种方法可以实现它。如果你’已设置身份验证,此服务器将看到的唯一iSCSI目标是’应该看到’可以安全地发现所有目标。否则,您将只想连接到特定目标。

发现服务器上的所有目标:

iscsiadm -m discovery -t 发送目标 -p SERVERNAME

此iscsiadm命令可获取服务器SERVERNAME上所有iSCSI目标的列表,并创建连接它们所需的粘合剂。如果重新启动iSCSI服务(服务iscsi重新启动),则目标将被连接,并显示为块设备。

现在轮到你’已连接到设备!您应该能够在fdisk -l中看到它:

Disk /dev/sdd: 21.4 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

下一步是创建文件系统,然后像使用其他文件系统一样使用它。理想的你’将使用LVM,以便可以轻松调整其大小。

为避免连接到所有可用目标,您可能需要手动管理它们。首先,在Solaris服务器上,运行以下命令:

# iscsitadm list target
Target: VMs1/xen03.cic.pdx.edu
    iSCSI Name: iqn.1986-03.com.sun:02:c035874a-7224-e2c5-d171-c04251993f0f
    Connections: 0

Note the iSCSI Name, and keep only that target connected. Discovered targets are stored in /var/lib/iscsi/nodes in Red Hat, and this information is used when reconnecting.

在测试期间,您可能需要几次手动连接/断开连接。 iscsiadm会话模式(-m会话)将允许您使用-u轻松断开所有卷的连接。您可以使用以下命令列出所有会话:

iscsiadm -m session list.

iSCSI节点的发现可以通过多种方式完成。上面的例子“sendtargets”它连接到服务器并询问所有可用目标的列表。如果你’要在生产环境中使用此功能,您可能希望拥有一个iSNS服务器来集中管理这些设置。可以在linux-iscsi网站上找到更多信息。

Authentication A great way to secure iSCSI shares and limit the discovery to only targets an initiator (client) is supposed to have access to, is via authentication. The server setup is quite involved and beyond the scope of this document, but once you have that working you can configure the Linux initiator in /etc/iscsi/iscsid.conf. The necessary information to fill in for authentication is:

node.session.auth.username =
node.session.auth.password =
discovery.sendtargets.auth.username =
discovery.sendtargets.auth.password =

If you are creating a file system, make sure you add it to /etc/fstab so it will return after a reboot. One thing to note is that you should use the _netdev option in fstab, since this is a network device and requires networking before it can be mounted. The iSCSI block device is taken care of already, due to the data stored in /var/lib/iscsi/nodes, and will return as soon as the iscsi service is started.


查理·施鲁丁(Charlie Schluting)是《 网络忍者,这是每位网络工程师必读的内容。

本文最初于2009年1月7日发布
通过网络更新新闻获取最新消息