Atlas 会自动运行数据验证,以主动检测项目中所有集群的数据不一致。数据验证有助于在数据损坏影响应用程序之前识别隐藏的数据损坏。
当副本集节点之间的数据存在差异但未触发错误或警告时,会发生静默数据损坏。这可能是由于硬件故障、网络问题或其他系统级问题导致的。示例包括:
丢失文档:文档存在于某些节点上,但在其他节点上丢失。
内容差异:文档存在于所有节点,但它们之间的内容存在差异。
索引不一致:索引项在节点之间存在差异。
如果没有验证,这些不一致可能会保持未检测状态,并导致应用程序错误、数据丢失或查询结果不正确。
数据验证的工作原理
Atlas 通过比较副本集节点之间的数据,对副本集节点之间的数据进行验证,以检测静默数据损坏。
验证过程包括以下步骤:
在与集群相同的云提供商和区域中创建临时验证实例。
将节点快照恢复到验证实例。
比较节点快照中的数据以检测不一致。
检测到不一致时,将验证结果存储在 Atlas 系统(Amazon Web Services
us-east-1)中。
数据验证在项目中的所有集群上自动运行。如果有必要,可以在项目级别禁用验证。
数据访问和存储
在验证过程中,Atlas 会读取数据库和集合数据以计算哈希值并检测不一致。Atlas 不会修改集群数据或存储解密的文档内容。解密数据只在验证过程中临时存在,不会持久存储。
当验证检测到不一致时,Atlas 仅存储以下元数据:
数据类型 | 保留期 | 说明 |
|---|---|---|
运行元数据 | 3 年 | 验证运行状态、时间戳和不一致性总结,包括按数据库、集合和不一致性类型进行的计数。 |
不一致的详细信息 | 90 天 | 数据库名称、集合名称、文档 ID 以及未通过验证的文档的不一致类型。 |
验证日志 | 90 天 | 详细验证输出存储在 S3 中。可通过 Atlas 用户界面进行故障排除。 |
钻取结果 | 21 天 | 验证过程中使用的中间哈希结果。 |
Atlas 仅保留不一致元数据以供分析和疑难排除。
带有静态加密的数据验证
对于使用客户托管密钥的带有静态加密的集群,验证需要额外访问您的 Key Management Service。
验证实例必须使用客户数托管密钥解密数据以执行验证检查。这会导致额外的 KMS API 请求和相关费用。
有关 KMS 使用、费用、安全考虑和 IP 允许列表配置要求的详细信息,请参阅 数据验证 KMS 使用。
禁用数据验证
您可以对项目中的所有集群禁用数据验证。
重要
禁用数据验证意味着 Atlas 无法主动检测集群中的数据不一致。仅当您有阻止验证运行的特定要求时,才禁用验证。