Deploy the iSCSI target service to the domain environment
2 Internet Small Computer Systems Interface(iSCSI)
-
Internet Small Computer Systems Interface 互联网小型计算机系统接口,简称(iSCSI),它是一种 TCI/IP 的存储协议,又被称为 IP-SAN。iSCSI 协议由 Cisco 和 IBM 在 1998 年率先开发完成,并在2000年3月做为草案向 IETF(互联网工程任务组)提交,于2003年2月11日成为正式的标准。
iSCSI 通过 “TCP/IP网络” 中的 SCSI 接口命令提供对存储设备的块级别的访问。iSCSI 可以与任意类型的 SCSI 设备通信,系统管理员设置来允许服务器(例如数据库服务器)访问存储阵列上的磁盘卷。iSCSI 允许 SCSI 命令通过局域网(LAN),广域网(WAN)端到端地发送)或互联网的连接。
2.2 iSCSI Target Server
- iSCSI target Server(iSCSI目标服务器)是“存储设备或服务器”上的存储资源能服务,iSCSITargetServer 默认为拒绝所有客户端 iSCSIInitiator 的连接,需要管理员设置或者修改 Microsoft iSCSITargetServer 中的发起程序,通过添加或修改“发起程序”中的IP地址、FQDN、或者IQN,并将其加入到“发起程序”中,为客户端 iSCSIInitiator提供iSCSI存储服务
2.3 iSCSI Initiator
Microsoft®Internet iSCSI Initiator(iSCSI 启动器)是 iSCSI 的客户端,与SCSI总线适配器一起工作。可以通过以太网网络适配器将运行 Windows®Family 或 Windows Server®Family 的主机连接到基于 iSCSI 的外部存储阵列。
2.4 iSCSI 工作原理
- iSCSI 工作原理是在 iSCSI Target Service(iSCSI目标服务)存储设备或者服务器上,与 iSCSI initiator(iSCSI启动器)之间传输块级数据。
iSCSI 协议通过 SCSI 命令将 iSCSI Target Service 和 iSCSI Initiator 之间传输的块数据汇编封装为 TCP/IP 层的数据包,并使用点对点的网络发送。
当 iSCSI Initiator(iSCSI启动器)接受到 iSCSI Target Service(iSCSI目标服务)发送的数据包后,iSCSI 协议会对接收到的数据包通过使用 SCSI 命令进行反汇编解包,并将 “块数据和TCP/IP” 分解开来,以便操作系统识别。
操作系统将识别到的 iSCSI 存储挂载在 iSCSI Initiator(iSCSI启动器)的计算机上。计算机将 iSCSI 存储视为本地的 SCSI 设备,并对其进行格式化进行使用。
2.5 MPIO 多路径
2.5.1 Multipath I/O
-
Multipath I/O 它是一种“物理链路”的“容错和负载均衡”技术,它通过总线适配器、控制器、交换机和或者桥接设备相连。设备与设备间 ≥2 条以上的物理链路,从而形成物理链路的冗余和负载均以提高存储系统的访问性能。
-
多路径冗余I/O(Multipath I/O)是指服务器通过多条物理路径连接到块存储设备。
为了避免存储链路单点故障,保证在磁盘阵列控制器切换时数据访问的不间断,多链路负载均衡提升存储系统访问性能等SCSI 磁盘与2个或多个 SCSI 控制器、后者·HBA、Fibre Channel卡相连,当一个 SCSI 或者 Fibre Channel 控制器损坏后,由另外一个控制器接管,从而达到冗余和备份的效果。 -
在SAN中,主机和存储的连接都会做链路冗余,其原理是将同一LUN通过多条链路进行共享,从而实现多条访问路径。
冗余IO路径的方式通常有两种:-
由存储的控制器固件提供的AVT/ADT (Auto Volume Transfer/Auto Disk Transfer) 功能以及由服务器系统提供的多路径(multipath)驱动。
- 当多路径被配置为主动/主动方式时,可以实现动态负载均衡;
- 当采用主动/被动模式时,可以实现冗余链路,从而在I/O路径中发生故障时切换到备用路径
- 例如当因为主机HBA卡、线缆、交换机或者存储设备的RAID控制器故障等原因造成一条物理路径失效时,服务器可以将通过此物理路径的I/O转移到其他正常的物理路径上面,应用程序不会觉察到这种改变,从而提高系统的可用性。
-
2.5.2 MPIO
- MPIO 是 Micrsoft 的一种 Multipath I/O(多路径)技术框架。通过存储设备与Windows操作系统之间提供备用数据路径来缓解主机总线适配器(HBA)故障的影响。MPIO最多支持32个备用路径,以便为存储环境添加荣誉和负载
- MPIO 策略工作模式
工作模式 说明 Failover Only 仅作故障转移策略 不作负载均衡,使用单个活动路径,余下剩余的路径仅作备用路径,当活动的路径发生故障,则备用路径变为生效状态。 Round Robin 负载均衡策略 使用所有的可用路径,以均衡的方式写入 I/O,这是存储默认的工作模式。 Round Robin with Subset 子集负载均衡策略 以循坏的方式来使用一组路径,以及一组备用路径,工作在这种策略模式的路径需要4条以上物理链路。 列如:有 A、B、C、D 四条路径,当 A、B、C 三条路径为活动时,D则为备用的路径,DSM会以循环的方式选择 A、B、C 三条路径,当 A、B、C 三条路径全部无法连接时,则 DSM 会使用备用的路径 D,否则仍将使用 A、B、C 这三条路径。
Least Queue Depth 最少队列深度 使用当前未完成的 I/O 请求向下发送 I/O 路径。
例如,在路径1上发送一个 I/O 到LUN 1,在路径1上发送另一个 I/O到LUN 2,路径1上的累积未完成的 I/O为2,而在路径2上,它为0.因此,任一LUN的下一个 I/O 将在路径2上进行处理。Weighted Paths 加权路径 为每个路径分配权重,数字越大,优先级越低,DSM将选择优先级高的路径作为优先路径。 Least Blocks 最少的块 使用当前正在处理数据块数最少的路径发送 I/O
例如,有两个 I/O(一个是10个字节,另一个是20个字节)两者都在路径1上进行,路径2上没有未完成的 I/O,路径1上的累计未完成 I/O 量为30个字节。 在路径2上0。因此,下一个 I/O 将在路径2上处理。
3 Example:Installing and configuring iSCSI servers
3.1 Installing iSCSI service functional component (安装iSCSI功能组件)
3.1.1
Add the iSCSI service functional component (添加 iSCSI 服务功能组件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Rename-NetAdapter -NewName "LAN 01" # 启用 Windows 更新服务 Get-Service -Name "wuauserv", "Windows Update", "TrustedInstaller", "msiserver" | Start-Service # 使用 Displayname -like "*.3.5*" 语法来模糊查询包含 .NET Framework 3.5 组件的名称,然后通过该名称来安装 Get-WindowsFeature | Where-Object displayname -like "*3.5*" | ft -AutoSize # 离线安装 .Net 3.5 Install-WindowsFeature -Name Net-Framework-Core -Source D:\sources\sxs # 安装 TelnetClient 客户端 Enable-WindowsOptionalFeature -Online -FeatureName "TelnetClient" |
3.1.2
Add the server to the Active directory (将服务器添加到活动目录中)
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 |
# 定义 ############################################################################################################################# # 将服务器加入 Active Directory $Domain = "WEM" # 定义域名的名称 $TLDs = ".local" # 定义顶级域名 top-level domains $NewComputerName = "iSCSI01" # 定义加入 AD 后New Domain Computer Name $Province = "Sichuan" # 定义省份 $City = "ChnegDu" # 定义城市 $DomainUser = "$Domain$TLDs\iSCSIAdmin" # 定义:加入 AD 时需要验证的用户名 $Password = "Admin@123" # 定义:加入 AD 时需要验证的用户名密码 $OUPath = "OU=iSCSI Server,OU=Information Technology,OU=Computer Group,OU=$Domain,OU=$City,OU=$Province,OU=$Domain,DC=$Domain,DC=local" # 定义要将计算机存放值指定的 OU 路径 ############################################################################################################################## $DomainUserPassword = "$Password" | ConvertTo-SecureString -asPlainText -Force # 定义:加入 AD 时需要验证的用户的密码 $UserPassword = New-Object System.Management.Automation.PSCredential($DomainUser,$DomainUserPassword) # 定义:新建凭据,用户和密码凭据 # 加入 Active directory,并修改计算名称为新的 SQL1,然后重启计算机 Add-Computer -DomainName "$Domain$TLDs" -Credential $UserPassword -NewName "$NewComputerName" -OUPath "$OUPath" # 将 AD 上的角色任务,和管理员加入本机管理用户组 net localgroup "Remote Management Users" "$DomainUser" /add net localgroup "Remote Desktop Users" "$DomainUser" /add net localgroup "Administrators" "$DomainUser" /add net localgroup "Power Users" "$DomainUser" /add net localgroup "IIS_IUSRS" "$DomainUser" /add # 重启计算机 Restart-Computer |
3.2 在iSCSI服务器上配置iSCSI虚拟磁盘
3.2.1
Create a new iSCSI virtual disk with the specified size (创建具有指定大小的iSCSI虚拟磁盘)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 定义 ############################################################################################################################# $VirtualDiskRoot = "C:" # 定义用于存储 iSCSI virtual Disk Root 虚拟磁盘路径的根路径 $VirtualDiskPath = "$VirtualDiskRoot\iVD\Cluster" # 定义用于存储 iSCSI virtual Disk 虚拟磁盘的路径 mkdir -Path $VirtualDiskPath -Force # 创建用于存储 iSCSI virtual Disk 虚拟磁盘的路径 ############################################################################################################################## #Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Where-Object {$_.Name -notlike "*LAN*"} | Rename-NetAdapter -NewName "iSCSI 01" # 在 Localhost 主机上新建多个具有指定“大小”和“动态”的iSCSI虚拟磁盘 New-IscsiVirtualDisk -Description "QDisk" -Path "$VirtualDiskPath\QDisk.vhdx" -Size 10GB -ComputerName "LocalHost" New-IscsiVirtualDisk -Description "MDisk" -Path "$VirtualDiskPath\MDisk.vhdx" -Size 20GB -ComputerName "LocalHost" New-IscsiVirtualDisk -Description "SDisk" -Path "$VirtualDiskPath\SDisk.vhdx" -Size 40GB -ComputerName "LocalHost" New-IscsiVirtualDisk -Description "FDisk" -Path "$VirtualDiskPath\FDisk.vhdx" -Size 60GB -ComputerName "LocalHost" # 在 Localhost 主机上新建用于生产存储的 iSCSI 虚拟磁盘,ONlineNode1、NOlineNode2 磁盘分别对应 Node1、Node2 New-IscsiVirtualDisk -Description "ONlineNode1" -Path "$VirtualDiskPath\ONlineNode1.vhdx" -Size 100GB -ComputerName "LocalHost" New-IscsiVirtualDisk -Description "ONlineNode2" -Path "$VirtualDiskPath\ONlineNode2.vhdx" -Size 100GB -ComputerName "LocalHost" |
3.2.2
Create a new “iSCSIServerTarget” on this server side (在此服务器端新建“iSCSIServerTarget”)
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 |
# 定义登入节点的凭据 ################################################################################################################ $Node1 = "SQL01" # 定义:需要登入的节点计算机1,的名称或者IP地址 $Node2 = "SQL02" # 定义:需要登入的节点计算机2,的名称或者IP地址 $NodeUser = "$env:USERDOMAIN\SQLAdmin" # 定义:需要登入节点主机的用户名 $Password = "Admin@123" # 定义:需要登入节点的用户的密码 ############################################################################################################################## $NodeUserPassword = "$Password" | ConvertTo-SecureString -asPlainText -Force # 定义:将明文密码转换为 加密密码 $UserPassword = New-Object System.Management.Automation.PSCredential($NodeUser,$NodeUserPassword) # 定义:新建凭据,用户和密码凭据 # Node Number iSCSI Adapter Number Port Number # ----------------------------------------------------------------- # N 1 i A 1 p 1 $N1iA1P1 = Invoke-Command -ComputerName "$Node1" {(Get-NetIPAddress -InterfaceAlias "iSCSI_1_P1").IPAddress} -Credential $UserPassword $N1iA1P2 = Invoke-Command -ComputerName "$Node1" {(Get-NetIPAddress -InterfaceAlias "iSCSI_1_P2").IPAddress} -Credential $UserPassword $N2iA1p1 = Invoke-Command -ComputerName "$Node2" {(Get-NetIPAddress -InterfaceAlias "iSCSI_1_P1").IPAddress} -Credential $UserPassword $N2iA1p2 = Invoke-Command -ComputerName "$Node2" {(Get-NetIPAddress -InterfaceAlias "iSCSI_1_P2").IPAddress} -Credential $UserPassword $N1iA2P1 = Invoke-Command -ComputerName "$Node1" {(Get-NetIPAddress -InterfaceAlias "iSCSI_2_P1").IPAddress} -Credential $UserPassword $N1iA2P2 = Invoke-Command -ComputerName "$Node1" {(Get-NetIPAddress -InterfaceAlias "iSCSI_2_P2").IPAddress} -Credential $UserPassword $N2iA2p1 = Invoke-Command -ComputerName "$Node2" {(Get-NetIPAddress -InterfaceAlias "iSCSI_2_P1").IPAddress} -Credential $UserPassword $N2iA2p2 = Invoke-Command -ComputerName "$Node2" {(Get-NetIPAddress -InterfaceAlias "iSCSI_2_P2").IPAddress} -Credential $UserPassword # 新建 iSCSI 连接目标,指定连接名称为 “Cluster”,并允许指定间IP地址连接到此服务端 New-IscsiServerTarget -TargetName "Cluster" -ComputerName "LocalHost" -InitiatorIds @("IPAddress:$N1iA1P1","IPAddress:$N1iA1P2","IPAddress:$N2iA1P1","IPAddress:$N2iA1P2",` "IPAddress:$N1iA2P1","IPAddress:$N1iA2P2","IPAddress:$N2iA2P1","IPAddress:$N2iA2P2") # 新建 iSCSI 连接目标为 ONlineNode01 并只允许 Node1 节点连接到此服务端 New-IscsiServerTarget -TargetName "ONlineNode01" -ComputerName "LocalHost" -InitiatorIds @("IPAddress:$N1iA1P1", "IPAddress:$N1iA1P2",` "IPAddress:$N1iA2P1", "IPAddress:$N1iA2P2") # 新建 iSCSI 连接目标为 ONlineNode02 并只允许 Node2 节点连接到此服务端 New-IscsiServerTarget -TargetName "ONlineNode02" -ComputerName "LocalHost" -InitiatorIds @("IPAddress:$N2iA1P1", "IPAddress:$N2iA1P2",` "IPAddress:$N2iA2P1", "IPAddress:$N2iA2P2") |
3.2.3
Attach the iSCSI virtual disk to the iSCSIServerTarget (将 iSCSI虚拟磁盘 附加到 iSCSIServerTarget 上)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 将 群集中指定的共享磁盘 与 Cluster目标做关联 Add-IscsiVirtualDiskTargetMapping -TargetName "Cluster" -DevicePath "$VirtualDiskPath\QDisk.vhdx" Add-IscsiVirtualDiskTargetMapping -TargetName "Cluster" -DevicePath "$VirtualDiskPath\MDisk.vhdx" Add-IscsiVirtualDiskTargetMapping -TargetName "Cluster" -DevicePath "$VirtualDiskPath\SDisk.vhdx" Add-IscsiVirtualDiskTargetMapping -TargetName "Cluster" -DevicePath "$VirtualDiskPath\FDisk.vhdx" # 将 指定用于 Node1 节点的存储与 ONlineNode01 目标做关联 Add-IscsiVirtualDiskTargetMapping -TargetName "ONlineNode01" -DevicePath "$VirtualDiskPath\ONlineNode1.vhdx" # 将 指定用于 Node2 节点的存储与 ONlineNode02 目标做关联 Add-IscsiVirtualDiskTargetMapping -TargetName "ONlineNode02" -DevicePath "$VirtualDiskPath\ONlineNode2.vhdx" |