你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure NetApp 文件配置缓存卷(预览版)

本文的目的是为 Azure NetApp 文件的用户提供缓存卷,以简化文件分发、降低 WAN 延迟和降低 WAN/ExpressRoute 带宽成本。 Azure NetApp 缓存卷目前设计为与外部源进行对等互连,这些源可以是本地 ONTAP、Cloud Volumes ONTAP 或 Amazon FSx for NetApp 的源卷。

Azure NetApp 文件缓存卷是外部源卷的云端缓存,只包含该卷中最常被访问的数据。 缓存卷同时接受读取和写入,但以更快的速度运行,延迟降低。 当缓存卷收到其包含的热点数据的读取请求时,它可以比源卷更快地响应,因为数据无需经过相同距离到达客户端。 如果缓存卷收到不经常读取数据的读取请求(冷数据),则会从源卷检索所需的数据,然后在为客户端请求提供服务之前存储数据。 然后,后续的数据读取请求将直接由缓存卷处理。 第一个请求后,数据不再需要通过网络传输或从负载沉重的系统获取。

写回机制允许将写入操作提交至缓存中的稳定存储,并在无需等待数据到达源头的情况下确认客户端。 这将形成一个全球分布的文件系统,使写入可以在特定工作负载和环境下以接近本地的速度进行,从而提供显著的性能优势,而写入绕过策略则需要等待源在确认客户端之前将数据提交到稳定存储。 这导致每次写入操作都会产生在缓存和源服务器之间传输网络的开销。

要求和注意事项

  • 缓存卷当前仅受 REST API(新缓存终结点)支持。

  • 必须在可用性区域中部署 Azure NetApp 文件缓存卷。 若要填充可用性区域中的新卷或现有卷,请参阅 管理 Azure NetApp 文件中的可用性区域

  • 创建缓存卷时,请确保容量池中有足够的空间来容纳新的缓存卷。

  • 应确保缓存卷和源卷的协议类型相同。 安全样式和 Unix 权限继承自源卷。 例如,当源为 UNIX 时,使用 NFSv3 或 NFSv4 创建缓存卷,在源为 NTFS 时创建 SMB。

  • 应在源卷上启用加密。

  • 源群集必须运行 ONTAP 9.15.1 或更高版本。

  • 应在 NetApp 帐户中配置 Active Directory(AD)或 LDAP 连接,以创建启用 LDAP 的缓存卷。

  • 无法将缓存卷移到另一个容量池。

  • 参数 globalFileLocking 值在共享同一源卷的所有缓存卷上必须相同。 通过将设置为 globalFileLocking true,可以在创建第一个缓存卷时启用全局文件锁定。 来自同一源卷的后续缓存卷必须将此设置设为 true。 若要更改现有缓存卷上的全局文件锁定设置,必须先更新源卷。 更新源卷后,更改将传播到与该源卷关联的所有缓存卷。 应在源群集上执行volume flexcache origin config modify -is-global-file-locking-enabled命令,以更改源卷上的设置。

  • 缓存卷的卷安全样式仅在创建时继承自外部 ONTAP 源卷,并且不是缓存卷上的可配置参数。 如果在外部源卷上更改了安全样式,则必须删除缓存卷,并使用正确的协议选项重新创建缓存卷,以便与安全样式保持一致。

    源卷安全样式 缓存卷协议 生成的缓存卷安全样式
    UNIX NFS UNIX
    NTFS SMB NTFS
    混合 NFS 或 SMB MIXED (不受支持)

    注释

    来自源卷配置的 MIXED 安全样式将由缓存卷继承,但如果出现文件访问问题,Azure NetApp 文件中不受支持。

网络注意事项

  • 缓存卷仅支持标准网络功能。 无法在缓存卷上配置基本网络功能。
  • 托管 Azure NetApp 文件卷的委托子网地址空间必须至少有七个可用 IP 地址:6 个用于群集对等互连,1 个用于数据访问一个或多个缓存卷。
    • 确保适当调整委派子网地址空间的大小,以适应 Azure NetApp 文件网络接口。 查看 Azure NetApp 文件网络规划指南 ,确保满足委派子网大小调整的要求。
  • 创建每个缓存卷时,Azure NetApp 文件卷放置算法会尝试重复使用与订阅中之前创建的任何缓存卷相同的 Azure NetApp 文件存储系统,以减少委托子网中使用网络接口卡(NIC)/IP 的数量。 如果无法实现这一点,则需要再使用 6+1 个 NIC。
  • 在同一区域的同一可用区中,不能使用同一个源群集为多个订阅创建缓存卷。
  • 创建缓存卷时,需要为缓存卷指定子网 (cacheSubnetResourceId),以及为群集对等连接指定子网 (peeringSubnetResourceId)。
    • 可以为缓存卷和群集对等连接指定同一子网(但子网必须具有 Microsoft.Netapp/卷委派)。
    • 使用不同的子网时,每个子网需要位于不同的 VNET 上,并且每个子网必须具有 Microsoft.Netapp/volumes 的委托权限。

写回注意事项

如果要在外部源卷上启用回写,则:

  • 必须在托管外部源卷的系统上运行 ONTAP 9.15.1P5 或更高版本。
  • 每个外部源系统节点至少有 128 GB RAM 和 20 个 CPU,以吸收由启用回写功能的缓存启动的回写消息。 这相当于 A400 或更高版本。 如果源群集充当多个已启用写回的 Azure NetApp 文件缓存卷的源,则需要更多的 CPU 和 RAM。
  • 对缓存和源之间的小于 100 GB 的文件执行测试,而 WAN 往返时间不超过 100 毫秒。 超出这些限制的任何工作负荷都可能导致意外的性能特征。
  • 外部源的占用率必须保持在 80% 以下。 当源卷中剩余空间不足 20% 时,不会向缓存卷授予独占锁委派。 在这种情况下,对具备写回功能的缓存的调用将转发到源站。 这有助于防止源端空间耗尽,否则可能会导致在启用回写功能的缓存中留下孤立的脏数据。

互作性注意事项

如果在源或目标上配置了以下功能,则无法使用缓存卷:

不支持的功能

以下功能不能用于 Azure NetApp 文件缓存卷:

  • 应用程序卷组
  • Azure NetApp 文件备份
  • 跨区域、跨区和跨区-区域复制
  • FlexCache 灾难恢复
  • NFSv4.2
  • 勒索软件防护
  • 快照策略
  • S3 存储桶

支持的功能

缓存卷支持以下功能:

  • 可用性区域卷放置
  • 客户管理的密钥
  • 轻型目录访问协议 (LDAP)
  • NFSv3 和 NFSv4.1、SMB 和双协议(NFS 和 SMB)
  • Kerberos

注释

无法将非客户管理的密钥缓存卷转换为客户管理的密钥。

注册该功能

Azure NetApp 文件的缓存卷目前以预览版提供。 首次使用此功能之前,你需要注册此功能。 注册后,即可在后台启用并使用该功能。

  1. 注册此功能:

    Register-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFCacheVolumesExternal 
    
  2. 检查功能注册的状态:

    注释

    RegistrationState 可能会处于状态长达 60 分钟,然后才更改为Registering状态。Registered 请等到状态变为“已注册”后再继续。

    Get-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFCacheVolumesExternal 
    

您还可以使用 Azure CLI 命令az feature register 来注册特性并显示注册状态。

在您开始之前

必须创建 ExpressRoute 或 VPN 资源,以确保从外部 NetApp ONTAP 群集到目标 Azure NetApp 文件群集的网络连接。 可以通过多种方式实现连接,目标是源群集已连接到 Azure NetApp 文件委托子网。 网络连接包括以下这组防火墙规则(全部为双向通信):

  • ICMP
  • TCP 11104
  • TCP 11105
  • HTTPS

源群集上的所有群集间 (IC) LIF 必须与 Azure NetApp 文件终结点上的所有 IC LIF 之间建立网络连接。

创建缓存卷

  1. 使用 PUT 缓存 API 调用开始缓存卷创建。 有关缓存作的信息,请参阅 API 文档

     PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview 
    
  2. 使用 GET 请求检查缓存状态是否可用于群集互连。

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview
    

    cacheState = ClusterPeeringOfferSent 时,执行 POST listPeeringPassphrases 调用以获取完成群集对等互连所需的命令和密码。

    示例 listPeeringPassphrases:

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}/listPeeringPassphrases?api-version=2025-09-01-preview 
    

    示例响应:

      {
      "clusterPeeringCommand": "cluster peer create -ipspace <IP-SPACE-NAME> -encryption-protocol-proposed tls-psk -peer-addrs 1.1.1.1,1.1.1.2,1.1.1.3,1.1.1.4,1.1.1.5,1.1.1.6",
      "cachePeeringPassphraseExample": "AUniquePassphrase",
      "vserverPeeringCommand": "vserver peer accept -vserver vserver1 -peer-vserver cache_volume_svm"
      } 
    

    在包含外部源卷的 ONTAP 系统上执行 clusterPeeringCommand,并在系统提示时输入 clusterPeeringPassphrase。

    注释

    cacheState 转换到ClusterPeeringOfferSent 后,您有 30 分钟的时间执行clusterPeeringCommand。 如果在 30 分钟内未执行该命令,则缓存创建会失败。 需要删除缓存卷并启动新的 PUT 调用。

    注释

    IP-SPACE-NAME 替换为 IC LIF 在外部源卷的 ONTAP 系统上使用的 IP 空间。

    注释

    不要在下一步之前执行vserverPeeringCommand

    注释

    如果已使用此 ONTAP 系统创建缓存卷,则重用现有的群集对等节点。 在某些情况下,可能需要使用不同的 Azure NetApp 文件群集,这就需要一个新的群集对等机。

  3. 使用 GET 请求监视缓存状态是否可用于存储 VM 对等互连。

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview  
    

    cacheState = VserverPeeringOfferSent 时,前往包含外部源卷的 ONTAP 系统,执行 vserver peer show 命令,直到出现一项,其远程存储 VM 显示 <value of the -peer-vserver in the vserverPeeringCommand>。 对等状态显示“挂起”。

    在 ONTAP 系统上执行 vserverPeeringCommand,该系统包含外部源卷。 对等状态应转换为“已建立对等互连”。

    注释

    cacheState转换为VserverPeeringOfferSent后,您有 12 分钟的时间来完成vserverPeeringCommand的执行。 如果在 12 分钟内未执行该命令,则缓存创建会失败。 需要删除缓存卷并启动新的 PUT 请求。

    注释

    如果已使用此 ONTAP 系统创建缓存卷并重复使用群集对等互连,则可以重复使用现有的 vserver 对等互连。 如果发生这种情况,你将跳过步骤 3,下一步将执行。

  4. 完成缓存卷创建。

    对等互连完成后,将创建缓存卷。 使用 GET 请求监控cacheStateprovisioningState缓存卷。 当 cacheState 和 provisioningState 转换为“成功”时,缓存卷已准备就绪,可供使用。

缓存创建请求正文示例

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview 

Body:
{
  "location": "westus",
  "zones": [
    "1"
  ],
  "properties": {
    "filepath": "cache1",
    "size": 53687091200,
    "protocolTypes": [
      "NFSv4"
    ],
    "cacheSubnetResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1",
    "peeringSubnetResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/subnet1",
    "encryptionKeySource": "Microsoft.NetApp",
    "originClusterInformation": {
      "peerClusterName": "origin_cluster",
      "peerAddresses": [
        "1.2.3.4"
      ],
      "peerVserverName": "origin_svm",
      "peerVolumeName": "origin_volume"
    },
    "exportPolicy": {
      "rules": [
        {
          "ruleIndex": 1,
          "unixReadOnly": "true",
          "unixReadWrite": "false",
          "kerberos5ReadOnly": "false",
          "kerberos5ReadWrite": "false",
          "kerberos5iReadOnly": "false",
          "kerberos5iReadWrite": "false",
          "kerberos5pReadOnly": "false",
          "kerberos5pReadWrite": "false",
          "nfsv3": "false",
          "nfsv41": "true",
          "allowedClients": "0.0.0.0/0"
        }
      ]
    }
  }
}

更新缓存卷

用于更新缓存卷的示例修补请求正文:

PATCH
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview

Example Body:
{
  "properties": {
    "writeBack": "Disabled"
  }
} 

删除缓存卷

如果不再需要缓存卷,则可通过进行 DELETE API 调用来删除它。

DELETE
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.NetApp/netAppAccounts/{accountName}/capacityPools/{poolName}/caches/{cacheName}?api-version=2025-09-01-preview

如果缓存卷已启用 writeBack ,请发出 PATCH 调用以禁用 writeBack ,然后发出 DELETE 请求。