引言
iSCSI(Internet Small Computer System Interface)被业界认为是非常廉价的 SAN 解决方案,一直在中低端应用领域被市场所看好。 iSCSI 客户端和服务端都既可以通过硬件方式实现,也能通过软件方式的,其优劣区别就是在于效能与成本各有优势。绝大多数操作系统都免费的附带了 iSCSI 的 sw initiator(软件方式)客户端组件,比如在 AIX5.2 以上的版本中就开始附带了 iSCSI sw initiator 组件。不过 iSCSI 服务端,也即 iSCSI target,一般都是收费软件,并且绝大多数都只能运行在 windows 平台。在 AIX 6.1 中集成了 iSCSI initiator 和 iSCSI target 了两种功能。另外,借助与 POWER6 以及部分 POWER5 机型其功能强大的底层硬件平台, AIX 6.1 还能够支持到使用软件方式的 iSCSI 磁盘启动,无需硬件 iSCSI HBA。
iSCSI 的基本介绍
iSCSI 可以简单理解为通过 TCP/IP 封装 SCSI 命令,实现在 IP 网络使用远端的 SCSI 设备的一种协议。 iSCSI 是 SCSI 协议的扩展, SCSI 使用物理 SCSI 电缆传递 SCSI 命令,而 iSCSI 使用了虚拟的 TCP/IP 网络。借助现有的 LAN、WAN 网络环境,iSCSI 提供了非常经济的数据存储的解决方案。
其基本结构可以参看下图,iSCSI 结构与 SCSI 结构一样,由客户端(Initiator)和服务端(Target)两部分组成。不同的是 SCSI 的数据链路是一条 SCSI 总线,连接和寻址都较简单;而 iSCSI 使用 TCP/IP 网络作为数据链路,其配置就相对复杂一些,但是其灵活性和扩展性则远高于传统的 SCSI 架构。iSCSI 其最底层是以太交换网络,是 iSCSI 协议通信的基础层,我们首先需要保证客户端与服务端的网络畅通。(注:不光是传统以太网络,目前高性能 InfiniBand 网络也是采用 iSCSI 协议作为存储设备的传输协议)。中间层是 iSCSI 协议层的封装,主要功能包括 iSCSI 连接的管理,访问控制等,本文的内容也是主要针对这一层的配置和管理。最上层是 SCSI 命令层,在配置好 iSCSI 设备后,系统即可透明的使用 SCSI 协议访问远端的设备。
图表 1 iSCSI 协议模型
本文所配置案例的基本框架
本文所采用的案例,其逻辑结构图如下:右边是一台 AIX 6 服务器,我们将通过它来提供 iSCSI Tareget 服务。本案例中,使用了一个 lv (exlv)和一个磁盘(hdisk1)作为 Target LUN(Logical Unit Number) 设备,并通过 Target0 输出给客户端。在左边客户端这一侧,我们通过 initiator 连接到 AIX 6 服务器来访问 Target LUN 设备,并使用这两个远程的 iSCSI 磁盘创建一个 datavg。
图表 2 本案例逻辑架构
软硬件测试环境
系统平台 | 操作系统 | 网络地址 |
System p 520 lpar 1 (服务端) 2 CPU 2G 内存 | AIX 6.1 | 192.168.21.134 |
System p 520 lpar 2 (客户端) 2 CPU 2G 内存 | AIX 5.3L | 192.168.21.132 |
系统安装要求
操作系统版本要求:AIX 6.1.0.0
iSCSI target 软件包在 AIX 6.1 expansion pack 光盘中,放入光驱,通过 SMIT 安装下面第一个软件包。
devices.tmiscsw.rte 6.1.0.0
如遇到错误,请检查以下软件包是否正确安装,devices.tmiscsw.rte 依赖于此软件包,请放入第一张系统盘安装此包。
devices.common.IBM.iSCSI.rte 6.1.0.0
iSCSI Target 的配置
Target 的配置有三部分,一是创建 iSCSI Target 最底层的协议驱动设备;二是在协议驱动设备上创建虚拟的 Target 设备;最后将本地的磁盘映射到 Target 上,作为 Target LUN。
首先,通过 smit tmiscsi_proto 创建 iSCSI Target 协议设备。如下图:
iSCSI Target Protocol DeviceMove cursor to desired item and press Enter.List All iSCSI Target Protocol DevicesAdd an iSCSI Target Protocol DeviceChange / Show Characteristics of an iSCSI Target Protocol DeviceRemove an iSCSI Target Protocol DeviceF1=Help F2=Refresh F3=Cancel Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
选择 Add an iSCSI Target Protocol Device, 按回车到下一步。
Add an iSCSI Target Protocol DeviceType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Target Protocol Device Name tmsw0Maximum number of sessions [200] +#Maximum transfer size in one PDU [262144] +#Access Control enabled [off] +Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
在此处配置 Target 的性能参数,我们一般使用默认值。 Access Control enabled 这一栏我们下面还会提到,打开或关闭取决于我们是否采用基于 iqn 的安全访问控制机制。在这里我们直接回车到下一步。
COMMAND STATUSCommand: OK stdout: yes stderr: noBefore command completion, additional instructions may appear below.tmsw0 AvailableF1=Help F2=Refresh F3=Cancel Esc+6=CommandEsc+8=Image Esc+9=Shell Esc+0=Exit /=Find
第二步,我们创建虚拟的 Target 设备。使用命令 smit tmtarget。
iSCSI TargetsMove cursor to desired item and press Enter.List All iSCSI TargetsAdd an iSCSI TargetChange / Show Characteristics of an iSCSI TargetRemove an iSCSI TargetF1=Help F2=Refresh F3=Cancel Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
选择 Add an iSCSI Target。
Add an iSCSI TargetType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Target Protocol Device Name tmsw0iSCSI Target Logical Name []* iSCSI Target Name [com.ibm.cn.swtarget0]Maximum Target LUNs allowed [512] +#Paths []Force disconnection of iSCSI clients on remove [no] +Initiator Reconnection delay [] +#Addressing method [] +#Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
在 iSCSI Target Name 一栏输入 Target 设备的 iqn 地址。其他保持默认值。我们设置其为 com.ibm.cn.swtarget0. 按回车下一步。
COMMAND STATUSCommand: OK stdout: yes stderr: noBefore command completion, additional instructions may appear below.target0 Available
Target 设备即创建完成。
最后,我们将 LV exlv 和 hdisk1 两个块设备挂载(mapping)到 Target 设备下,作为 iSCSI Target LUN 设备。使用命令 smit tmlun
iSCSI Target LUNsMove cursor to desired item and press Enter.List all iSCSI Target Logical UnitsAdd an iSCSI Target Logical UnitChange / Show Characteristics of an iSCSI Target Logical UnitRemove an iSCSI Target Logical Unitlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx iSCSI Parent Target Name xx xx Move cursor to desired item and press Enter. xx xx target0 Available iSCSI Target Mode Target xx xx F1=Help F2=Refresh F3=Cancel xx Esc+8=Image Esc+0=Exit Enter=Do xF1x /=Find n=Find Next xEsmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
选择 Add an iSCSI Target Logical Unit,按回车然后选择 target0,再按回车到下一步。
Add an iSCSI Target Logical Unit Type or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Parent Target Name target0Logical Unit Name []* Backing Device Type [disk] +* Backing Device Name [hdisk1] +Maximum Number of Commands to Queue to Device [3] +#Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
我们先添加 hdisk1,在 Backing Device type 中输入设备类型 disk。在 Backing Device Name 输入 hdisk1. 回车下一步。
COMMAND STATUSCommand: OK stdout: yes stderr: noBefore command completion, additional instructions may appear below.lu0 AvailableF1=Help F2=Refresh F3=Cancel Esc+6=CommandEsc+8=Image Esc+9=Shell Esc+0=Exit /=Findn=Find Next
hdisk1 已添加好成为 Target LUN。下面我们继续添加 LV exlv。
Add an iSCSI Target Logical UnitType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Parent Target Name target0Logical Unit Name []* Backing Device Type [lv] +* Backing Device Name [exlv] +Maximum Number of Commands to Queue to Device [3] +#Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
在设备类型一栏选择 lv,在 Backing Device Name 一栏输入 exlv,按回车到下一步。
COMMAND STATUS Command: OK stdout: yes stderr: noBefore command completion, additional instructions may appear below.lu1 AvailableF1=Help F2=Refresh F3=Cancel Esc+6=CommandEsc+8=Image Esc+9=Shell Esc+0=Exit /=Findn=Find Next
通过以下命令,来检查刚创建的设备的状态是否正常 :
# lsdev -C -t target# 查看 target 状态target0 Available iSCSI Target Mode Targettmiscsi0 Defined iSCSI Target Mode Targets Container# lsdev -C -t lu# 查看 Target LUN 的状态lu0 Available iSCSI Target Mode Logical Unitlu1 Available iSCSI Target Mode Logical Unit#
到现在,我们已经在服务器端,配置好了 iSCSI 的 target 服务。并将 2 个块设备映射成为 target0 的 Target LUN 设备。默认的配置选项没有打开安全控制访问以及 CHAP 认证机制。所以我们目前不需要关心访问权限等内容。这部分内容在最后一个章节讨论。
iSCSI software Initiator 配置
客户端需要我们配置客户端的 iqn 地址,还有 iSCSI Target 端的信息,我们将通过以下两个步骤来完成。
首先配置客户端的 iqn 地址。在客户端系统中使用 smit 来配置,smit 路径:smit chgiscsisw。
Change / Show Characteristics of an iSCSI Protocol DeviceType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Protocol Device iscsi0Description iSCSI Protocol DeviceStatus AvailableiSCSI Initiator Name [iqn.aix01.hostid.c0a81582]Maximum number of commands to queue to driver [200] +#Discovery Policy file +Maximum Targets Allowed [16] +#Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
在 iSCSI Initiator Name 一栏输入自定义的客户端 iqn,或使用自动生成的的 iqn 地址,我们在这里使用默认的生成的 iqn。下面我们通过编辑客户端 /etc/iscsi/targets 文件,添加 ISCSI target,也即配置 iSCSI 服务器信息。
# vi /etc/iscsi/targets# The target line would look like:# 10.2.1.105 3260 iqn.com.ibm-K167-42.fc1a "This is my password."## EXAMPLE 3: iSCSI Target with CHAP(MD5) authentication and line continuation# Assume the target is at address 10.2.1.106# the valid port is 3260# the name of the target is iqn.2003-01.com.ibm:00.fcd0ab21.shark128# the CHAP secret is "123ismysecretpassword.fc1b"# 字段格式为:“Server IP”端口“target iqn 地址”192.168.21.134 3260 com.ibm.cn.swtarget0
在上面这个文件我们添加了最后一行,由三个字段组成,第一段指定服务器 IP 地址,第二段指定服务端口,第三段指定服务器 target 的 iqn 地址。我们配置好 target 信息之后,执行 cfgmgr 刷新一下,如果配置正确,我们就可以找到 iSCSI disk 了。如下图
# cfgmgr -l iscsi0# 刷新设备列表# lsdev -Cc disk# 列出磁盘状态hdisk0 Available Virtual SCSI Disk Drivehdisk1 Available Other iSCSI Disk Drivehdisk2 Available Other iSCSI Disk Drive
创建 Datavg
这一步较为简单,我们能够正确连接到 iSCSI 服务器端,访问到 iSCSI 磁盘后,可以通过下列命令创建一个 vg。
# mkvg -y datavg hdisk1 hdisk2datavg# lsvg -p datavgdatavg:PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTIONhdisk1 active 511 511 103..102..102..102..102hdisk2 active 9 9 02..02..01..02..02
至此,我们已完成了在 AIX 平台上的关于 iSCSI 的一个基本的配置过程,包括:iSCSI 服务器配置,iSCSI 客户端的配置,以及使用 iSCSI 磁盘创建 vg。但是没有涉及到访问控制和认证等安全相关的内容,下面我们就 iSCSI 服务器安全机制做一个介绍。
iSCSI 访问安全控制
在 AIX 6 中,iSCSI 安全机制由两部分组成,一是使用 CHAP 握手协议对客户端连接请求做认证;二是通过访问列表(access list),控制客户端的访问权限。
CHAP 握手协议
CHAP 握手协议是一种应用广泛的身份验证的协议,可以对客户端进行身份验证。在 AIX 6 中,我们可以为每个 target 设置一个 CHAP 认证密钥,在服务器端的 /etc/tmiscsi/autosecrets 文件中配置。格式如下图:
# 字段格式为: target 名称 CHAP 用户名 CHAP 密钥# 本文中 target 名为 target0# 因为 AIX 的 iSCSI 客户端会自动使用本机的 iqn 地址作为 CHAP 的用户名,# 所以我们在这里设置 chap 名为客户端的 iqn 地址# CHAP 密钥:我们设定为 test1234#target0 iqn.aix01.hostid.c0a81582 test1234
相应的我们需要修改客户端的的配置文件,编辑 /etc/iscsi/targets 文件,在后面添加 CHAP 密钥信息。
vi /etc/iscsi/targets# 字段格式为:“Server IP”端口“target iqn 地址”“CHAP 密钥”。注意密钥需要在两边使用引号标记。192.168.21.134 3260 com.ibm.cn.swtarget0 “test1234”
我们通过 cfgmgr 命令刷新下设备。
# cfgmgr -vl iscsi0----------------attempting to configure device 'iscsi0'Time: 0 LEDS: 0x25b0invoking /usr/lib/methods/cfgiscsi -l iscsi0Number of running methods: 1----------------Completed method for: iscsi0, Elapsed time = 1return code = 0****************** stdout ***********hdisk1 hdisk2****************** no stderr ***********。。。( 略 )
访问控制列表
访问控制列表,是一个基于客户端 iqn 地址来控制访问权限的一个列表。它可以精确到设置每一个输出磁盘的访问权限。要使用访问控制功能,首先需要在创建 target 协议设备的时候需要激活该功能。或通过 smit tmiscsi_proto_change 来修改 Access Control enabled 为 on。修改必须要先删除该设备下的所有子设备,所以最好在创建的时候激活该功能。
Change / Show Characteristics of an iSCSI Target Protocol DeviceType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]iSCSI Target Protocol Device Name tmsw0Maximum number of sessions [200] +#Maximum transfer size in one PDU [262144] +#Access Control enabled [on] +Apply change to DATABASE only no +F1=Help F2=Refresh F3=Cancel F4=ListEsc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=ImageEsc+9=Shell Esc+0=Exit Enter=Do
访问权限的配置在 /etc/tmiscsi/access_lists 中设置,下面将提供一些配置例子以供参考。更详细的格式说明请参考 /etc/tmiscsi/access_lists 中的注释。
#vi /etc/tmiscsi/access_lists# 基本命令格式为:# target 名称 | LUN 名称客户端的 iqn 地址,客户端 iqn 地址…# 例:Target0 下的所有磁盘可以被 iqn 地址为 iqn.aix01.hostid.c0a8 的客户端访问。target0|all iqn.aix01.hostid.c0a8#target0 的 LUN 名为 disk1 的磁盘可以被 iqn.aix01.hostid 和 iqn.aix02.hostid 访问target0|disk1 iqn.aix01.hostid,iqn.aix02.hostid# 所有的 target 中的所有的磁盘可以被任意一个客户端访问。all|all any
小结
IBM 的 system p AIX 6 平台为中小企业的 iSCSI 应用提供了一种全新的解决方案。总体来说有以下三个优势。
AIX 6 的 iSCSI target 是集成在 AIX 安装光盘 expansion pack 里的一个软件包,无需额外费用。
借助 system p 强大的 IO 吞吐能力,能够保证稳定和高速的 iSCSI 流量。同时 system p 的先进的架构还能保证 IO 带宽的线性扩展能力。性能优势远非其他系统平台所能比拟。
作为 system p 的一贯特性:高可靠性,高可用性,高可服务性。这些特性不仅是在系统设计上得到保证,也一直被业界所认可。
我们看到依托于 system p 强大的硬件平台,AIX 6 提供的 iSCSI target 解决方案即高可靠又高性能。反过来说,AIX 6 进一步拓展了其 UNIX 平台的应用领域,将 system p 服务器打造成了一台“iSCSI 存储设备”。