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

Azure Cosmos DB(预览版)中的容器复制作业

适用对象: NoSQL MongoDB Cassandra

可以使用容器复制作业在 Azure Cosmos DB 帐户中执行脱机容器复制。

如果要实现以下任一方案,可能需要在 Azure Cosmos DB 帐户中复制数据:

使用 Azure CLI 命令创建和管理容器复制作业。

开始使用

若要开始,请在 Microsoft Azure 门户中注册相关预览功能。

跨 Azure Cosmos DB 帐户的容器复制

NoSQL API

要开始使用 Azure Cosmos DB for NoSQL API 帐户的跨帐户脱机容器复制,请在 Microsoft Azure 门户的预览功能中注册“跨帐户脱机容器复制(NoSQL)”预览功能标志。 注册完成后,预览版将对订阅中的所有 NoSQL API 帐户生效。

Azure Cosmos DB 帐户内的容器复制

NoSQL 和 Cassandra API

要开始使用 NoSQL 和 Cassandra API 帐户的帐户内脱机容器副本,请在 Azure 门户的预览功能中注册“帐户内脱机容器副本(Cassandra 和 NoSQL)”预览功能标志。 注册完成后,预览将对订阅中的所有 Cassandra 和 API for NoSQL 帐户生效。

适用于 MongoDB 的 API

要开始使用 Azure Cosmos DB for MongoDB 帐户的帐户内脱机容器复制,请在 Azure 门户的预览功能中注册“帐户内脱机集合复制(MongoDB)”预览功能标志。 注册完成后,预览将对订阅中 MongoDB 帐户的所有 API 生效。

复制容器数据

  1. 通过你想要使用的设置(分区键、吞吐量粒度、请求单位、唯一键等)创建目标 Azure Cosmos DB 容器。
  2. 通过暂停应用程序实例或连接到它的任何客户端,停止对源容器的操作。
  3. 创建容器复制作业
  4. 监视容器复制作业的进度并等待完成。
  5. 通过按预期将应用程序或客户端适当地指向源或目标容器副本来恢复操作。

容器复制的工作原理是什么?

容器复制作业使用源容器的增量更改源日志执行脱机数据复制。

  1. 平台为目标 Azure Cosmos DB 帐户分配服务器端计算实例。
  2. 在帐户中创建一个或多个容器复制作业时,会分配这些实例。
  3. 容器复制作业在这些实例上运行。
  4. 一个作业在任何时候都跨所有实例执行。
  5. 这些实例由在同一帐户中运行的所有容器复制作业共享。
  6. 如果实例空闲超过 15 分钟,平台可能会取消分配这些实例。

注意

我们目前仅支持脱机容器复制作业。 强烈建议在开始容器复制之前停止对源容器执行任何操作。 开始复制作业后,可能无法捕获源容器上完成的项删除和更新。 如果在容器作业进行期间继续对源容器执行操作,可能会导致目标容器上出现重复数据或缺失数据。

影响容器复制作业速率的因素

容器复制作业的进度由以下因素决定:

  • 源容器或数据库吞吐量设置。

  • 目标容器或数据库吞吐量设置。

    提示

    将目标容器吞吐量设置为至少是源容器吞吐量的两倍。

  • 分配给 Azure Cosmos DB 帐户用于执行数据传输的服务器端计算实例。

    重要

    默认 SKU 为每个帐户提供两个 4-vCPU 16-GB 服务器端实例。

限制

预览版资格条件

容器复制作业不适用于启用了以下功能的帐户。 在运行容器复制作业之前禁用这些功能:

帐户配置

未在目标容器中调整生存时间 (TTL) 设置。 因此,如果文档在源容器中未过期,它会在目标容器中重新开始其倒计时。

常见问题解答

容器复制作业是否有服务级别协议?

目前,我们尽量支持容器复制作业。 关于完成作业所需的时间,我们不提供任何服务级别协议 (SLA)。

是否可以在一个帐户中创建多个容器复制作业?

是的,可以在同一帐户中创建多个作业。 作业会连续运行。 可列出在帐户中创建的所有作业并监视其进度。

是否可以在 Azure Cosmos DB 帐户中复制整个数据库?

必须为数据库中的每个容器创建一个作业。

我有一个包含多个区域的 Azure Cosmos DB 帐户。 容器复制作业将在哪个区域运行?

容器复制作业将在写入区域中运行。 在配置了多区域写入的帐户中,作业在写入区域列表中的一个区域中运行。

当帐户的写入区域发生变化时,容器复制作业会发生什么情况?

如果区域中断(此情况很罕见)或手动故障转移,帐户的写入区域可能会发生变化。 在这种情况下,在帐户中创建的不完整容器复制作业会失败。 你将需要重新创建这些失败的作业。 然后,重新创建的作业会在新的(当前)写入区域中运行。

支持的区域

目前,以下区域支持容器复制:

美洲 欧洲和非洲 亚太区
巴西南部 法国中部 澳大利亚中部
加拿大中部 法国南部 澳大利亚中部 2
加拿大东部 德国北部 澳大利亚东部
美国中部 德国中西部 印度中部
美国中部 EUAP 北欧 日本东部
美国东部 挪威东部 韩国中部
美国东部 2 挪威西部 东南亚
美国东部 2 EUAP 瑞士北部 阿联酋中部
美国中北部 瑞士西部 印度西部
美国中南部 英国南部 东亚
美国中西部 英国西部 马来西亚南部
美国西部 西欧 日本西部
美国西部 2 以色列中部 澳大利亚东南部
不支持 南非北部 不支持

已知和常见问题

  • 错误 - 所有者资源不存在。

    如果作业创建失败,并显示“所有者资源不存在”错误(错误代码 404),这表示目标容器尚未创建,或者用于创建作业的容器名称与实际容器名称不匹配。

    请确保在按照概述中所述运行作业之前已创建目标容器,并确保作业中的容器名称与实际容器名称匹配。

    "code": "404",
    "message": "Response status code does not indicate success: NotFound (404); Substatus: 1003; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: (Message: {\"Errors\":[\"Owner resource does not exist\"]
    
  • 错误 - 请求未经授权。

    如果请求失败并显示“未经授权”错误(错误代码 401),这表示可能禁用了本地授权。 了解如何启用本地授权

    容器复制作业使用主密钥进行身份验证。 如果禁用本地授权,作业创建会失败。 必须启用本地授权,这样容器复制作业才能正常工作。

    "code": "401",
    "message": " Response status code does not indicate success: Unauthorized (401); Substatus: 5202; ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx; Reason: Local Authorization is disabled. Use an AAD token to authorize all requests."
    
  • 错误 - 获取作业的资源时出错。

    此错误可能是由于内部服务器问题导致的。 要解决此问题,请在 Microsoft Azure 门户中打开新的支持请求来联系 Microsoft 支持部门。 对于“问题类型”,选择“数据迁移”。 对于“问题子类型”,选择“帐户内容器复制”。

    "code": "500"
    "message": "Error while getting resources for job, StatusCode: 500, SubStatusCode: 0, OperationId:  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, ActivityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    

后续步骤