iSCSI简介
iSCSI (Internet Small Computer Systems Interface),Internet 小型计算机接口,又称IP-SAN,一种用于链接数据存储基础设施的基于IP的存储网络实现标准。通过TCP/IP网络传送SCSI协议来提供对存储设备的块级别访问,极大的扩展了存储的管理距离,被广泛用于局域网(local area network)LANs,广域网(wide area networks) WANS,和因特网(Internet),打破了数据存储和检索的物理区域限制。(SCSI 点击此处了解更多SCSI协议相关内容)
iSCSI协议允许客户端(Initiator)发送SCSI命令到远程主机上的存储设备(Targets),该协议允许组织将存储整合到存储阵列,然后为客户端(例如数据库和web服务器)提供本地附加块存储,让其能够像管理本地磁盘一样管理和使用它们。iSCSI存储网络主要使用光纤通道来通信,但是与传统光纤不同的是,它无须专用光纤通道,便可以通过现存网络实现长距离传输。
概念
实际上,iSCSI允许两个主机使用IP(Internet)协议进行协商 ,然后交换SCSI命令。这样iSCSI可以把在通过高性能存储总线的存储进行模拟仿真,然后将仿真后的存储创建为存储区域网络(SAN),与其它SAN协议不同,iSCSI不需要专用的线缆,它可以在现有的IP网络的基础上运行和数据传输,因此它是基于光纤通道SAN的低成本解决方案。光纤通道除了需要其FCOE(以太网光纤通道)支持外,还需要专用的基础架构。但是,若iSCSI不配置专用的网络或子网,那么其性能可能遭遇网络带宽瓶颈。
尽管iSCSI可以与任意类型的SCSI设备进行通讯,但是系统管理员最常用的方式还是用其来允许服务器访问存储阵列上的磁盘卷。iSCSI SAN通常用来实现如下两个目的:
- 存储整合
将分散的存储资源从网络中的服务器移动到数据中心集中管理。由于存储本身不再绑定到特定的服务器,因此这可以提高分配效率。在SAN环境中,可以为服务器分配新的磁盘卷,而无需更改硬件和线缆。- 灾难恢复
组织将存储资源从一个数据中心经乡道一个远程数据中心,如果长时间停机,远程数据中心可作为热备。并且,iSCSI SAN允许整个磁盘阵列在WAN配置中进行迁移而无需大量配置,使存储分配就像网络一样具有可路由特性。
Initiator
Initiator iSCSI客户端,其目的是充当计算机上的SCSI总线适配器,其功能便使通过IP网络向SCSI服务端(Target)发送SCSI命令,有两类Initiator
- 软件Initiator
软件Initiator通过装载在内核中的驱动程序调用网卡(NIC)和网络协议栈,通过iSCSI协议来模拟计算机的SCSI设备。在大多数流行系统发行版中均内这这种Initiator- 硬件Initiator使用专用硬件及其故将来实现iSCSI。硬件Initiator可以减轻iSCSI和TCP处理以及以太网中断开销,提供使用iSCSI服务器的性能,一般通过iSCSI主机总线适配器(HBA)来实现。典型HBA打包有千兆或万兆以太网网络接口控制器,TCP/IP卸载引擎技术(TOE)和一个SCSI总线适配器。通用的可引导网络接口,不支持从远程iSCSI存储读取数据进行无盘引导启动,网卡会寻找一台提供PXE或者BOOTP引导镜像的DHCP服务器来完成基于iSCSI的无盘启动。另外,内置BIOS的专用HBA,也可实现从iSCSI SAN无盘启动。
Target
iSCSI将位于iSCSI服务器上的存储资源(通常是该服务器上运行的众多iSCSI存储节点实例之一)作为Target。
iSCSI Target通常是专用的网络连接存储设备,但也可以是通用计算机,现在流行的各大主流操作系统都提供有iSCSI Target 程序。
iSCSI Target常见部署方案
- 存储阵列(Storage Array)
在数据中心或者企业环境中,iSCSI Target 常位于一个大的存储阵列。这些存储阵列可以通过免费的或者商用软件来实现。
一个存储阵列可以分别为不同的客户端提供不同的Target- 软件Target (Softeware Target)
几乎所有专用的现在主流操作系统都提供iSCSI Target功能,既可以作为内置功能,也可以与补充软件一起提供。另外,有专为系统提供iSCSI Target
逻辑单元号(Logical unit number)
在SCSI术语中,LU代表逻辑单元,一个LUN表示一个可单独寻址逻辑SCSI设备的地址,是物理SCSI设备(Target)的一部分。LUN本质上是已编号的磁盘驱动器。一个Initiator与Target协商并连接到一个LUN上,其目的即是创建一个连接到一块SCSI硬盘的链接。连接到LUN后,LUN对当前系统来京即使一块磁盘,iSCSI系统会格式化和直接管理它。
在企业中,LUNs常常作为一个大的RAID磁盘阵列的子集,通常会为每个客户端分配一个LUN。iSCSI不会限制多台计算机共享同一个LUN,计算机操作系统负责文件系统之上的权限管理。
地址与端口
iSCSI 使用TCP作为其传输协议,端口为3260,使用更高级别的名称来寻址协议中的对象。特殊名称制的使Intiator和Target,iSCSI提供三种格式:
- iSCSI 标准名称
- 字符串 iql(iSCSI Qualified Name)
- 日期(yyyy-mm) ,iSCSI命名所在域的日期
- 当前授权域的反向域名 (例如org.alpinelinux,com.example,to.yp.cr)
可选:可自定义的后缀Target名称
- 可扩展唯一标识(Extended Unique Identifier)
格式: eui.{EUI-64 bit address} (e.g. eui.02004567A425678D)
- 网络地址认证 T11 Network Address Authority (NAA)
格式: naa.{NAA 64 or 128 bit identifier} (e.g. naa.52004567BA64678D)
下面仅供参考
IQN format addresses occur most commonly. They are qualified by a date (yyyy-mm) because domain names can expire or be acquired by another entity.
The IEEE Registration authority provides EUI in accordance with the EUI-64 standard. NAA is part OUI which is provided by the IEEE Registration Authority. NAA name formats were added to iSCSI in RFC 3980, to provide compatibility with naming conventions used in Fibre Channel and Serial Attached SCSI (SAS) storage technologies.
Usually, an iSCSI participant can be defined by three or four fields:
- Hostname or IP Address (e.g., "iscsi.example.com")
- Port Number (e.g., 3260)
- iSCSI Name (e.g., the IQN "iqn.2003-01.com.ibm:00.fcd0ab21.shark128")
- An optional CHAP Secret (e.g., "secretsarefun")
Windows Server(2012 or above)使用Powershell配置Target
实验环境:192.168.200.0/24 网段专用于iSCSI通信
Target:(服务端)srv19.buffallos.com 192.168.100.209
Initiator:(客户端)node1.buffallos.com 192.168.100.201
- 定义iSCSI Target 变量
$server="svr19.buffallos.com"
- 安装iSCSI Target 功能组件
PS C:\Windows\system32> Install-WindowsFeature -ComputerName svr9.buffallos.com -Name FS-iSCSITarget-Server
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {iSCSI 目标服务器}
- 创建iSCSI target-server,iSCSI客户端(initiator)将连接到到target,下面创建target-server
Target01
PS C:\Windows\system32> New-IscsiServerTarget -ComputerName $server -TargetName Target01
ChapUserName :
ClusterGroupName :
ComputerName : SRV19.buffallos.com
Description :
EnableChap : False
EnableReverseChap : False
EnforceIdleTimeoutDetection : True
FirstBurstLength : 65536
IdleDuration : 00:00:00
InitiatorIds : {}
LastLogin :
LunMappings : {}
MaxBurstLength : 262144
MaxReceiveDataSegmentLength : 65536
ReceiveBufferCount : 10
ReverseChapUserName :
Sessions : {}
Status : NotConnected
TargetIqn : iqn.1991-05.com.microsoft:srv19-target01-target
TargetName : Target01
注:默认创建的target会监听在所有IP地址的3260端口,可以使用下列命令禁止特定地址监听
PS C:\Windows\system32> Set-IscsiTargetServerSetting -ComputerName $server -IP 192.168.199.210 -Enable $false
- 创建虚拟磁盘,后面将需要把这些虚拟磁盘映射到Target
PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk01.vhdx" -SizeBytes 50GB
ClusterGroupName :
ComputerName : SRV19.buffallos.com
Description :
DiskType : Dynamic
HostVolumeId : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId :
OriginalPath :
ParentPath :
Path : e:\iscsivirtualdisks\vDisk01.vhdx
SerialNumber : E82BD048-A055-486A-9267-9F678FEDD316
Size : 53687091200
SnapshotIds :
Status : NotConnected
VirtualDiskIndex : 1528507487
PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk02.vhdx" -SizeBytes 30GB
ClusterGroupName :
ComputerName : SRV19.buffallos.com
Description :
DiskType : Dynamic
HostVolumeId : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId :
OriginalPath :
ParentPath :
Path : e:\iscsivirtualdisks\vDisk02.vhdx
SerialNumber : AE07D222-24FC-441C-AD07-1B8F197AE050
Size : 32212254720
SnapshotIds :
Status : NotConnected
VirtualDiskIndex : 1978411738
默认磁盘是可动态扩展的,如果想使用固定大小,可以加-UseFixed参数,如下
PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk03.vhdx" -SizeBytes 1GB -UseFixed
ClusterGroupName :
ComputerName : SRV19.buffallos.com
Description :
DiskType : Fixed
HostVolumeId : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId :
OriginalPath :
ParentPath :
Path : e:\iscsivirtualdisks\vDisk03.vhdx
SerialNumber : 9DB2F0CD-590C-45B5-BA46-FAB902248D84
Size : 1073741824
SnapshotIds :
Status : NotConnected
VirtualDiskIndex : 2021853343
- 将创建好的虚拟磁盘映射到Target
PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk01.vhdx"
PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk02.vhdx"
PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk03.vhdx"
如下图,已经将3快磁盘映射到Target01
PS C:\Windows\system32> Get-IscsiServerTarget
ChapUserName :
ClusterGroupName :
ComputerName : SRV19.buffallos.com
Description :
EnableChap : False
EnableReverseChap : False
EnforceIdleTimeoutDetection : True
FirstBurstLength : 65536
IdleDuration : 00:18:09
InitiatorIds : {}
LastLogin :
LunMappings : {TargetName:Target01;VHD:"e:\iscsivirtualdisks\vDisk01.vhdx";LUN:0, TargetName:Target01;VHD:"e:\iscsivirtualdisks\vDisk02.vhdx";LUN:1, TargetName:Target01;V
HD:"e:\iscsivirtualdisks\vDisk03.vhdx";LUN:2}
MaxBurstLength : 262144
MaxReceiveDataSegmentLength : 65536
ReceiveBufferCount : 10
ReverseChapUserName :
Sessions : {}
Status : NotConnected
TargetIqn : iqn.1991-05.com.microsoft:srv19-target01-target
TargetName : Target01
- 将需要访问Target的客户端地址(initiator)添加到Target01,一般只会添加一个客户端,但是群集场景可能会添加多个,比如用于Hypter-V群集、vmware vsphere群集,每个节点都需要添加。
PS C:\Windows\system32> Set-IscsiServerTarget -ComputerName $server -TargetName Target01 -InitiatorIds IPAddress:192.168.100.201,IPAddress:192.168.100.202
将iSCSI 虚拟磁盘添加到客户端
- 定义需要连接到Target01的客户端
$servers='node1.buffallos.com','node2.buffallos.com'
或者PS C:\Windows\system32> $servers=@('node1.buffallos.com','node2.buffallos.com') PS C:\Windows\system32> $servers node1.buffallos.com node2.buffallos.com
- 在两个客户端上将iSCSI initiator服务设为自动启动并启动服务
PS C:\Windows\system32> Invoke-Command ($servers) {set-service MSiSCSI -StartupType Automatic;start-service MSiSCSI}
警告: 正在等待服务“Microsoft iSCSI Initiator Service (MSiSCSI)”启动...
警告: 正在等待服务“Microsoft iSCSI Initiator Service (MSiSCSI)”启动...
- 添加target-server到客户端,即为client添加对应Target01的iSCSITargetPortal,本文中,Target Server的地址是192.168.100.209
PS C:\Windows\system32> Invoke-Command ($servers) {New-IscsiTargetPortal -TargetPortalAddress 192.168.100.209}
PSComputerName : node2.buffallos.com
RunspaceId : 942336c5-7793-4498-bfc2-64cf4d3dd442
InitiatorInstanceName :
InitiatorPortalAddress :
IsDataDigest : False
IsHeaderDigest : False
TargetPortalAddress : 192.168.100.209
TargetPortalPortNumber : 3260
PSComputerName : node1.buffallos.com
RunspaceId : 20030c51-9ff1-423a-ad7c-3e1c78250dfb
InitiatorInstanceName :
InitiatorPortalAddress :
IsDataDigest : False
IsHeaderDigest : False
TargetPortalAddress : 192.168.100.209
TargetPortalPortNumber : 3260
测试是否已成功连接到服务器端,可以看到,Target server已经被识别到,但是还没有被连接(IsConnected : False
)
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiTarget}
PSComputerName : node1.buffallos.com
RunspaceId : d7aa436a-5aff-47a0-b159-76daed9e0c2e
IsConnected : False
NodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
PSComputerName : node2.buffallos.com
RunspaceId : 89e41daf-397d-462b-9858-8f4b20bcc9ac
IsConnected : False
NodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
- 连接到Target Server
PS C:\Windows\system32> Invoke-Command ($servers) {$target=Get-IscsiTarget;Connect-IscsiTarget -NodeAddress $target.NodeAddress}
PSComputerName : node1.buffallos.com
RunspaceId : ca4bdd64-9262-4784-8b37-902fc8cfe1a3
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : False
NumberOfConnections : 1
SessionIdentifier : ffffe000f2d4d020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0100
PSComputerName : node2.buffallos.com
RunspaceId : f29a6979-c23f-4669-830b-33a7828628c5
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : False
NumberOfConnections : 1
SessionIdentifier : ffffe00165f89020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0200
查看是否已连接,下图可以看到,已经连接(IsConnected : True
)
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiTarget}
PSComputerName : node1.buffallos.com
RunspaceId : 53b6ade6-fbb4-4028-ac97-b1103670c040
IsConnected : True
NodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
PSComputerName : node2.buffallos.com
RunspaceId : 96a83ff6-1b33-4b9a-b093-78117db0d40b
IsConnected : True
NodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
- 查看已有的iSCSI Target 连接的详细信息
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiConnection}
PSComputerName : node2.buffallos.com
RunspaceId : 76286dc2-a029-4c60-9e16-bdd04b6324e0
ConnectionIdentifier : ffffe00165f89020-2
InitiatorAddress : 0.0.0.0
InitiatorPortNumber : 30144
TargetAddress : 192.168.100.209
TargetPortNumber : 3260
PSComputerName : node1.buffallos.com
RunspaceId : d0ed9cd5-744b-4bfd-bd12-a1741f25ad32
ConnectionIdentifier : ffffe000f2d4d020-2
InitiatorAddress : 0.0.0.0
InitiatorPortNumber : 26353
TargetAddress : 192.168.100.209
TargetPortNumber : 3260
5.查看iSCSI会话(一个iSCSI会话中可能会存在多个连接,本文实验中上一步可以看到,仅有一个连接)
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession}
PSComputerName : node2.buffallos.com
RunspaceId : cfdc1e88-ffb6-4a15-9980-db3f6cfa8f60
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : False
NumberOfConnections : 1
SessionIdentifier : ffffe00165f89020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0200
PSComputerName : node1.buffallos.com
RunspaceId : c0b86967-389f-4b4d-b2c7-64fb173d1ee9
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : False
NumberOfConnections : 1
SessionIdentifier : ffffe000f2d4d020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0100
可看到,当前会话并非持久会话,机器重启将会丢失会话,下面的命令可以将其置为持久。
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession | Register-IscsiSession}
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession}
PSComputerName : node1.buffallos.com
RunspaceId : 2878c1fe-057d-4cc4-bd9b-fe80febc56f0
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffe000f2d4d020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0100
PSComputerName : node2.buffallos.com
RunspaceId : 226b78f8-25dd-4864-9165-c4483b463826
AuthenticationType : NONE
InitiatorInstanceName : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected : True
IsDataDigest : False
IsDiscovered : True
IsHeaderDigest : False
IsPersistent : True
NumberOfConnections : 1
SessionIdentifier : ffffe00165f89020-4000013700000003
TargetNodeAddress : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier : 0200
至此,客户端上应能够查看到offline
状态的磁盘了
PS C:\Windows\system32> Invoke-Command ($servers) {Get-disk}
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition PSComputerName
Style
------ ------------- ------------- ------------ ----------------- ---------- ---------- --------------
0 VMware, VMware Virtual S SCSI Disk De... Warning Other 60 GB MBR node2.buffallos.com
1 MSFT Virtual HD SCSI Disk Device E82BD048-A055-486A-9267-9F678... Warning Stressed 50 GB RAW node2.buffallos.com
2 MSFT Virtual HD SCSI Disk Device AE07D222-24FC-441C-AD07-1B8F1... Warning Stressed 30 GB RAW node2.buffallos.com
3 MSFT Virtual HD SCSI Disk Device 9DB2F0CD-590C-45B5-BA46-FAB90... Warning Stressed 1 GB RAW node2.buffallos.com
0 VMware, VMware Virtual S SCSI Disk De... Warning Other 60 GB MBR node1.buffallos.com
1 MSFT Virtual HD SCSI Disk Device E82BD048-A055-486A-9267-9F678... Warning Stressed 50 GB RAW node1.buffallos.com
2 MSFT Virtual HD SCSI Disk Device AE07D222-24FC-441C-AD07-1B8F1... Warning Stressed 30 GB RAW node1.buffallos.com
3 MSFT Virtual HD SCSI Disk Device 9DB2F0CD-590C-45B5-BA46-FAB90... Warning Stressed 1 GB RAW node1.buffallos.com