[TOC]
0x00 简述 描述:前面我们正针对于iSCSI与SCSI做了一个简单的介绍, 并且在网络共享中使用过 nfs 以及 smb而iSCSI同样有该功能, 本文记录在学习与工作中搭建与使用iSCSI网络存储案例;
问:什么是iSCSI? iSCSI(Internet Small Computer System Interface
)即Internet小型计算机系统接口; iSCSI又称为IP-SAN(基于IP网络的存储区域网),是一种基于因特网及SCSI-3协议下的存储技术由IETF提出,并于2003年2月11日成为正式的标准。iSCSI可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行快速的数据存取备份操作,也就是基于网络的存储。 在现有IP网络上传输SCSI块命令的工业标准,它是一种在现有的IP网络上无需安装单独的光纤网络即可同时传输消息和块数据的突破性技术;
iSCSI基于应用非常广泛的TCP/IP协议,将SCSI命令/数据块封装为iSCSI包
,再封装至TCP报文,然后封装到IP报文中。
weiyigeek.top-
iSCSI通过TCP面向连接的协议来保护数据块的可靠交付。
由于iSCSI基于IP协议栈,因此可以在标准以太网设备上通过路由器或交换机来传输。
本质上iSCSI 基于TCP/IPX协议让两台主机通过 IP 网络相互协商(基于了TCP/IP的port 860 和 3260
)然后交换SCSI命令,您可以将它看做是一个高性能本地存储总线,从而创建了一个存储局域网(SAN)。但与SAN协议存储解决方案不同的是iSCSI 不需要专用的电缆
,它可以在已有的交换和 IP 基础架构上运行;同时也体现出如果不使用专用的网络或者子网( LAN 或者 VLAN )
,iSCSI SAN 的部署性能可能会严重下降。
而iSCSI 服务提供数据集中化存取,且以区块为单位的数据存储空间,不仅简化存储空间管理的步骤、优化存储空间的使用,同时也增添了存储空间的弹性。它将SCSI指令通过网络分享出去,让价格低廉且操作简易的网络存储空间在iSCSI上运行。
对客户端而言,会让你感觉计算机彷佛连接一个本地硬盘,可通过本地端计算机操作系统来管理。事实上,新增的磁盘是NAS上的虚拟硬盘。因为硬盘是虚拟的,因此不必再为计算机添加额外硬件,通过一般网络基础架构就可管理此虚拟硬盘。
总的来说 ,iSCSI 常常被认为是光纤通道(Fiber Channel)
的一个低成本替代方法,让计算机可以透过高速的局域网集线来把SAN以太网的光纤通道(FCoE)则不需要专用的基础架构。由于 iSCSI 服务提供了一个高扩充性和低组建与低维护成本的整合型存储方式,这正是大部份有预算考虑的中小企业和办公室所需求的。
ISCSI SAN基础服务组件介绍 iSCSI SAN组件与FC SAN组件相类似,组成部分包括以下部件:
weiyigeek.top-
1.iSCSI Target:它概念类似于一种联机接口,当iSCSI启动器联机至iSCSI Target时,iSCSI Target上连结的所有LUN也会联机至客户端的操作系统。每一个iSCSI target通过唯一的IQN来标识,存储阵列控制器上(或桥接器上)的各端口通过一个或多个IP地址来标识本机与异构IP SAN
:
2.iSCSI initiator:在计算机与存储装置关连中,你的计算机被称为“iSCSI initiator”(iSCSI启动器)客户端或主机,因为它开启链接至存储装置。诸如服务器连接在IP网络并对iSCSI target发起请求以及接收响应。每一个iSCSI主机通过唯一的IQN来识别,类似于光纤通道的WWN;要在IP网络上传递SCSI块命令,必须在iSCSI主机上安装iSCSI驱动。
3.iSCSI LUN:在iSCSI环境中的LUN实际上就是经过编号的硬盘或是实体硬盘所建立的一个储存空间,它是真正的存储实体。用户可以在这些iSCSI LUN上建立并管理文件,就像管理本地硬盘一样。
本机iSCSI SAN与异构IP SAN的区别:
本机iSCSI SAN:它包含在TCP/IP上传输SCSI协议的整个组件,包括iSCSI initiator(或client)是主机服务器,而iSCSI target是存储阵列
;
异构IP SAN:包含在TCP/IP与光纤交换结构传输SCSI的组件。为了实现这一点需要在IP与光纤通道之间安装连接桥或网关设备
,连接桥用于TCP/IP与光纤通道之间的协议转换;因此iSCSI主机将连接桥看做iSCSI target。
weiyigeek.top-
ISCSI的工作流程:
第一步:iSCSI系统由SCSI适配器发送一个SCSI命令,命令封装到TCP/IP包中并送入到以太网络中进行传输。
第二步:接收方从TCP/IP包中提取SCSI命令并执行相关操作,执行完毕后,将返回的SCSI命令和数据封装到TCP/IP包中,把它们发回到发送方;
第三步:发送方的iSCSI系统从接收方发过来的TCP/IP包中提取出数据或命令,并把它们传回到SCSI子系统。
weiyigeek.top-
解析:我们可以在这里简单的理解为客户端与服务器上的SCSI端口
是通过SCSI协议标准虚拟出来的用于建立连接的端口。 通过iSCSI实现存储共享,首先创建IQN用于识别启动器和目标,接着建立TPG共享存储组并设置相应的访问控制权限,然后在共享存储组添加lun逻辑单元(即存储设备)
,最后建立实现共享portals入口(ip port,就是通过IP进行访问的端口号)。
概念解释:
[TOC]
0x00 简述 描述:前面我们正针对于iSCSI与SCSI做了一个简单的介绍, 并且在网络共享中使用过 nfs 以及 smb而iSCSI同样有该功能, 本文记录在学习与工作中搭建与使用iSCSI网络存储案例;
问:什么是iSCSI? iSCSI(Internet Small Computer System Interface
)即Internet小型计算机系统接口; iSCSI又称为IP-SAN(基于IP网络的存储区域网),是一种基于因特网及SCSI-3协议下的存储技术由IETF提出,并于2003年2月11日成为正式的标准。iSCSI可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行快速的数据存取备份操作,也就是基于网络的存储。 在现有IP网络上传输SCSI块命令的工业标准,它是一种在现有的IP网络上无需安装单独的光纤网络即可同时传输消息和块数据的突破性技术;
iSCSI基于应用非常广泛的TCP/IP协议,将SCSI命令/数据块封装为iSCSI包
,再封装至TCP报文,然后封装到IP报文中。
weiyigeek.top-
iSCSI通过TCP面向连接的协议来保护数据块的可靠交付。
由于iSCSI基于IP协议栈,因此可以在标准以太网设备上通过路由器或交换机来传输。
本质上iSCSI 基于TCP/IPX协议让两台主机通过 IP 网络相互协商(基于了TCP/IP的port 860 和 3260
)然后交换SCSI命令,您可以将它看做是一个高性能本地存储总线,从而创建了一个存储局域网(SAN)。但与SAN协议存储解决方案不同的是iSCSI 不需要专用的电缆
,它可以在已有的交换和 IP 基础架构上运行;同时也体现出如果不使用专用的网络或者子网( LAN 或者 VLAN )
,iSCSI SAN 的部署性能可能会严重下降。
而iSCSI 服务提供数据集中化存取,且以区块为单位的数据存储空间,不仅简化存储空间管理的步骤、优化存储空间的使用,同时也增添了存储空间的弹性。它将SCSI指令通过网络分享出去,让价格低廉且操作简易的网络存储空间在iSCSI上运行。
对客户端而言,会让你感觉计算机彷佛连接一个本地硬盘,可通过本地端计算机操作系统来管理。事实上,新增的磁盘是NAS上的虚拟硬盘。因为硬盘是虚拟的,因此不必再为计算机添加额外硬件,通过一般网络基础架构就可管理此虚拟硬盘。
总的来说 ,iSCSI 常常被认为是光纤通道(Fiber Channel)
的一个低成本替代方法,让计算机可以透过高速的局域网集线来把SAN以太网的光纤通道(FCoE)则不需要专用的基础架构。由于 iSCSI 服务提供了一个高扩充性和低组建与低维护成本的整合型存储方式,这正是大部份有预算考虑的中小企业和办公室所需求的。
ISCSI SAN基础服务组件介绍 iSCSI SAN组件与FC SAN组件相类似,组成部分包括以下部件:
weiyigeek.top-
1.iSCSI Target:它概念类似于一种联机接口,当iSCSI启动器联机至iSCSI Target时,iSCSI Target上连结的所有LUN也会联机至客户端的操作系统。每一个iSCSI target通过唯一的IQN来标识,存储阵列控制器上(或桥接器上)的各端口通过一个或多个IP地址来标识本机与异构IP SAN
:
2.iSCSI initiator:在计算机与存储装置关连中,你的计算机被称为“iSCSI initiator”(iSCSI启动器)客户端或主机,因为它开启链接至存储装置。诸如服务器连接在IP网络并对iSCSI target发起请求以及接收响应。每一个iSCSI主机通过唯一的IQN来识别,类似于光纤通道的WWN;要在IP网络上传递SCSI块命令,必须在iSCSI主机上安装iSCSI驱动。
3.iSCSI LUN:在iSCSI环境中的LUN实际上就是经过编号的硬盘或是实体硬盘所建立的一个储存空间,它是真正的存储实体。用户可以在这些iSCSI LUN上建立并管理文件,就像管理本地硬盘一样。
本机iSCSI SAN与异构IP SAN的区别:
本机iSCSI SAN:它包含在TCP/IP上传输SCSI协议的整个组件,包括iSCSI initiator(或client)是主机服务器,而iSCSI target是存储阵列
;
异构IP SAN:包含在TCP/IP与光纤交换结构传输SCSI的组件。为了实现这一点需要在IP与光纤通道之间安装连接桥或网关设备
,连接桥用于TCP/IP与光纤通道之间的协议转换;因此iSCSI主机将连接桥看做iSCSI target。
weiyigeek.top-
ISCSI的工作流程:
第一步:iSCSI系统由SCSI适配器发送一个SCSI命令,命令封装到TCP/IP包中并送入到以太网络中进行传输。
第二步:接收方从TCP/IP包中提取SCSI命令并执行相关操作,执行完毕后,将返回的SCSI命令和数据封装到TCP/IP包中,把它们发回到发送方;
第三步:发送方的iSCSI系统从接收方发过来的TCP/IP包中提取出数据或命令,并把它们传回到SCSI子系统。
weiyigeek.top-
解析:我们可以在这里简单的理解为客户端与服务器上的SCSI端口
是通过SCSI协议标准虚拟出来的用于建立连接的端口。 通过iSCSI实现存储共享,首先创建IQN用于识别启动器和目标,接着建立TPG共享存储组并设置相应的访问控制权限,然后在共享存储组添加lun逻辑单元(即存储设备)
,最后建立实现共享portals入口(ip port,就是通过IP进行访问的端口号)。
概念解释: 1 2 3 4 5 6 7 8 TPG:共享存储组,某个特定iSCSI目标要侦听的接口IP地址和TCP端口的集合。可以将目标配置添加到TPG以协调多个LUN的设置。 ACL:访问权限控制列表,一种使用节点IQN(通常是启动器名称)来验证启动器的访问权限的访问限制。 IQN:iSCSI限定名称,全球唯一名称,用于以强制命名格式来识别启动器和目标。 IQN格式如下: iqn.YYYY-MM.com.reversed.domain[:optional_string] iqn:表示此名称使用域为标识符; YYYY-MM:表示拥有域名的年月时间; com.reversed.domain:拥有此iSCSI组织的逆向域名; :optional_string:以冒号为前缀的可选字符串,全球唯一由域所有者分配,其中可包含冒号为分割符的组织边界; LUN:逻辑单元号,带有编号的块设备,连接到目标且通过目标来使用。可以有一个或多个LUN连接到单个目标,但通常一个目标提供一个LUN; portals入口:目标或启动器上用于建立连接的IP地址和端口号端口号一般为`3260`;目标端的portals入口配置使用targetcli命令。
IQN格式说明:1 2 3 4 5 iqn.YYYY-MM.com.reversed.domain[:optional_string] iqu.YYYY-MM.com.域名反向书写:计算机名称 iqn.2020-01.top.weiyigeek:weiyigeek.pc
iSCSI SAN 应用场景:
(1) 存储集成公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心),这可以让存储的分配变得更为有效。 SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。
(2) 灾难恢复公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。 特别是iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是把存储变成了“可路由的”,就像普通的网络通信一样。
注意事项:
通常情况下不要使用多个iSCSI启动器连接相同的Target,以免硬盘数据损毁,除非使用的是丛集感应文件系统,如Vmware虚拟机或Oracle Clustering文件系统。
0x01 基础实操 实操实现说明:
Linux 安装 Target 作为iSCSI 服务端,分别采用Windows / Linux 作为 Initiator来访问iSCSI target并挂载iSCSI网络存储(配置ACLS与CHAP认证)
;
Windows Server 安装 Target 作为iSCSI 服务端,然后仍然分别采用Windows / Linux 作为 Initiator [ 英 /ɪˈnɪʃieɪtə(r)/ ]
来访问iSCSI target并挂载置iSCSI网络存储(配置ACLS与CHAP认证)
;
Linux-iSCSI-Target 环境准备: 1 2 3 4 5 6 7 Linux OS(Target): CentOS Linux release 7.6.1810 (Core) 3.10.0-957.12.2.el7.x86_64 Windows PC: iqn.2020-01.top.weiyigeek:weiyigeek.top Windows Server(Clint): Microsoft Windows Server 2012 R2 Standard Linux OS(Client):CentOS Linux release 7.7.1908 (Core) 3.10.0-1062.1.1.el7.x86_64
操作流程:
iSCSI Target 端配置:
Step1.本案例中我采用ESXI建立虚拟机并添加两块硬盘,并分别以磁盘上的一个分区来充当ISCSI存储空间的,实际应用中一般会添加新的磁盘或大容量存储的存储设备:
weiyigeek.top-
Step2.开启并进入Linux OS(Target)
系统中查看做iscsi网络存储的磁盘,并进行格式化;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk sdb 8:16 0 10G 0 disk sdc 8:32 0 40G 0 disk ├─sdc1 8:33 0 1G 0 part /boot └─sdc2 8:34 0 39G 0 part ├─centos-root 253:0 0 37G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom $ fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2) 使用磁盘标识符 0x48305faa 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Select Partition type (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-20971519,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519): 将使用默认值 20971519 分区 1 已设置为 Linux 类型,大小设为 10 GiB 命令(输入 m 获取帮助):w $ fdisk -l fdisk /dev/sdb 磁盘 /dev/sda:10.7 GB, 10737418240 字节,20971520 个扇区 设备 Boot Start End Blocks Id System /dev/sda1 2048 20971519 10484736 83 Linux 磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区 设备 Boot Start End Blocks Id System /dev/sdb1 2048 20971519 10484736 83 Linux $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 10G 0 disk └─sda1 8:1 0 10G 0 part sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part
Step3.安装服务端ISCSI服务对应的相关软件包;1 2 yum install targetcli net-tools –y
Step4.设置target开机自动启动和防火墙设置放行target 监听端口(默认为3260/tcp)1 2 3 $systemctl enable target.service$firewall -cmd --permanent -add-port=3260/tcp$firewall0cmd --reload
Step5.运行targetcli进入交互模式创建服务端的iSCSI服务以及其基本配置;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 $ targetcli /> ls o- / ..... [...] o- backstores ........................... [...] | o- block ............... [Storage Objects: 0] | o- fileio .............. [Storage Objects: 0] | o- pscsi ............... [Storage Objects: 0] | o- ramdisk ............. [Storage Objects: 0] o- iscsi ......................... [Targets: 0] o- loopback ...................... [Targets: 0] /> cd backstores/block /backstores/block> ls o- block ................... [Storage Objects: 0] /backstores/block> create dev=/dev/sda name=lun0 Created block storage object lun0 using /dev/sda. /backstores/block> create dev=/dev/sdb name=lun1 Created block storage object lun1 using /dev/sdb. /backstores/block> ls o- block ................... [Storage Objects: 2] o- lun0 ............ [/dev/sda (10.0GiB) write-thru deactivated] | o- alua .................... [ALUA Groups: 1] | o- default_tg_pt_gp ......... [ALUA state: Active/optimized] o- lun1 ............ [/dev/sdb (10.0GiB) write-thru deactivated] o- alua .................... [ALUA Groups: 1] o- default_tg_pt_gp ......... [ALUA state: Active/optimized] /backstores/block> cd /iscsi /iscsi> create iqn.2020-01.top.weiyigeek:target Created target iqn.2020-01.top.weiyigeek:target. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. /iscsi> cd iqn.2020-01.top.weiyigeek:target/tpg1/portals/ /iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260 /iscsi/iqn.20.../tpg1/portals> create 192.168.10.222 3260 /iscsi/iqn.20.../tpg1/portals> cd ../../ /iscsi/iqn.20...yigeek:target> ls o- iqn.2020-01.top.weiyigeek:target ........................................... [TPGs: 1] o- tpg1 ........................................................ [no-gen-acls, no-auth] o- acls ................................................................... [ACLs: 0] o- luns ................................................................... [LUNs: 0] o- portals ............................................................. [Portals: 1] o- 192.168.10.222:3260 ......................................................... [OK] /iscsi/iqn.20...yigeek:target> cd tpg1/ /iscsi/iqn.20...k:target/tpg1> set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1 Parameter demo_mode_write_protect is now '0' . Parameter authentication is now '1' . Parameter generate_node_acls is now '1' . Parameter cache_dynamic_acls is now '1' . /iscsi/iqn.20.../tpg1/portals> cd ../luns /iscsi/iqn.20...get/tpg1/luns> create /backstores/block/lun0 lun=lun0 /iscsi/iqn.20...get/tpg1/luns> create /backstores/block/lun1 lun=lun1 /iscsi/iqn.20...get/tpg1/luns> ls o- luns ............... [LUNs: 2] o- lun0 ............. [block/lun0 (/dev/sda) (default_tg_pt_gp)] o- lun1 ............. [block/lun1 (/dev/sdb) (default_tg_pt_gp)] /iscsi/iqn.20...get/tpg1/acls> create iqn.2020-01.top.weiyigeek:weiyigeek.top /iscsi/iqn.20...get/tpg1/acls> create iqn.2020-01.top.weiyigeek:initiator /iscsi/iqn.20...get/tpg1/acls> ls o- acls ...........initiatorinitiator........... [ACLs: 2] o- iqn.2020-01.top.weiyigeek:initiator initiator...... [Mapped LUNs: 2] | o- mapped_lun0 initiator...................... [lun0 block/lun0 (rw)] | o- mapped_lun1 initiator...................... [lun1 block/lun1 (rw)] o- iqn.2020-01.top.weiyigeek:weiyigeek.top initiator.. [Mapped LUNs: 2] o- mapped_lun0 initiator...................... [lun0 block/lun0 (rw)] o- mapped_lun1 initiator...................... [lun1 block/lun1 (rw)] /iscsi/iqn.20...get/tpg1/> set attribute generate_node_acls=1 /iscsi> set discovery_auth enable =1 userid=target password=WeiyiGeekiSCSI /iscsi/iqn.20...get/tpg1/luns> exit Global pref auto_save_on_exit=true Configuration saved to /etc/target/saveconfig.json
Step6.命令行模式进行设置1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 targetcli /backstores/block create dev=/dev/sda name=lun0 targetcli /backstores/block create dev=/dev/sdb name=lun1 targetcli /backstores/block create name=datastore dev=/dev/iscsi_vg/iscsi_lv targetcli /backstores/block ls targetcli /iscsi create iqn.2020-01.top.weiyigeek:target targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/portals/ delete 0.0.0.0 3260 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/portals/ create 192.168.10.22 3260 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/ set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/luns create /backstores/block/lun0 lun=lun0 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/luns create /backstores/block/lun1 lun=lun1 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1/acls create iqn.2020-01.top.weiyigeek:weiyigeek.top targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1 set attribute generate_node_acls=1 targetcli /iscsi set discovery_auth enable =1 userid=target password=WeiyiGeekiSCSI
Step7.systemd启动 target.service 到此 target服务器端配置完成;1 2 [root@localhost ~] [root@localhost ~]
补充操作: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ targetcli /iscsi> ls o- iscsi .......... [1-way disc auth, Targets: 1] o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.ac4d1254d4da ........................ [TPGs: 1] o- tpg1 ................. [gen-acls, no-auth] o- luns ......................... [LUNs: 2] | o- lun0 ....... [block/lun0 (/dev/sda) (default_tg_pt_gp)] | o- lun1 ....... [block/lun1 (/dev/sdb) (default_tg_pt_gp)] o- portals ................... [Portals: 1] o- 0.0.0.0:3260 .................... [OK] /iscsi> delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.ac4d1254d4da Deleted Target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.ac4d1254d4da. /iscsi> cd /backstores/block /backstores/block> delete lun0 /backstores/block> delete lun1 /> clearconfig confirm=True
补充说明:
1.ACL(访问控制列表)必须要和initiator端/etc/iscsi/initiatorname.iscsi里iqn名字保持一致以及iscsi发起程序名称一致,否则拒绝访问。
weiyigeek.top-
2.记录配置iSCSI文件路径/etc/target/saveconfig.json
3.非常注意服务认证有两种(坑啊): 发现认证discovery authentication 、 normal 认证
iSCSI initiator 端配置: (1) windows 连接例子
1.运行iSCSI发起程序,如果是第一次运行需要开启iSCSI服务(个人PC)点击是即可;C:\Windows\system32\iscsicpl.exe
weiyigeek.top-
weiyigeek.top-
3.将发现的iSCSI Target添加到当前计算机会话中(直接连接或者通过属性–添加会话);
weiyigeek.top-
4.此时运行diskmgmt.msc
发现本地多个两块10g的磁盘,右键磁盘删除卷然后新建卷,按照提示进行设置盘符,我们测试在iSCSI网络存储里面存放数据;
weiyigeek.top-
5.采用Windows Server 2012 进行链接同一个iqn并连接到iSCSI磁盘存储,如果我们没有设置ACLS并且没认证的时候则只有read only权限;
weiyigeek.top-
6.Server 2012 连接到iSCSI后我们可以看到我们在iSCCI网络存储中存放的数据;
weiyigeek.top-
(2) Linux 连接例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 hostnamectl set -hostname initiator yum install -y iscsi-initiator-utils systemctl start iscsi systemctl enable iscsi cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2020-01.top.weiyigeek:initiator grep -nE "node.session.auth|discovery.sendtargets.auth" /etc/iscsi/iscsid.conf 71:discovery.sendtargets.auth.authmethod = CHAP 75:discovery.sendtargets.auth.username = target 76:discovery.sendtargets.auth.password = WeiyiGeekiSCSI iscsiadm -m discovery -t sendtargets -p 192.168.10.222 -d2 192.168.10.222:3260,1 iqn.2020-01.top.weiyigeek:target iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -l Logging in to [iface: default, target: iqn.2020-01.top.weiyigeek:target, portal: 192.168.10.222,3260] (multiple) Login to [iface: default, target: iqn.2020-01.top.weiyigeek:target, portal: 192.168.10.222,3260] successful. $lsscsi [0:0:0:0] disk VMware Virtual disk 1.0 /dev/sda [3:0:0:0] cd /dvd NECVMWar VMware SATA CD00 1.00 /dev/sr0 [40:0:0:0] disk LIO-ORG lun0 4.0 /dev/sdb [40:0:0:1] disk LIO-ORG lun1 4.0 /dev/sdc $mkfs .xfs /dev/sdc1 $mkdir /mnt/iscsi $mount /dev/sdc1 /mnt/iscsi $mount -l/dev/sdc1 on /mnt/iscsi type xfs (rw,relatime,seclabel,attr2,inode64,noquota) $df -h/dev/sdc1 10G 33M 10G 1% /mnt/iscsi $ ll /dev/disk/by-uuid/ 0e879666-c926-427d-a69b-59004556fe22 -> ../../sdc1 cat >> /etc/fstab <<END UUID=0e879666-c926-427d-a69b-59004556fe22 /mnt/iscsi xfs defaults 0 0 END cat >> /etc/rc.d/rc.local<<END mount /dev/sdc1 /mnt/iscsi/ END $umount /mnt/iscsi/$iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -uLogging out of session [sid: 7, target: iqn.2020-01.top.weiyigeek:target, portal: 192.168.10.222,3260] Logout of [sid: 7, target: iqn.2020-01.top.weiyigeek:target, portal: 192.168.10.222,3260] successful. $tree /var/lib/iscsi//var/lib/iscsi/ ├── ifaces ├── isns ├── nodes │ └── iqn.2020-01.top.weiyigeek:target │ └── 192.168.10.222,3260,1 │ └── default ├── send_targets │ └── 192.168.10.222,3260 │ ├── iqn.2020-01.top.weiyigeek:target,192.168.10.222,3260,1,default -> /var/lib/iscsi/nodes/iqn.2020-01.top.weiyigeek:target/192.168.10.222,3260,1 │ └── st_config ├── slp └── static $iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -o delete
注意事项:
1.注意一定要添加写操作保护,如果两个initiator连接到同一磁盘并对其操作,操作的数据会缓存等待断开时候写入磁盘,同时其它成员也可以进行读取,这样会导致读写不一致的情况;但是有了写操作主initiator必须等待另一个client对文件写完才能断开,且如果修改同一个文件则以最后断开的为主:set demo_mode_write_protect=1
;
weiyigeek.top-
Windows-iSCSI-Target 描述:通过Windows Server 搭建iscsi网络共享磁盘;1 2 3 4 5 192.168.1.2:iqn.2020-03.top.weiyigeek:server 192.168.1.3:iqn.2020-03.top.weiyigeek:pc
实际流程: Step1.在Server 2012 R2上安装iSCSI服务:打开服务器管理器>>添加角色和功能>基于角色或基于功能的安装>基于角色或基于功能的安装>选择iSCSI开头的两个选项和文件服务器
weiyigeek.top-
Step2.安装功能如下:文件服务器 、 iSCSI目标存储提供程序 、iSCSI目标服务器
weiyigeek.top-
Step3.创建iSCSI虚拟磁盘:打开服务器管理器>>文件和存储服务>>iSCSI>>任务>>新建iSCSI虚拟磁盘或者导入
weiyigeek.top-
Step4.指定iSCSI虚拟磁盘大小并新建立iSCSI目标,并分别设置目标名称(如不设置则自动生成),以及发起程序ID1 2 iSCSI Target: iqn.2020-03.top.weiyigeek:server iSCSI Initiator: iqn.2020-03.top.weiyigeek:pc
weiyigeek.top-
Step5.设置iSCSI的CHAP身份验证:target / WeiyiGeekTop
weiyigeek.top-
Step6.查看创建iSCSI的配置情况以及创建iSCSI Target 服务
weiyigeek.top-
Step7.访问服务器配置打开服务器管理器>>文件和存储服务>>iSCSI,右键iSCSI目标,点击属性
weiyigeek.top-
Windows 客户端|Initiator
weiyigeek.top-
Windows Linux |Initiator Step 8.选择iSCSI进行分配发起服务>分配iSCSI虚拟磁盘;
weiyigeek.top-
Linux Initiator 配置连接iSCSI存储结果:1 2 3 4 5 6 7 8 fdisk /dev/sdb mkfs.xfs /dev/sdb1 $mount /dev/sdb1 /mnt/iscsi/$ifconfig > /mnt/iscsi/ip.conf$mount -l | grep "iscsi" /dev/sdb1 on /mnt/iscsi type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
weiyigeek.top-
0x02 进阶实操 1.配置chap认证 配置CHAP认证有两种认证类型:
发现认证(discovery authentication)
常规认证 normal
(1) 配置发现认证 discovery authentication target服务器端:systemctl restart target
1 2 3 4 5 targetcli /iscsi set discovery_auth enable =1 userid=target password=WeiyiGeekiSCSI targetcli /iscsi get discovery_auth targetcli /iscsi set discovery_auth enable =1 userid=target password=WeiyiGeekiSCSI mutual_userid=initiator mutual_password=WeiyiGeekTop
initiator客户端(Linux):/etc/iscsi/iscsid.conf 1 2 3 4 5 6 7 8 9 10 11 discovery.sendtargets.auth.authmethod = CHAP discovery.sendtargets.auth.username = target discovery.sendtargets.auth.password = WeiyiGeekiSCSI discovery.sendtargets.auth.authmethod = CHAP discovery.sendtargets.auth.username = target discovery.sendtargets.auth.password = WeiyiGeekiSCSI discovery.sendtargets.auth.username_in = target discovery.sendtargets.auth.password_in = WeiyiGeekTop
weiyigeek.top-Linux双向认证
initiator客户端(Windows):
weiyigeek.top-Windows双向认证
注意事项:
Windows中发起程序CHAP机密无效,CHAP 密码长度最大16字节,如果未使用IPSec则最小为12字节;
如果设置CHAP双向验证后认证失败iscsiadm: Login authentication failed with target
的解决方法:
1.核验initiator客户端配置的discovery.sendtargets.auth
认证
2.删除链接缓存rm -rf /var/lib/iscsi/*
3.重启initiator端systemctl restart iscsi
(2) 常规配置认证 normal 描述:normal(tpg)认证和discovery认证类似都分为单向认证和双向认证(在连接IQN的时候使用),且normal是基于discovery认证基础之上的认证。1 2 3 4 5 6 7 8 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1 set attribute authentication=1 targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1 set auth userid=target password=WeiyiGeekiSCSI targetcli /iscsi/iqn.2020-01.top.weiyigeek:target/tpg1 set auth userid=target password=WeiyiGeekiSCSI mutual_userid=target mutual_password=WeiyiGeekTop
weiyigeek.top-常规认证配置结果
initiator客户端(Linux):/etc/iscsi/iscsid.conf 1 2 3 4 5 6 7 8 9 10 11 node.session.auth.authmethod = CHAP node.session.auth.username = target node.session.auth.password = WeiyiGeekiSCSI node.session.auth.authmethod = CHAP node.session.auth.username = target node.session.auth.password = WeiyiGeekiSCSI node.session.auth.username_in = target node.session.auth.password_in = WeiyiGeekTop
weiyigeek.top-Linux认证
initiator客户端配置常规认证(Windows):
weiyigeek.top-Windows双向认证
注意事项:
采用认证后启动不成功iscsiadm: Could not login to [iface: default, target: iqn.2020-01.top.weiyigeek:target,
解决方案:1 2 3 4 5 6 7 8 /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2020-01.top.weiyigeek:initiator systemctl restart iscsi && systemctl restart iscsid
0x03 知识补充 1.iscsiadm 命令 描述:iscsiadm是iscsi的管理程序,通常用在initiator端连接iSCSI Target;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 iscsiadm -m discoverydb [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -Dl ] ] | [ [ -p ip:port -t type ] [ -o operation ] [ -n name ] [ -v value ] [ -lD ] ] iscsiadm -m discovery [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -l ] ] | [ [ -p ip:port ] [ -l | -D ] ] iscsiadm -m node [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ -S ] [ [ -T targetname -p ip:port -I ifaceN ] [ -l | -u | -R | -s] ] [ [ -o operation ] [ -n name ] [ -v value ] ] iscsiadm -m session [ -hV ] [ -d debug_level ] [ -P printlevel] [ -r sessionid | sysfsdir [ -R | -u | -s ] [ -o operation ] [ -n name ] [ -v value ] ] iscsiadm -m iface [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I ifacename | -H hostno|MAC ] [ [ -o operation ] [ -n name ] [ -v value ] ] [ -C ping [ -a ip ] [ -b packetsize ] [ -c count ] [ -i interval ] ] iscsiadm -m fw [ -d debug_level ] [ -l ] iscsiadm -m host [ -P printlevel ] [ -H hostno|MAC ] [ [ -C chap [ -x chap_tbl_idx ] ] | [ -C flashnode [ -A portal_type ] [ -x flashnode_idx ] ] | [ -C stats ] ] [ [ -o operation ] [ -n name ] [ -v value ] ] iscsiadm -k priority -m,--mode : 指定模式发现为discovery,登陆为node节点模式,会话模式session -l,--login : 登陆 -t,--type : 一般为 sendtargets 简写为st -T --targetname=IQN: 指定要使用的服务器端的target名称,有时候服务器端创建了多个target,iqn.2015-10.com.example: -o,--op=op:指定选项:`new delete update show nonpersistent`,可以用-o delete 对已存在的node进行删除 -p,--portal:指定入口 可以为IP地址或者域名 -P,n:指定输出详细信息,[0|1|2|3],有四种格式可选 -u,--logout :登出
命令实例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 iscsiadm -m discovery -t sendtargets -p 192.168.10.222 -d2 iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -l iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -u iscsiadm -m node -T iqn.2020-01.top.weiyigeek:target -p 192.168.10.222 -o delete iscsiadm -m node iscsiadm -m session iscsiadm -m session -P 3 | grep -i attached