将流量迁移到 Firestore

本页介绍了迁移流程的最后阶段,在此阶段中,您需要监控迁移并确定何时切换流量,以最大限度地减少应用停机时间。

具体步骤如下:

  1. 确定数据传输期间是否遇到任何错误。请注意数据类型和文档大小的当前已知限制
  2. 确定何时适合关闭对源数据库的写入流量。
  3. 确定所有数据(包括最近的更改事件)何时复制到与 MongoDB 兼容的 Firestore 数据库。此时,您可以安全地将读取流量重定向到新目标。
  4. 在所有应用工作负载都始终仅从 Firestore 读取数据后,即可安全地启用写入流量并将其定向到与 MongoDB 兼容的 Firestore 数据库。

检查迁移完成里程碑

本部分中的说明需要您在 Google Cloud 控制台中访问 Dataflow。

在 Google Cloud 控制台中,前往 Dataflow 页面:

转到 Dataflow

源数据库正在接收所有读取和写入流量

在启动 Datastream 和 Dataflow 流水线后,源数据库应继续接收读取和写入流量。您可以使用以下里程碑来确定迁移何时可以进入下一步:

  • Dataflow 流水线的事务性写入事件步骤不再处理积压的数据,吞吐量降至与源数据库的活跃流量相匹配的低稳定状态:

    事务性写入事件

  • Datastream 监控标签页中的数据新鲜度至少为 1 分钟,并且非常接近源数据库中的实时流量:

    数据新鲜度

当数据转移达到此稳定状态后,请继续执行下一步。

关闭对源数据库的写入流量

确定 Datastream 流已完成批量回填,并且 Dataflow 模板仅以稳定的速度对源数据库的实时更改执行事务性写入后,您就可以开始割接流程了。此过程需要少量停机时间,以便将所有剩余流量复制到目标 Firestore(与 MongoDB 兼容)数据库。

  1. 停止向 MongoDB 兼容的源数据库发送所有写入流量。根据应用的要求和功能,您可能希望继续允许读取流量流向源数据库。

  2. 监控 Datastream 吞吐量和日志,以及 Dataflow 吞吐量、数据延迟和日志,以确保已处理完最后一次写入流量。

  3. 检查死信队列。 确定在迁移期间是否有任何文档无法写入目标数据库,并决定是否继续迁移。

将读取流量迁移到 Firestore

在所有待处理的变更数据流事件复制到 Firestore 后,这两个数据库将包含完全相同的数据。现在,您可以先转移读取流量,然后再转移写入流量。

如果您在上一步中选择允许读取流量流向与 MongoDB 兼容的源数据库,请执行以下操作:

  1. 转移读取流量。
  2. 确保最初连接到 MongoDB 兼容型源数据库的所有服务都已更新为从 Firestore with MongoDB compatibility 数据库执行读取操作。

将写入流量迁移到 Firestore

完成上一步后,您可以安全地将应用的写入流量直接重定向到 Firestore。

停止迁移流水线

迁移现已完成。现在可以停止 Datastream 流和 Dataflow 作业了。

暂停 Datastream 数据流:

gcloud datastream streams update "$DATASTREAM_NAME" \
--location="$LOCATION" \
--state=PAUSED \
--update-mask=state

如需关闭 Dataflow 流水线,请执行以下操作:

  1. 列出所有当前作业:

    gcloud dataflow jobs list --region="$LOCATION"
    

    输出将生成 Dataflow 作业列表。

  2. 在作业列表中,找到时间戳与您在 DATAFLOW_START_TIME 环境变量中指定的时间戳相符的 NAME 值。

    格式:dataflow-mongodb-to-firestore-DATAFLOW_START_TIME。 示例:dataflow-mongodb-to-firestore-20250514173638

  3. 获取相应的 JOB_ID。示例:2025-05-14_17_36_39-10772223470853954680

  4. 针对此作业 ID 运行 drain 命令:

    gcloud dataflow jobs drain \
    JOB_ID \
    --region="$LOCATION"
    

    示例:

    gcloud dataflow jobs drain \
    2025-05-14_17_36_39-10772223470853954680 \
    --region="$LOCATION"
    

后续步骤

如需获取问题排查提示,请参阅迁移问题排查