你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure Elastic SAN 上部署群集应用程序
Azure 弹性 SAN 卷可以同时附加到多个计算客户端,从而允许将群集应用程序部署或迁移到 Azure。 需要使用群集管理器来共享弹性 SAN 卷,例如 Windows Server 故障转移群集 (WSFC) 或 Pacemaker。 群集管理器处理群集节点通信和写入锁定。 弹性 SAN 本身不提供可通过 SMB 或 NFS 访问的完全托管文件系统。
用作共享卷时,弹性 SAN 卷可以跨可用性区域或区域共享。 由于卷与客户端之间的延迟增加,跨区域在本地冗余存储 SAN 中共享卷会降低性能。
限制
- 弹性 SAN 连接脚本可用于将共享卷附加到 虚拟机规模集 中的虚拟机或可用性集中的虚拟机。 不支持容错域对齐。
- 共享卷支持的最大会话数为 128。
- 单个客户端可以创建与单个卷的多个会话,以提高性能。 例如,如果在每个客户端上创建 32 个会话,则只有四个客户端可以连接到单个卷。
有关弹性 SAN 的其他限制,请参阅 对 Azure 存储功能的支持 。
工作原理
弹性 SAN 共享卷使用 SCSI-3 永久性预留,允许发起方(客户端)控制对共享弹性 SAN 卷的访问。 此协议使发起程序能够保留对弹性 SAN 卷的访问权限,限制写入(或读取)其他发起程序的访问权限,并在默认情况下将预留保留在超过会话生存期的卷上。
在群集方案中,SCSI-3 PR 在维护共享卷中的数据一致性和完整性方面起着关键作用。 群集中的计算节点可以根据群集应用程序选择的预留,读取或写入其附加的弹性 SAN 卷。
永久预留流
下图演示了一个示例 2 节点群集数据库应用程序,该应用程序使用 SCSI-3 PR 启用从一个节点到另一个节点的故障转移。
流程如下所示:
- 在 Azure VM1 和 VM2 上运行的群集应用程序均注册了其读取或写入弹性 SAN 卷的意图。
- 然后,VM1 上的应用程序实例将使用独占预留以写入卷。
- 已对卷强制实施此预留,并且数据库现在可以独占方式写入卷。 从 VM2 上的应用程序实例进行的任何写入都会失败。
- 如果 VM1 上的应用程序实例关闭,则 VM2 上的实例可以启动数据库故障转移和卷接管。
- 现在已对卷强制实施此预留,并且它将不会接受来自 VM1 的写入操作。 它只接受来自 VM2 的写入。
- 群集应用程序可以完成数据库故障转移并处理来自 VM2 的请求。
下图说明了另一个常见的群集工作负载,该工作负载由多个节点组成,这些节点从弹性 SAN 卷读取数据以运行并行进程,例如机器学习模型训练。
流程如下所示:
- 在所有 VM 上运行的群集应用程序均注册了其读取或写入弹性 SAN 卷的意图。
- 然后,VM1 上的应用程序实例将使用独占预留以写入卷,同时开放其他 VM 的卷读取。
- 已对卷强制实施此预留。
- 群集中的所有节点现在都可以从卷中读取。 只有一个节点代表群集中的所有节点将结果写回卷。
支持的 SCSI PR 命令
弹性 SAN 卷支持以下命令:
若要与卷交互,请从适当的永久性预留操作开始:
- PR_REGISTER_KEY
- PR_REGISTER_AND_IGNORE
- PR_GET_CONFIGURATION
- PR_RESERVE
- PR_PREEMPT_RESERVATION
- PR_CLEAR_RESERVATION
- PR_RELEASE_RESERVATION
使用 PR_RESERVE、PR_PREEMPT_RESERVATION 或 PR_RELEASE_RESERVATION 时,请提供下列永久性预留类型之一:
- PR_NONE
- PR_WRITE_EXCLUSIVE
- PR_EXCLUSIVE_ACCESS
- PR_WRITE_EXCLUSIVE_REGISTRANTS_ONLY
- PR_EXCLUSIVE_ACCESS_REGISTRANTS_ONLY
- PR_WRITE_EXCLUSIVE_ALL_REGISTRANTS
- PR_EXCLUSIVE_ACCESS_ALL_REGISTRANTS
永久性预留类型确定群集中每个节点对卷的访问权限。
永久预留类型 | 预留持有者 | 已注册 | 其他 |
---|---|---|---|
不预留 | 不可用 | 读/写 | 读取/写入 |
写入独占 | 读/写 | 只读 | 只读 |
独占访问 | 读/写 | 无访问权限 | 无访问权限 |
写入独占 - 仅限注册者 | 读取/写入 | 读/写 | 只读 |
独占访问 - 仅限注册者 | 读取/写入 | 读/写 | 无访问权限 |
写入独占 - 所有注册者 | 读取/写入 | 读/写 | 只读 |
独占访问 - 所有注册者 | 读取/写入 | 读/写 | 无访问权限 |
还需要在使用时提供一个 persistent-reservation-key:
- PR_RESERVE
- PR_REGISTER_AND_IGNORE
- PR_REGISTER_KEY
- PR_PREEMPT_RESERVATION
- PR_CLEAR_RESERVATION
- PR_RELEASE-RESERVATION。