使用本文中的模板将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 外部的存储。
要求
- 运行 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 流量的来源Azure Stack Hub公共 IP 地址。 对于本示例:
- 部署基础结构模板。
- 将Azure Stack Hub VM 部署到数据中心其他地方托管的 VM。
- 使用模板输出的 IP 地址和服务器名称作为该脚本的输入/输出参数,在 iSCSI 目标(可以是虚拟机或物理服务器)上运行
Create-iSCSITarget.ps1。 - 使用 iSCSI 目标服务器的外部 IP 地址或地址作为输入来运行
Connect-toiSCSITarget.ps1脚本。
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 |
部署步骤
- 使用
azuredeploy.json.. 部署 iSCSI 客户端基础结构。 - 在本地服务器的 iSCSI 目标上运行
Create-iSCSITarget.ps1。 模板完成后,Create-iSCSITarget.ps1使用第一步的输出在本地服务器 iSCSI 目标上运行。 -
Connect-toiSCSITarget.ps1在 iSCSI 客户端上运行。
将 iSCSI 存储添加到现有 VM
还可以在现有虚拟机上运行脚本,以便从 iSCSI 客户端连接到 iSCSI 目标。 如果由您自行创建 iSCSI 目标,则此流程适用。 此图显示了 PowerShell 脚本的执行流。 可以在脚本目录中找到这些脚本:
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 个字符 |