你当前正在访问 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 启用从一个节点到另一个节点的故障转移。

显示应用程序映射详细信息的图。

流程如下所示:

  1. 在 Azure VM1 和 VM2 上运行的群集应用程序均注册了其读取或写入弹性 SAN 卷的意图。
  2. 然后,VM1 上的应用程序实例将使用独占预留以写入卷。
  3. 已对卷强制实施此预留,并且数据库现在可以独占方式写入卷。 从 VM2 上的应用程序实例进行的任何写入都会失败。
  4. 如果 VM1 上的应用程序实例关闭,则 VM2 上的实例可以启动数据库故障转移和卷接管。
  5. 现在已对卷强制实施此预留,并且它将不会接受来自 VM1 的写入操作。 它只接受来自 VM2 的写入。
  6. 群集应用程序可以完成数据库故障转移并处理来自 VM2 的请求。

下图说明了另一个常见的群集工作负载,该工作负载由多个节点组成,这些节点从弹性 SAN 卷读取数据以运行并行进程,例如机器学习模型训练。

显示机器学习群集的图。

流程如下所示:

  1. 在所有 VM 上运行的群集应用程序均注册了其读取或写入弹性 SAN 卷的意图。
  2. 然后,VM1 上的应用程序实例将使用独占预留以写入卷,同时开放其他 VM 的卷读取。
  3. 已对卷强制实施此预留。
  4. 群集中的所有节点现在都可以从卷中读取。 只有一个节点代表群集中的所有节点将结果写回卷。

支持的 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。