在红帽企业 Linux 6 中创建软件支持的 iSCSI 目标
为认证考试而学习可能是一次冒险。当认证考试是实践操作、基于性能的考试时,更是如此。我认识的大多数人都会陷入的困境是,为了有效地为这样的考试学习,你需要访问一个实验室环境,其中的元素可能超出了普通 Linux 爱好者的范围。其中一个要素是 iSCSI。
红帽网站上的一个很好的例子,在其红帽认证工程师 (RHCE) 考试目标页面中提到
除非我对这句话理解过度(而且我认为我没有...),否则我将此目标解释为说明我需要知道如何配置 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 并亲自尝试一下!