在红帽企业 Linux 6 中创建软件支持的 iSCSI 目标

为认证考试而学习可能是一次冒险。当认证考试是实践操作、基于性能的考试时,更是如此。我认识的大多数人都会陷入的困境是,为了有效地为这样的考试学习,你需要访问一个实验室环境,其中的元素可能超出了普通 Linux 爱好者的范围。其中一个要素是 iSCSI。

红帽网站上的一个很好的例子,在其红帽认证工程师 (RHCE) 考试目标页面中提到

将系统配置为 iSCSI 启动器,持久挂载 iSCSI 目标

除非我对这句话理解过度(而且我认为我没有...),否则我将此目标解释为说明我需要知道如何配置 iSCSI启动器端,而不是 iSCSI目标端。 请记住,启动器是访问存储设备的主机(如客户端),而目标是共享 iSCSI 设备的主机。 目标可能是一个复杂的网络连接存储设备,或者像 Linux 主机一样简单的东西。

因此,为了使我们的实验室设置有用,我们将需要访问配置了 iSCSI 目标的主机。 让我们看看我们可以实现这一目标的一种方法。

环境

在我的实验室设置中,我有一台名为 server1.example.com 的主机,IP 地址为 192.168.1.10,运行红帽企业 Linux 服务器 v6.0 (x86_64)。 这将是我的 iSCSI 目标。 第二台主机,名为 client1.example.com (192.168.1.11),也运行 RHEL 6,将是 iSCSI 启动器。

我将使用 Open-iSCSI 项目软件(RFC3720 iSCSI 的高性能、传输独立的
多平台实现),该软件包含在 RHEL 6 中。

创建 iSCSI 目标

首先,您需要创建一个软件支持的 iSCSI 目标。 安装 scsi-target-utils 软件包及其依赖项

从 RHEL 6 DVD,我在 server1 上使用 yum localinstall 命令安装了以下软件包

   Packages/scsi-target-utils-1.0.4-3.el6.x86_64.rpm
   Packages/perl-Config-General-2.44-1.el6.noarch.rpm

同样从 RHEL 6 DVD,我在 client1 上使用 yum localinstall 命令安装了以下软件包

   Packages/iscsi-initiator-utils-6.2.0.872-10.el6.x86_64.rpm

启动 tgtd 服务

tgtd 服务托管 SCSI 目标,并使用 iSCSI 协议来启用目标和启动器之间的通信。 启动 tgtd 服务,并使用 chkconfig 命令使该服务在重启后持久存在

# service tgtd start
# chkconfig tgtd on

现在我们将需要某种类型的存储设备用作目标。 任何可访问的存储设备都可以,但为了保持简单,这里有两种我们可以使用的选项

选项 #1:创建 LVM 卷

LVM 卷对于 iSCSI 后备镜像非常有用。 LVM 快照和调整大小对于管理 iSCSI 存储来说是非常方便的功能。 在以下示例中,/dev/md1 被标记为物理卷。 使用 /dev/md1 创建名为 virtstore 的卷组。 最后,我们使用来自 virtstore 卷组的 20G 空间创建一个名为 virtimage1 的逻辑卷

# pvcreate /dev/md1
# vgcreate virtstore /dev/md1
# lvcreate -L 20G -n virtimage1

选项 #2:创建基于文件的镜像

基于文件的存储足以用于测试或实验,但不建议用于生产环境或任何重要的 I/O 活动。 此可选过程创建一个基于文件的镜像,名为 virtimage2.img,用于 iSCSI 目标。

创建一个新目录来存储镜像文件

# mkdir -p /var/lib/tgtd/virtualization

创建一个名为 virtimage2.img 的镜像,大小为 10G。

# dd if=/dev/zero of=/var/lib/tgtd/virtualization/virtimage2.img bs=1M seek=10000 count=0

为新镜像和目录配置正确的 SELinux 上下文。

# restorecon -R /var/lib/tgtd

创建目标

可以通过将 XML 条目添加到 /etc/tgt/targets.conf 文件(使用您喜欢的文本编辑器)来创建目标。 target 属性需要 iSCSI Qualified Name (IQN),格式为

  iqn.yyyy-mm.reversed.domain.name:OptionalIdentifierText

其中

   yyyy-mm 表示设备启动的 4 位年份和 2 位月份(例如:2011-07);

reversed.domain.name 是主机的域名反转。 例如,server1.example.com 在 IQN 中变为 com.example.server1; 以及

OptionalIdentifierText 是任何不带空格的文本字符串,可帮助管理员识别哪个设备是哪个。

此示例为在 server1.example.com 的可选步骤中创建的两种类型的镜像创建 iSCSI 目标,可选标识符为 trial。 将以下内容添加到 /etc/tgt/targets.conf 文件

<target iqn.2011-07.com.example.server1:trial>
backing-store /dev/virtstore/virtimage1   #LUN1
backing-store /var/lib/tgtd/virtualization/virtimage2.img   #LUN2
write-cache off
</target>

LUN 0 将显示为类型为“controller”的设备。

确保 /etc/tgt/targets.conf 文件包含 default-driver iscsi 行,以将驱动程序类型设置为 iSCSI(驱动程序默认使用 iSCSI,但请确保该行未被注释掉)。

请注意,此示例创建了一个全局可访问的目标,没有访问控制。 这对于实验室环境来说很好,但不适用于生产环境! 有关实施安全访问的信息,请参阅 scsi-target-utils 文档和示例文件。

现在我们需要重启 tgtd 服务以重新加载配置更改

# service tgtd restart

IPTables 配置

如果您的主机正在使用 iptables,请打开端口 3260 以进行 iSCSI 访问

# iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
# service iptables save
# service iptables restart

验证新的 iSCSI 目标

使用 tgt-admin 命令查看新目标,以确保设置成功

# tgt-admin --show

  目标 1: iqn.2011-07.com.example.server1:trial
  系统信息
  驱动程序: iscsi
  状态: ready
  I_T nexus 信息
  LUN 信息
  LUN: 0
      类型: controller
      SCSI ID: IET     00010000
      SCSI SN: beaf10
      大小: 0 MB
      在线: Yes
      可移动介质: No
      后备存储类型: rdwr
      后备存储路径: None
  LUN: 1
      类型: disk
      SCSI ID: IET     00010001
      SCSI SN: beaf11
      大小: 20000 MB
      在线: Yes
      可移动介质: No
      后备存储类型: rdwr
      后备存储路径: /dev/virtstore/virtimage1
  LUN: 2
      类型: disk
      SCSI ID: IET     00010002
      SCSI SN: beaf12
      大小: 10000 MB
      在线: Yes
      可移动介质: No
      后备存储类型: rdwr
      后备存储路径: /var/lib/tgtd/virtualization/virtimage2.img
  账户信息
  ACL 信息
  ALL

请注意,ACL 列表设置为 ALL。 这允许本地网络上的所有系统访问此设备。 我建议您始终为生产环境设置主机访问 ACL。 但是,对于我们的实验室,没有 ACL 也可以。

测试目标

现在我们可以测试是否可以从 client1.example.com 发现新的 iSCSI 设备

# service iscsid start
# chkconfig iscsid on
# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.10
192.168.1.10:3260,1 iqn.2011-07.com.example.server1:trial
#

目前为止一切顺利! 您可以使用以下命令查看有关 iSCSI 目标的更多信息

# iscsiadm -m node -T iqn.2011-07.com.example.server1:trial -p 192.168.1.10

现在我们可以登录到 iSCSI 目标

# iscsiadm -m node -T iqn.2011-07.com.example.server1:trial -p 192.168.1.10 -l
正在登录到 [iface: default, target: iqn.2011-07.com.example.server1:trial, portal: 192.168.1.10,3260]
成功登录到 [iface: default, target: iqn.2011-07.com.example.server1:trial, portal: 192.168.1.10,3260]。
#

成功! 现在已启用目标以便在重启后访问(持久性),并且它已添加到 /var/lib/iscsi 中的节点数据库。 iscsid 服务将在系统启动时访问此数据库并重新连接您的 iSCSI 目标。

要断开 iSCSI 目标,您需要注销

# iscsiadm -m node -T iqn.2011-07.com.example.server1:trial -p 192.168.1.10 -u
正在注销会话 [sid: 2, target: iqn.2011-07.com.example.server1:trial, portal: 192.168.1.10,3260]
成功注销 [sid: 2, target: iqn.2011-07.com.example.server1:trial, portal: 192.168.1.10,3260]。

您也可以使用此命令注销所有连接的目标

iscsiadm -m node -U all

有关更多信息,请参阅手册页或 /usr/share/doc 中的文档。 现在我们有了一个可用的 iSCSI 环境。

此设置还有其他我甚至没有涉及的功能,例如访问控制和 iSNS,但这超出了 RHCE 级别认证的要求范围。

由于 CentOS 6.0 已经发布,并且与他们所说的 “TUV” 或 “The Upstream Vendor” 100% 二进制兼容,我愿意推测这些说明在 CentOS 上也能很好地工作。 但不要相信我的话,在您的测试机器(或测试虚拟机)上安装 CentOS 6 并亲自尝试一下!

 

 

 

加载 Disqus 评论