Docs 菜单

Docs 主页MongoDB Cluster-to-Cluster Sync

mongosync

在此页面上

  • 说明
  • 选项
  • 全局选项
  • 行为
  • 集群独立性
  • 配置文件
  • 一致性(Consistency)
  • 剖析
  • 分片集群
  • 视图
  • 写入阻塞
  • 提交
  • 读关注和写关注
  • 读取偏好
  • 固定大小集合
  • 系统集合
  • 恢复力
  • UUID
  • 排序
  • 多个集群
  • 举例

mongosync 二进制是集群到集群同步中使用的主要进程。mongosync 可将数据从一个集群迁移到另一个集群,同时保持集群持续同步。

本文档将全面概述 mongosync 命令行选项。

注意

  • 源集群和目标集群都必须使用 MongoDB 6.0 或更高版本。

  • mongosync 支持副本集和分片集群。

  • 不支持独立运行的 MongoDB 实例。 在使用 Cluster-to-Cluster Sync 之前,将独立实例转换为副本集。

  • mongosync 不支持 Atlas 共享集群或无服务器实例。

  • 有关限制的完整列表,请参阅 Cluster-to-Cluster Sync 限制。

--cluster0 <URI>

设置第一个集群的连接 URI 。在同步过程中,第一个集群既可以作为源,也可以作为目标。在对start API 端点的调用中指定源集群和目标集群。

有关连接 mongosync 的更多信息,请参阅连接

要通过配置文件设置 --cluster0 选项,请参阅 cluster0 设置。

--cluster1 <URI>

设置第二个集群的连接 URI 。在同步过程中,第二个集群既可以作为源,也可以作为目标。在对start API 端点的调用中指定源集群和目标集群。

有关连接 mongosync 的更多信息,请参阅连接

要通过配置文件设置 --cluster1 选项,请参阅 cluster1 设置。

--config <filename>

设置配置文件的路径。

有关更多信息,请参阅集群独立性。

--disableTelemetry

版本 1.4.0 中的新增功能

禁用收集 mongosync 遥测数据

默认情况下,mongosync收集匿名的汇总使用数据以改进 MongoDB 产品。当您运行mongosync时,您可以禁用此遥测数据的收集。

要通过配置文件设置 --disableTelemetry 选项,请参阅 disableTelemetry 设置。

有关更多信息,请参阅用户数据集合

--help, -h

将使用情况信息打印到 stdout。

--id <ID>

mongosync 实例设置标识符。

在分片集群上运行多个 mongosync 实例时,使用此选项单独同步分片。

此选项的标识符值必须与其同步的分片的分片 ID 相对应。要查找分片 ID,请使用listShards命令。

要通过配置文件设置 --id 选项,请参阅 id 设置。

--loadLevel <level>

类型:整型

默认值3

设置在源集群和目标集群之间同步数据的集群工作负载级别:

  • 4,这是最高设置,最大限度地提高集群工作负载,数据同步的速度最快。

  • 1,这是最低设置,最大限度地减少了集群工作负载,数据同步的速度最慢。

要通过配置文件设置 --loadLevel 选项,请参阅 loadLevel 设置。

警告

loadLevel设置为高于默认值 3 可能会对目标集群性能产生负面影响。

--logPath <DIR>

设置日志目录的路径。集群到集群同步会将日志写入该目录下的文件。

有关更多信息,请参阅日志记录。

要通过配置文件设置 --logPath 选项,请参阅 logPath 设置。

--port

默认值27182

设置 HTTP 服务器用于集群到集群同步 HTTP API 的端口。

要通过配置文件设置 --port 选项,请参阅 port 设置。

--verbosity <level>

默认值DEBUG

设置要在日志消息中使用的详细程度。 Cluster-to-Cluster Sync 记录指定级别的所有消息和较低级别的所有消息。

--verbosity 选项支持以下各值:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • FATAL

  • PANIC

要通过配置文件设置 --verbosity 选项,请参阅 verbosity 设置。

--version, -v

mongosync 版本信息打印到 StdOut。

mongosync 在源集群和目标集群之间同步集合数据。 mongosync不会同步用户角色。因此,您可以在每个集群上创建具有不同访问权限的用户。

可以在 YAML 配置文件中设置mongosync的选项。使用--config选项。例如:

$ mongosync --config /etc/mongosync.conf

有关可用设置的信息,请参阅配置

mongosync 支持目标集群上的最终一致性。不保证目标集群上的读取一致性,且源集群和目标集群在给定时间点可能不同。但是,如果对源集群的新写入停止,则源集群和目标集群最终将保存相同的数据。

单个写入在从源中继到目标时,可以重新排序或组合。 对于给定文档, 源和目标之间的写入总数可能不同。

事务可能以非原子方式出现在目标集群上。 可重试写入可能无法在目标集群上重试。

如果对源数据库启用了分析,MongoDB 则会创建一个名为 <db>.system.profile 的特殊集合。同步完成后,Cluster-to-Cluster Sync 不会从目标中删除 <db>.system.profile 集合,即使后续删除源数据库也是如此。<db>.system.profile 集合不会改变目标上用户数据的准确性。

Cluster-to-Cluster Sync 支持分片集群之间的复制。单个分片会从源集群并行复制到目标集群,但在复制过程中,数据段迁移或类似的源更新可能会将文档移动到新的源分片。

即使文档在复制过程中在源分片之间移动,集群到集群同步也能保持目标集群上的最终一致性保证。

如果将带视图的数据库拖放到源上,则目标可能会在该数据库中显示空system.views集合。空system.views集合不会改变目标上用户数据的准确性。

mongosync 默认情况下不启用写入阻塞。如果启用写入阻塞,则 mongosync 会阻止写入:

  • 在同步期间的目标集群上。

  • 在源集群上,当收到commit时。

要启用写入阻塞,请使用启动 APIenableUserWriteBlocking 设置为 true。 同步开始后,无法启用写入阻塞。

如果要稍后使用反向同步,则必须在启动 mongosync 时启用写入(write)阻止。

要设置enableUserWriteBlockingmongosync用户必须具有包含setUserWriteBlockModebypassWriteBlockingMode ActionType 的角色。

注意

使用enableUserWriteBlocking时,仅对没有bypassWriteBlockingMode ActionType 的用户阻止写入。具有此 ActionType 的用户能够执行写入。

始终允许对源集群执行读取操作。

/progress 端点报告 canWritetrue 时,源集群和目标集群上的数据是一致的。

如需查看 mongosync 所处的状态,请调用 /progress API 端点。/progress 输出包括一个布尔值 canWrite

  • canWritetrue 时,可安全地写入目标集群。

  • canWritefalse 时,不向目标集群写入。

mongosync 在同步时,您可以安全地写入源集群。除非 canWritetrue,否则不要写入目标集群。

要停止同步,请在目标集群上使用commit命令来转换索引并完成更改。如果启用写入阻塞:

  • commit 阻止源集群上的写入。

  • commit 阻止对目标集群的写入,直到 mongosync 开始索引验证。

要监控 commit 进程,请使用 progress 命令:

  • canWrite 为 true 时,可对目标集群进行写入。

  • mongosync 进入 COMMITTED 状态时,索引转换完成。

默认情况下, mongosync将源集群上读取的读关注级别设置为"majority" 。对于目标集群上的写入, mongosync将写关注级别设置为"majority" ,其中j: true。

有关读关注和写关注配置及行为的更多信息,请参阅读关注写关注。

mongosync 连接到源集群时需要primary读取偏好。有关详细信息,请参阅读取偏好选项。

从1开始。 3 。 0 ,Cluster-to-Cluster Sync 支持固定大小集合,但有一些限制。

同步期间,源集群上的固定大小集合可正常工作。

同步期间,目标集群上的固定大小集合会出现临时更改:

  • 文档数量没有上限。

  • 最大集合大小为 1PB。

mongosync 在提交期间恢复最大文档数量和最大文档大小的原始值。

Cluster-to-Cluster Sync 不会将系统集合复制到目标集群。

如果您对源集群发出dropDatabase命令,此更改不会直接应用于目标集群。相反,Cluster-to-Cluster Sync 会删除目标集群上数据库中的用户集合和视图,但不会删除该数据库上的系统集合。

例如,在目标集群上:

  • 删除操作不会影响用户创建的system.js集合。

  • 如果启用分析,则保留system.profile集合。

  • 如果在源集群上创建视图,然后删除数据库,复制删除操作会删除视图,但会留下空的system.views集合。

在这些情况下,复制 dropDatabase 时会删除数据库中所有用户创建的集合,但会将其系统集合留在目标集群上。

mongosync 具有弹性,能够处理非致命错误。包含“错误”或“故障”字样的日志并不表明 mongosync 正在发生故障或损坏数据。例如,如果发生网络错误,mongosync 日志可能会包含“错误”字样,但 mongosync 仍能完成同步。如果同步未完成,mongosync 会写入一个致命错误日志条目。

mongosync 在目标集群上创建带有新 UUID 的集合。源集群和目标集群上的 UUID 之间没有关系。如果应用程序包含硬编码的 UUID(MongoDB 不建议这样做),则您可能需要更新这些应用程序,才能使它们与迁移的集群正常工作。

mongosync 以未定义的顺序在目标集群上插入文档,这不会保留源集群的自然排序顺序。如果应用程序依赖于文档顺序,但没有定义的排序方法,则您可能需要更新这些应用程序以指定预期的排序顺序,才能使应用程序与迁移的集群正常工作。

要将源集群同步到多个目标集群,请为每个目标集群使用一个mongosync实例。有关更多信息,请参阅多个集群限制。

  1. 部署源集群和目标集群。

  2. 初始化 Cluster-to-Cluster Sync:

    mongosync \
    --cluster0 "mongodb://192.0.2.10:27017,192.0.2.11:27017,192.0.2.12:27017" \
    --cluster1 "mongodb://192.0.2.20:27017,192.0.2.21:27017,192.0.2.22:27017"

    --cluster0--cluster1选项使用适当的连接字符串,以便它们可以连接到您的副本集。

  3. 要启动同步进程,请使用 HTTP 客户端(例如 cURL)将 start 命令发送到mongosync

    curl localhost:27182/api/v1/start -X POST \
    --data '{ "source": "cluster0", "destination": "cluster1" }'

    示例输出:

    { "success": true }
← 参考
配置 →