使用 Azure Stack Hub 连接到 iSCSI 存储

使用本文中的模板将Azure Stack Hub虚拟机(VM)连接到本地 iSCSI 目标。 将 VM 配置为使用托管在 Azure Stack Hub 外部且位于数据中心其他位置的存储。 本文介绍如何使用 Windows 计算机作为 iSCSI 目标。

可以在 Azure 智能边缘模式GitHub存储库的 lucidqdreams 分支中找到模板。 模板位于 storage-iSCSI 文件夹中。 该模板设置连接到 iSCSI 目标所需的Azure Stack Hub端的基础结构。 此基础结构包括充当 iSCSI 发起程序的虚拟机及其随附的 VNet、NSG、PIP 和存储。 部署模板后,运行两个 PowerShell 脚本来完成配置。 在本地 VM(目标)上运行一个脚本,并在Azure Stack Hub VM(发起程序)上运行另一个脚本。 完成这些步骤后,将本地存储添加到 Azure Stack Hub VM。

Overview

下图显示了托管在Azure Stack Hub上的 VM,其中包含从本地Windows计算机(物理或虚拟)装载的 iSCSI 磁盘。 通过 iSCSI 协议,VM 可以在 Azure Stack Hub 托管的 VM 内部挂载 Azure Stack Hub 外部的存储。

此图显示了托管在Azure Stack Hub上访问外部 iSCSI 装载磁盘的 VM。

要求

  • 运行 Windows Server 2016 Datacenter 或 Windows Server 2019 Datacenter 的本地计算机(物理或虚拟)。
  • 所需的 Azure Stack Hub 市场项:
    • Windows Server 2016 Datacenter 或 Windows Server 2019 Datacenter(建议使用最新版本)。
    • PowerShell DSC 扩展。
    • Azure自定义脚本扩展。
    • 现有虚拟机或物理计算机。 理想情况下,此计算机有两个网络适配器。 此计算机也可能是另一个 iSCSI 目标,例如 SAN。

注意事项

  • 该模板将网络安全组应用于子网。 查看此配置,并根据需要提供额外的津贴。
  • Microsoft Tunnel NSG 有一条拒绝 RDP 的规则。 若要通过公共 IP 地址访问 VM,请设置此规则以允许。
  • 此解决方案不考虑 DNS 解析。
  • 修改 Chapusername 和 Chappassword。 Chappassword 长度必须为 12 到 16 个字符。
  • 模板使用 VM 的静态 IP 地址,因为 iSCSI 连接使用配置中的本地地址。
  • 该模板使用 BYOL Windows 许可证。
  • 还可以将基于 Linux 的系统连接到 iSCSI 目标。 可以在 Ubuntu 文档中的 iSCSI 发起程序 文章中找到说明。

选项

  • 使用自己的 Blob 存储帐户和 SAS 令牌,方法是使用 _artifactsLocation_artifactsLocationSasToken 参数。
  • 该模板提供 VNet 命名和 IP 寻址的默认值。
  • 此配置只有一个来自 iSCSI 客户端的 iSCSI NIC。 产品团队测试了多种配置方案,以使用独立的子网和 NIC,但在多网关以及尝试创建独立存储子网以隔离流量并实现真正冗余方面遇到了问题。
  • 请将这些值保持在合法的子网和地址范围内,否则部署可能会失败。
  • PowerShell DSC 包的主要用途是检查是否有待处理的重启。 如有需要,您还可以进一步自定义此 DSC。 有关详细信息,请参阅 ComputerManagementDsc

资源组模板 (iSCSI 客户端)

下图显示了从模板部署的资源,以创建可用于连接到 iSCSI 目标的 iSCSI 客户端。 该模板部署 VM 和其他资源。 此外,它还运行 prepare-iSCSIClient.ps1 脚本并重新启动 VM。

此图显示了从模板部署的资源,以创建用于连接到 iSCSI 目标的 iSCSI 客户端。它显示具有内部子网和 NIC(网卡)、内部 PIP(专用 Internet 协议)和 NSG(网络安全组)的文件服务器。

部署过程

资源组模板生成输出,该输出应是下一步的输入。 它主要侧重于服务器名称和 iSCSI 流量的来源Azure Stack Hub公共 IP 地址。 对于本示例:

  1. 部署基础结构模板。
  2. 将Azure Stack Hub VM 部署到数据中心其他地方托管的 VM。
  3. 使用模板输出的 IP 地址和服务器名称作为该脚本的输入/输出参数,在 iSCSI 目标(可以是虚拟机或物理服务器)上运行 Create-iSCSITarget.ps1
  4. 使用 iSCSI 目标服务器的外部 IP 地址或地址作为输入来运行 Connect-toiSCSITarget.ps1 脚本。

此图显示了上面列出的四个步骤中的前三个步骤,包括输入和输出。这些步骤包括:部署基础结构、创建 iSCSI 目标并连接到 iSCSI。

azuredeploy.json 的输入参数

参数 default 说明
WindowsImageSKU 2019-Datacenter 选择基本Windows VM 映像。
VMSize Standard_D2_v2 输入 VM 大小。
VMName 文件服务器 VM 名称。
adminUsername storageadmin 新 VM 的管理员名称。
adminPassword 新 VM 的管理员帐户的密码。 默认值为订阅 ID。
VNetName 存储 VNet 的名称。 此值标记资源。
VNetAddressSpace 10.10.0.0/23 VNet 的地址空间。
VNetInternalSubnetName 内部 VNet 内部子网名称。
VNet 内部子网范围 10.10.1.0/24 VNet 内部子网的地址范围。
InternalVNetIP 10.10.1.4 文件服务器内部 IP 的静态地址。
_artifactsLocation
_artifactsLocationSasToken

部署步骤

  1. 使用 azuredeploy.json.. 部署 iSCSI 客户端基础结构。
  2. 在本地服务器的 iSCSI 目标上运行 Create-iSCSITarget.ps1。 模板完成后, Create-iSCSITarget.ps1 使用第一步的输出在本地服务器 iSCSI 目标上运行。
  3. Connect-toiSCSITarget.ps1在 iSCSI 客户端上运行。

将 iSCSI 存储添加到现有 VM

还可以在现有虚拟机上运行脚本,以便从 iSCSI 客户端连接到 iSCSI 目标。 如果由您自行创建 iSCSI 目标,则此流程适用。 此图显示了 PowerShell 脚本的执行流。 可以在脚本目录中找到这些脚本:

此图显示了下面讨论的三个脚本:Prepare-iSCSIClient.ps1、创建 iSCSITarget.ps1和 Connect-toiSCSITarget.ps1。

Prepare-iSCSIClient.ps1

  • 安装多路径 I/O 服务
  • 安装 Multipath-IO 服务
  • 将 iSCSI 发起程序服务启动设置为自动
  • 启用对 iSCSI 的多路径 MPIO 的支持
  • 启用自动认领所有 iSCSI 卷
  • 将磁盘超时设置为 60 秒

安装这些先决条件后重新启动系统。 MPIO 负载均衡策略需要重新启动,以便可以设置它。

Create-iSCSITarget.ps1

Create-iSCSITarget.ps1 存储服务器上运行脚本。 可以创建多个磁盘和目标来限制发起程序。 多次运行此脚本,以创建可附加到不同目标的多个虚拟磁盘。 可以将多个磁盘连接到一个目标。

输入 default 说明
远程服务器 文件服务器 连接到 iSCSI 目标的服务器的名称
远程服务器 IP 地址 1.1.1.1 iSCSI 流量来自的 IP 地址
磁盘文件夹 C:\iSCSIVirtualDisks 存储虚拟磁盘的文件夹和驱动器
磁盘名称 磁盘名称 磁盘 VHDX 文件的名称
磁盘大小 5GB VHDX 磁盘大小
目标名称 RemoteTarget01 用于定义 iSCSI 客户端的目标配置的目标名称。
ChapUsername 用户名 CHAP 身份验证的用户名
ChapPassword userP@ssw0rd! CHAP 身份验证的密码。 它必须是 12 到 16 个字符

Connect-toiSCSITarget.ps1

Connect-toiSCSITarget.ps1 脚本是最终脚本。 在 iSCSI 客户端上运行它。 它将 iSCSI 目标提供的磁盘装载到 iSCSI 客户端。

输入 default 说明
目标iSCSI地址 "2.2.2.2","2.2.2.3" iSCSI 目标的 IP 地址
本地 IP 地址 "10.10.1.4" iSCSI 流量来自的内部 IP 地址
负载均衡策略 C:\iSCSIVirtualDisks iSCSI 流量来自的 IP 地址
ChapUsername 用户名 CHAP 认证的用户名
ChapPassword userP@ssw0rd! 用于 CHAP 身份验证的密码。 它必须是 12 到 16 个字符

后续步骤

Azure Stack Hub 网络的差异和注意事项