将流量迁移到 Firestore
本页介绍了迁移流程的最后阶段,在此阶段中,您需要监控迁移并确定何时切换流量,以最大限度地减少应用停机时间。
具体步骤如下:
- 确定数据传输期间是否遇到任何错误。请注意数据类型和文档大小的当前已知限制。
- 确定何时适合关闭对源数据库的写入流量。
- 确定所有数据(包括最近的更改事件)何时复制到与 MongoDB 兼容的 Firestore 数据库。此时,您可以安全地将读取流量重定向到新目标。
- 在所有应用工作负载都始终仅从 Firestore 读取数据后,即可安全地启用写入流量并将其定向到与 MongoDB 兼容的 Firestore 数据库。
检查迁移完成里程碑
本部分中的说明需要您在 Google Cloud 控制台中访问 Dataflow。
在 Google Cloud 控制台中,前往 Dataflow 页面:
源数据库正在接收所有读取和写入流量
在启动 Datastream 和 Dataflow 流水线后,源数据库应继续接收读取和写入流量。您可以使用以下里程碑来确定迁移何时可以进入下一步:
Dataflow 流水线的事务性写入事件步骤不再处理积压的数据,吞吐量降至与源数据库的活跃流量相匹配的低稳定状态:
Datastream 监控标签页中的数据新鲜度至少为 1 分钟,并且非常接近源数据库中的实时流量:
当数据转移达到此稳定状态后,请继续执行下一步。
关闭对源数据库的写入流量
确定 Datastream 流已完成批量回填,并且 Dataflow 模板仅以稳定的速度对源数据库的实时更改执行事务性写入后,您就可以开始割接流程了。此过程需要少量停机时间,以便将所有剩余流量复制到目标 Firestore(与 MongoDB 兼容)数据库。
停止向 MongoDB 兼容的源数据库发送所有写入流量。根据应用的要求和功能,您可能希望继续允许读取流量流向源数据库。
监控 Datastream 吞吐量和日志,以及 Dataflow 吞吐量、数据延迟和日志,以确保已处理完最后一次写入流量。
检查死信队列。 确定在迁移期间是否有任何文档无法写入目标数据库,并决定是否继续迁移。
将读取流量迁移到 Firestore
在所有待处理的变更数据流事件复制到 Firestore 后,这两个数据库将包含完全相同的数据。现在,您可以先转移读取流量,然后再转移写入流量。
如果您在上一步中选择允许读取流量流向与 MongoDB 兼容的源数据库,请执行以下操作:
- 转移读取流量。
- 确保最初连接到 MongoDB 兼容型源数据库的所有服务都已更新为从 Firestore with MongoDB compatibility 数据库执行读取操作。
将写入流量迁移到 Firestore
完成上一步后,您可以安全地将应用的写入流量直接重定向到 Firestore。
停止迁移流水线
迁移现已完成。现在可以停止 Datastream 流和 Dataflow 作业了。
暂停 Datastream 数据流:
gcloud datastream streams update "$DATASTREAM_NAME" \
--location="$LOCATION" \
--state=PAUSED \
--update-mask=state
如需关闭 Dataflow 流水线,请执行以下操作:
列出所有当前作业:
gcloud dataflow jobs list --region="$LOCATION"
输出将生成 Dataflow 作业列表。
在作业列表中,找到时间戳与您在
DATAFLOW_START_TIME
环境变量中指定的时间戳相符的NAME
值。格式:
dataflow-mongodb-to-firestore-DATAFLOW_START_TIME
。 示例:dataflow-mongodb-to-firestore-20250514173638
。获取相应的
JOB_ID
。示例:2025-05-14_17_36_39-10772223470853954680
。针对此作业 ID 运行 drain 命令:
gcloud dataflow jobs drain \ JOB_ID \ --region="$LOCATION"
示例:
gcloud dataflow jobs drain \ 2025-05-14_17_36_39-10772223470853954680 \ --region="$LOCATION"
后续步骤
如需获取问题排查提示,请参阅迁移问题排查。