基于最近Fibre
channel的相关工作,整理了下关于创建和使用target、实现fail-over过程中碰到的问题和解决方法。
0.准备好合适的后端targetcli工具
0.1安装后端工具
主要有两个库要装,rtslib和targetcli,可以参考下面的两种方法进行安装:
python-rtslib.noarch
: API for Linux kernel LIO SCSI target
方法一:通过yum安装
yum
install python-rtslib.noarch targetcli
yum
install python-netifaces-0.10.4-3.el7.x86_64
python-prettytable.noarch
yum
install python-configshell.noarch
方法二:用git从github上下载支持FB的targetcli和rtslib版本
git
clone https://github.com/Datera/targetcli
git
clone https://github.com/Datera/rtslib
然后分别进入目录,运行:
./setup.py
build
/setup.py
install
这个过程中,可能遇到依赖的问题,可以尝试通过安装下面的依赖包解决:
yum
install python-netifaces-0.10.4-3.el7.x86_64
python-prettytable.noarch
yum
install python-configshell.noarch
0.2检查配置文件
需要确保当前targetcli至少支持iscsi,要求/var/target/fabric至少有iscsi.spec和qla2xxx.spec。
[[email protected]
fabric]# pwd
/var/target/fabric
You
have new mail in /var/spool/mail/root
[[email protected]
fabric]# ls
ib_srpt.spec
iscsi.spec loopback.spec qla2xxx.spec tcm_fc.spec
usb_gadget.spec vhost.spec
此外,为了让后端存储设备通过Fibre
channel建立target的时候能够自动找到WWN,需要确保qla2xxx.spec里面文件里能自动过滤得到HBA的WWN,这是通过修改:
wwn_from_files_filter
= "sed -e s/0x// -e ‘s/../&:/g‘ -e s/:$//" 实现的。
[[email protected]
fabric]# cat qla2xxx.spec
#
The qla2xxx fabric module uses the default feature set.
features
= acls
#
Non-standard module naming scheme
kernel_module
= tcm_qla2xxx
#
The module uses hardware addresses from there
wwn_from_files
= /sys/class/fc_host/host*/port_name
#
Transform ‘0x1234567812345678‘ WWN notation to
‘12:34:56:78:12:34:56:78‘
wwn_from_files_filter
= "sed -e s/0x// -e ‘s/../&:/g‘ -e s/:$//"
#
The configfs group is default
#
configfs_group = qla2xxx
1.实现通过Fibre
Channel导出后端存储设备的脚本
可以参考笔者的一个简单实现:
[[email protected]
myfc]# cat create_fc_volume.sh
#!/bin/bash
fc_target_name="naa.2100000e1e1b0190"
##
initiator wwn can be get by following command""
#cat
/sys/class/fc_host/host*/port_name | sed -e s/0x// -e ‘s/../&:/g‘
-e s/:$//
acl_host0="21:00:00:0e:1e:c2:3e:a0"
acl_host1="21:00:00:0e:1e:c2:3e:a1"
#
step 1: create back-end storage
targetcli
/backstores/block create my_lun0 /dev/md1287
targetcli
/backstores/block create my_lun1 /dev/md0
#
step 2: create target
targetcli
/qla2xxx create 21:00:00:0e:1e:1b:01:90
#targetcli
/qla2xxx create 21:00:00:0e:1e:1b:01:91
#
step 3: export the back-end storage
targetcli
/qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun0
targetcli
/qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun1
#
step 3: set ACL controlling list
targetcli
/qla2xxx/${fc_target_name}/acls create ${acl_host0}
targetcli
/qla2xxx/${fc_target_name}/acls create ${acl_host1}
#
step 4: save configration
targetcli
saveconfig myfc_lun.lio
运行上面的脚本,成功之后用targetcli可以看到后端存储target已经建立起来了:
2.发现并连接FC
Target
在上面ACL列出的WWN所对应的HBA卡的host的操作系统上,
运行下面的命令:
echo
1 > /sys/class/fc_host/hostX/issue_lip 就能自动发现并连接上后端存储设备,此时会发现host
/dev下面多了
一块设备,可以通过host上的vdbench对它进行简单性能测试:
可以看到,上面的带宽确实很快。