导出云备份快照
注意
此功能不适用于M0
免费集群和 Flex 集群。要详细学习;了解哪些功能不可用,请参阅 Atlas M0 (免费集群)、M2 和 M5 限制。
Atlas允许您将云备份快照导出到对象存储服务。
要了解如何管理自动备份策略和计划,请参阅管理备份策略。
支持的存储服务
Atlas目前支持以下对象存储服务:
AWS S3 存储桶
Azure Blob 存储
Atlas 如何导出快照
您可以手动导出单个快照,也可以设置导出策略来自动导出快照。对于自动导出,您必须在导出策略中指定频率:
每日
每周
每月
每年
Atlas 可自动导出频率类型与导出频率匹配的任何备份快照。导出的结果是该快照的完整备份。
例子
请考虑以下内容:
设立每周和每月快照计划的备份策略
设置每月导出频率的导出策略
假设在月底,每周和每月的快照发生在同一天。将有 4
个快照,其中 3
个是每周快照,第四个快照虽然被 Atlas 视为每周快照,但它也是每月快照,因为发生在同一天。Atlas 只会导出每月快照,因为导出频率与该快照的快照频率匹配。要同时导出每周快照,请将导出策略更新为同时导出每周快照。如果导出频率设置为每周,Atlas 将导出全部 4
个快照。
随着导出的进行,您可能会在对象存储服务中看到部分结果。
无论 生存时间 (Time to Live) 设置如何, Atlas都会将文档保留在快照中。您可以在超过“生存时间”截止时间后的快照中访问权限这些文档。
除了 AWS 或Azure本身产生的数据传输费用外, Atlas还针对导出到$.125
AWS S3 存储桶或Azure Blob 存储容器的每GB数据收取 的费用。 Atlas会在导出之前压缩数据。要估计导出的数据量,请将集群中每个数据库的 dataSize 相加。此总数应与导出的未压缩大小相对应,这将是Atlas因数据导出操作而产生的最大费用。
Atlas 上传的文件
当您执行以下操作时,Atlas 会将空文件上传到 /exported_snapshots/.permissioncheck
:
完成导出后,Atlas 会为每个集合上传名为 .complete
和 metadata.json
的元数据文件。
Atlas会将名为 .complete
的元数据文件上传到对象存储的以下路径中:
/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/
注意
默认情况下,Atlas 会在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过 API 将 useOrgAndGroupNamesInExportPrefix
标志设置为 true
。Atlas 会使用下划线 (_
) 替换所有空格,并从路径中的组织和项目名称中删除任何可能需要特殊处理的字符 和应避免使用的字符。
.complete
元数据文件采用 JSON 格式,包含以下字段:
字段 | 说明 |
---|---|
| 唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织。 |
| Atlas 组织的名称。 |
| 唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织中的项目。 |
| Atlas 项目的名称。 |
| 用于标识 Atlas 集群的唯一的 24 位十六进制数字字符串。 |
| Atlas 项目的名称。 |
| 拍摄快照的日期。 |
| 上传到对象存储的文件总数。 |
| 已导出快照的集群所具有的标签。 |
| 您在创建导出作业时指定的自定义数据(如果有)。 |
例子
{ "orgId": "60512d6f65e4047fe0842095", "orgName": "org1", "groupId": "60512dac65e4047fe084220f", "groupName": "group1", "clusterUniqueId": "60512dac65e4047fe0842212", "clusterName": "cluster0", "snapshotInitiationDate": "2020-04-03T05:50:29.321Z" "totalFiles": 23, "labels": [ { "key": "key1", "value": "xyz" }, { "key": "key2", "value": "xyzuio" } ], "customData": [ { "key": "key1", "value": "xyz" }, { "key": "key2", "value": "xyzuio" } ] }
Atlas将每个集合的 metadata.json
文件上传到对象存储的以下路径中:
/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/<dbName>/<collectionName>/metadata.json
注意
默认情况下,Atlas 会在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过 API 将 useOrgAndGroupNamesInExportPrefix
标志设置为 true。Atlas 会用下划线 (_
) 替换所有空格,并从路径中的组织和项目名称中删除任何可能需要特殊处理的字符和应避免使用的字符。
元数据文件采用 JSON 格式,包含以下字段:
字段 | 说明 |
---|---|
| 用于标识集合的用户可读标签。 |
| 以 db.collection.getIndexes 命令返回的格式列出集合上的所有索引。 |
| 在集合上定义的配置选项。要了解有关选项的更多信息,请参阅 db.createCollection() 命令。 |
| (可选)集合类型。仅时间序列集合支持此字段,其值为 Atlas不支持导出 |
| 集合的 UUID。要了解有关 UUID 的更多信息,请参阅UUID。 |
例子
{ "options":{ "viewOn":"othercol", "pipeline":[{"$project":{"namez":"$name"}}] }, "indexes":[], "collectionName":"viewcol", "type":"view" }
{ "options":{ "timeseries":{ "timeField":"timestamp", "granularity":"seconds", "bucketMaxSpanSeconds":{"$numberInt":"3600"} } }, "indexes":[], "collectionName":"timeseriescol", "type":"timeseries" }
{ "indexes": [ { "v":{"$numberInt":"2"}, "key":{ "_id":{"$numberInt":"1"} }, "name":"_id_" } ], "uuid":"342c40a937c34c478bab03de8ce44f3e", "collectionName":"somecol" }
如果导出作业失败:
Atlas 不会自动尝试再次导出。
Atlas不会删除对象存储中的任何部分数据。
导出的数据格式
Atlas上传gzip
压缩的扩展JSON2 (v) 文档。 Atlas不会按顺序上传这些文档。以下是对象存储上文件的路径:
/exported_snapshots/<orgName>/<projectName>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/<dbName>/<collectionName>/<shardName>.<increment>.json.gz
其中:
| 您的 Atlas 组织的名称。 |
| 您的 Atlas 项目的名称。 |
| 您的 Atlas 集群的名称。 |
| 拍摄快照的日期。 |
| 创建导出作业时的时间戳。 |
| Atlas 集群中数据库的名称。 |
| Atlas 集合的名称。 |
| 副本集的名称。对于分片的集合,这是主分片分片 的名称。 |
| 上传数据段时递增的计数。从 |
限制
您无法执行以下操作:
每个快照都有多个活动导出。
必需的访问权限
要管理云备份快照,您必须拥有项目的 Project Owner
访问权限。拥有 Organization Owner
访问权限的用户必须将自己添加为该项目的 Project
Owner
,然后才能管理云备份快照。
先决条件
要导出云备份快照,您需要一个启用了云备份的M10
或更高版本的Atlas 集群。此外,要导出到对象存储,您必须执行以下操作:
使用
STS:AssumeRole
配置 AWS IAM 角色,授予 Atlas 访问AWS资源的权限。要了解有关为 Atlas 配置 AWS 访问权限的更多信息,请参阅设置统一的 AWS 访问权限。配置 AWS IAM 角色策略,为您的 AWS 资源授予 Atlas 写入权限或
S3:PutObject
和S3:GetBucketLocation
权限。要了解有关配置 AWS 资源写入权限的更多信息,请参阅设置统一 AWS 访问权限。例子
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::bucket-name" }, { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] }
为您的 Atlas 项目设置 Azure 服务主体及访问策略。
将 Storage Blob Delegator 和 Storage Blob Data Contributor 角色分配给 Azure 服务主体。
要为您的服务主体分配角色,您需要以下信息:
角色说明Storage Blob Delegator
这允许服务主体签署 SAS 令牌以访问 Azure 存储容器。要分配此角色,请运行以下命令:
az role assignment create --assignee-object-id <service-principal-id> --role "Storage Blob Delegator" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name> Storage Blob Data Contributor
这允许对 Azure 存储容器进行读取、写入和删除 blob 访问权限。要分配此角色,请运行以下命令:
az role assignment create --assignee-principal-type ServicePrincipal --assignee-object-id <service-principal-id> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>
导出管理
您可以创建和管理从 Atlas CLI 和 Atlas Administration API 导出到 AWS S3 存储桶的快照,或创建和管理从 Atlas Administration API 导出到 Azure Blob 存储容器的快照。
注意
您无法使用 Atlas CLI 将快照导出到 Azure Blob Storage 容器。
管理导出任务
您可以使用 Atlas CLI 来管理导出作业(如创建或查看导出作业)。
创建导出作业
要使用 Atlas CLI 将 M10 或更高版本的 Atlas 集群的一个备份快照导出到现有 AWS S3 存储桶,请运行以下命令:
atlas backups exports jobs create [options]
要使用 Atlas CLI 监视特定备份导出作业的完成情况,请运行以下命令:
atlas backups exports jobs watch <exportJobId> [options]
要了解前面命令的语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports jobs create 和 atlas backups exports jobs watch。
查看导出作业
要使用 Atlas CLI 列出指定项目的云备份恢复作业,请运行以下命令:
atlas backups exports jobs list <clusterName> [options]
要使用 Atlas CLI 返回指定的云备份恢复作业的详细信息,请运行以下命令:
atlas backups exports jobs describe [options]
要了解前述命令的语法和参数的更多信息,请参阅关于 atlas backups exports jobs list 和 atlas backups exports jobs describe 的 Atlas CLI 文档。
管理导出存储桶
您可以使用 Atlas CLI 来管理导出存储桶(如创建、查看或删除导出存储桶)。
创建一个导出存储桶
要使用 Atlas CLI 通过现有 AWS S3 存储桶为 Atlas 备份创建导出目标,请运行以下命令:
atlas backups exports buckets create <bucketName> [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets create。
查看导出存储桶
要使用 Atlas CLI 列出指定项目的云备份恢复存储桶,请运行以下命令:
atlas backups exports buckets list [options]
要使用 Atlas CLI 返回指定的云备份恢复存储桶的详细信息,请运行以下命令:
atlas backups exports buckets describe [options]
要了解前面命令的语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets list 和 atlas backups exports buckets describe。
删除导出存储桶
要使用 Atlas CLI 删除 Atlas 备份的导出目标,请运行以下命令:
atlas backups exports buckets delete [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets delete。
要授予和管理云提供商访问权限以及创建和管理快照导出任务,您使用的 API 必须具有 Project Owner
角色。
管理导出存储桶
使用以下项管理导出存储桶或容器。
创建一个导出存储桶
要授予访问 AWS S3 存储桶或 Azure Blob 存储容器以导出快照的访问权限,请向云备份资源端点发送 POST
请求。这让 AWS S3 存储桶或 Azure Blob 存储容器能够接收 Atlas 云备份快照。在发送请求以授予访问权限时,您必须提供以下信息:
唯一的 24 位十六进制字符串,用于标识 Atlas 必须使用该字符串来访问 AWS S3 存储桶的统一 AWS 访问角色 ID。要了解更多信息,请参阅设置统一的 AWS 访问权限。
唯一的 24 位十六进制字符串,用于标识 Atlas 访问 Azure Blob 存储时必须使用的 Azure 服务主体。要了解更多信息,请参阅设置和管理 Azure 服务主体访问权限。
Azure Blob 存储帐户的服务端点。要了解详情,请参阅 Azure 文档。
列出所有导出存储桶
要检索 Atlas 向其导出快照的所有 AWS S3 存储桶和 Azure Blob 存储容器,请向云备份资源端点发送 GET
请求。
删除一个导出存储桶
要删除导出存储桶,您必须首先禁用将快照自动导出到项目中所有集群的 AWS S3 存储桶或 Azure Blob 存储容器,然后使用导出存储桶的 ID 向云备份资源端点发送 DELETE
请求。如有必要,向端点发送 GET
请求,检索导出存储桶 ID。
管理导出任务
使用以下方法管理导出作业。
创建快照导出作业
要将一个 Atlas 备份快照导出到 AWS S3 存储桶或 Azure Blob 存储容器,请向云备份资源端点发送一个 POST
请求,其中包含要导出的快照的 ID 以及 AWS S3 存储桶或 Azure Blob 存储容器的 ID。