Fibre Channel 和iSCSI是我们导出块存储设备给initiator的最常见两种方式,深入理解通过这两种通道建立target、后端存储、ACL、探测target、连接和断开target、实现fail-over的差异,是我们统一设计和前端用户界面和底层文件系统的接口之前必须要做的功课,同时也是确保Fabric应用层的实现更精简高效、避免代码冗余的前提。为此,笔者结合自身工作实际,归纳了两者的差异,以供大家参考,也欢迎一起讨论、细化。
Iscsi | FC | 备注 | |
后端驱动依赖 | iscsi_target_mod/ target_core_mode target_core_iblock | tcm_qla2xxx target_core_mode target_core_pscsi qla2xxx | |
后端工具 | targetcli | targetcli | |
添加后端存储 | targetcli /backstores/block create my_vol2 /dev/sdd | targetcli /backstores/block create my_vol2 /dev/sdd | |
确定后端target名 | iscsiname=`targetcli /iscsi create | grep "Created" | head -n1 | awk '{print $3}'`; 或者软件指定 | fc_target_name=`cat /sys/class/fc_host/host*/port_name | sed -e s/0x// -e 's/../&:/g' -e s/:$// | head -n 1` | |
创建后端target | targetcli /iscsi create | grep "Created" | head -n1 | awk '{print $3}'` | targetcli /qla2xxx create ${fc_target_name} | |
导出后端存储 | targetcli /iscsi/${iscsiname}/tpg1/luns create /backstores/block/vol2 | targetcli /qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun2 | |
Chap | targetcli /iscsi/${iscsiname}/tpg1 set attribute authentication=0 | NO | |
Vol Group | targetcli /iscsi/${iscsiname}/tpg1/luns create /backstores/block/vol2 targetcli /iscsi/${iscsiname}/tpg1/luns create /backstores/block/vol3 targetcli /iscsi/${iscsiname}/tpg1/luns create /backstores/block/vol4 targetcli /iscsi/${iscsiname}/tpg1/luns create /backstores/block/vol5 | targetcli /qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun0 targetcli /qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun1 targetcli /qla2xxx/${fc_target_name}/luns create /backstores/block/my_lun2 | 挂靠在同 一个target 下的一组 逻辑卷 |
ACL | targetcli /iscsi/${iscsiname}/tpg1 set generate_node_acls=1 | targetcli /qla2xxx/${fc_target_name}/acls create ${acl_host0} | |
RW/RO | targetcli /iscsi/${iscsiname}/tpg1 set attribute demo_mode_write_protect=1/0 | targetcli /iscsi/${iscsiname}/tpg1 set attribute demo_mode_write_protect=1/0 | |
Portals | targetcli /iscsi/${iscsiname}/tpg1/portals create 19.16.1.144 3260 | NO | |
initiator建立 链接方式 | iscsiadm -m discovery -t sendtargets -p 19.16.1.144:3260 -l | echo 1 > /sys/class/fc_host/$i/issue_lip | |
initiator断开 链接 | iscsiadm -m session -u | echo 0 > /sys/class/fc_host/$i/issue_lip | |
Initiator Group | 具有相同chap/ACL设置的一组 initiators | 具有相同ACL设置的一组 initiators | FC的ACL 设置需要 cd 到对应Host的acls里面去,然后添加授权逻辑卷 |
Active-standby 模式下对initiator的要求 | 安装iscsi 客户端:Linux下iscsiadm; | 安装多路径软件,且让多路径软件运行在fail-over模式 | iscsi基于TCP/IP绑定后端存储,而FC 基于wwn来绑定后端存储 |