引言
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 Device
Move cursor to desired item and press Enter.
List All iSCSI Target Protocol Devices
Add an iSCSI Target Protocol Device
Change / Show Characteristics of an iSCSI Target Protocol Device
Remove an iSCSI Target Protocol Device
F1=Help F2=Refresh F3=Cancel Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
选择 Add an iSCSI Target Protocol Device, 按回车到下一步。
Add an iSCSI Target Protocol Device
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[Entry Fields]
iSCSI Target Protocol Device Name tmsw0
Maximum 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
在此处配置 Target 的性能参数,我们一般使用默认值。 Access Control enabled 这一栏我们下面还会提到,打开或关闭取决于我们是否采用基于 iqn 的安全访问控制机制。在这里我们直接回车到下一步。
COMMAND STATUS
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
tmsw0 Available
F1=Help F2=Refresh F3=Cancel Esc+6=Command
Esc+8=Image Esc+9=Shell Esc+0=Exit /=Find
第二步,我们创建虚拟的 Target 设备。使用命令 smit tmtarget。
iSCSI Targets
Move cursor to desired item and press Enter.
List All iSCSI Targets
Add an iSCSI Target
Change / Show Characteristics of an iSCSI Target
Remove an iSCSI Target
F1=Help F2=Refresh F3=Cancel Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
选择 Add an iSCSI Target。
Add an iSCSI Target
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[Entry Fields]
iSCSI Target Protocol Device Name tmsw0
iSCSI 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
在 iSCSI Target Name 一栏输入 Target 设备的 iqn 地址。其他保持默认值。我们设置其为 com.ibm.cn.swtarget0. 按回车下一步。
COMMAND STATUS
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
target0 Available
Target 设备即创建完成。
最后,我们将 LV exlv 和 hdisk1 两个块设备挂载(mapping)到 Target 设备下,作为 iSCSI Target LUN 设备。使用命令 smit tmlun
iSCSI Target LUNs
Move cursor to desired item and press Enter.
List all iSCSI Target Logical Units
Add an iSCSI Target Logical Unit
Change / Show Characteristics of an iSCSI Target Logical Unit
Remove an iSCSI Target Logical Unit
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x iSCSI Parent Target Name x
x x
x Move cursor to desired item and press Enter. x
x x
x target0 Available iSCSI Target Mode Target x
x x
x F1=Help F2=Refresh F3=Cancel x
x Esc+8=Image Esc+0=Exit Enter=Do x
F1x /=Find n=Find Next x
Esmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
选择 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 target0
Logical 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
我们先添加 hdisk1,在 Backing Device type 中输入设备类型 disk。在 Backing Device Name 输入 hdisk1. 回车下一步。
COMMAND STATUS
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
lu0 Available
F1=Help F2=Refresh F3=Cancel Esc+6=Command
Esc+8=Image Esc+9=Shell Esc+0=Exit /=Find
n=Find Next
hdisk1 已添加好成为 Target LUN。下面我们继续添加 LV exlv。
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 target0
Logical 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+9=Shell Esc+0=Exit Enter=Do
在设备类型一栏选择 lv,在 Backing Device Name 一栏输入 exlv,按回车到下一步。
COMMAND STATUS
Command: OK stdout: yes stderr: no
Before command completion, additional instructions may appear below.
lu1 Available
F1=Help F2=Refresh F3=Cancel Esc+6=Command
Esc+8=Image Esc+9=Shell Esc+0=Exit /=Find
n=Find Next
通过以下命令,来检查刚创建的设备的状态是否正常 :
# lsdev -C -t target# 查看 target 状态
target0 Available iSCSI Target Mode Target
tmiscsi0 Defined iSCSI Target Mode Targets Container
# lsdev -C -t lu# 查看 Target LUN 的状态
lu0 Available iSCSI Target Mode Logical Unit
lu1 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 Device
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[Entry Fields]
iSCSI Protocol Device iscsi0
Description iSCSI Protocol Device
Status Available
iSCSI 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+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 Drive
hdisk1 Available Other iSCSI Disk Drive
hdisk2 Available Other iSCSI Disk Drive
创建 Datavg
这一步较为简单,我们能够正确连接到 iSCSI 服务器端,访问到 iSCSI 磁盘后,可以通过下列命令创建一个 vg。
# mkvg -y datavg hdisk1 hdisk2
datavg
# lsvg -p datavg
datavg:
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk1 active 511 511 103..102..102..102..102
hdisk2 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: 0x25b0
invoking /usr/lib/methods/cfgiscsi -l iscsi0
Number of running methods: 1
----------------
Completed method for: iscsi0, Elapsed time = 1
return 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 Device
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[Entry Fields]
iSCSI Target Protocol Device Name tmsw0
Maximum 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=List
Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image
Esc+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 存储设备”。