OPTIONS
翻译或纠错本页面

使用文件系统快照备份集群

概述

这篇文档描述了备份集群中所有组件的过程.使用文件系统的快照进行备份,在文件系统快照不可用时,可以使用 mongodump 备份二进制数据.参见 使用数据库导出备份集群 获得更多信息.

参见 MongoDB备份方案备份和恢复集群 以获得MongoDB中关于备份和一般情况下备份复制集的信息.

重要

要对集群进行精确的某个时间点的备份, 必须 停止集群中所有的写入.在一个运行的生产环境系统中,一般只能备份 近似 在某个时间点的数据.

过程

在这个过程中,你需要停止集群的均衡过程,并备份 config database, 之后使用文件系统快照工具备份每个分片的数据.如果需要精确的时间点的备份,需要在备份过程中停止集群的写入.否则,只能备份大致在时间点附近的数据.

使用每个分片的复制集中一个从节点进行近似在某个时间点附近的备份,可以在备份时对集群的性能影响最小.

  1. 关闭在 分片 间均衡数据的 balancer 过程.在 mongo 终端中使用 sh.stopBalancer() 进行终止.举例:

    use config
    sh.stopBalancer()
    

    参见 禁用均衡器 以获得更多信息.

    警告

    在备份时将均衡过程关掉是至关重要的.如果备份时均衡过程在运行,由于 数据块 可能会迁移,最后备份的数据中就可能有重复的数据或者遗漏的数据.

  2. 锁住每个分片的一个从节点,以在尽可能近似的时间点对集群进行备份.尽可能减少锁住 mongod 的时间.

    使用 mongo 连接到复制集的从节点,并使用 db.fsyncLock() 方法将其锁住.

  3. 备份一个 配置服务器 以备份集群的元信息.由于所有配置服务器存储的数据完全一样,所以只需要备份一台的数据即可.

    使用以下几个过程之一来备份配置服务器.

    • 参见 使用文件系统快照来备份及恢复 ,使用文件系统的快照对配置服务器进行备份.

      重要

      只有在配置服务器启用了 journaling 时才可用. 永远不要 在配置服务器上使用 db.fsyncLock() .

    • 使用 mongodump 备份配置服务器.可以通过任意一个配置服务器的 mongod 或通过 mongos 使用 mongodump .

      如果配置服务器使用的MongoDB版本大于等于2.4,可以在运行 mongodump 时添加 --oplog 选项,这样可以备份拷贝基础数据期间配置服务器的增量oplog,比如:

      mongodump --oplog --db config
      
  4. 备份被锁住的分片,可以并行的对每个分片进行备份.参见 使用文件系统快照来备份及恢复 获得更多信息.

  5. Unlock all locked replica set members of each shard using the db.fsyncUnlock() method in the mongo shell.

  6. 使用 sh.setBalancerState() 重新打开集群的均衡过程.

    使用以下流程使用 mongo shell 连接到 mongos :

    use config
    sh.setBalancerState(true)