首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-3

使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-3

备份过程和脚本现在我们已经有一个全面设置的 MongoDB 数据库,可以开始备份了。我们选择使用 LVM                快照来获得系统的时间点备份的主要原因之一是,如果没有完全关闭每个 MongoDB 备份实例,则无法保证能够得到完美的时间点备份。MongoDB 方法                    fsynclock()可用于停止针对数据库的写入操作,但事实证明,MongoDB 中的                fsynclock() 方法无法保证它的存储引擎 WiredTiger                会实际停止写入。因为这会导致数据完整性问题,所以我们使用了 LVM                快照。实际上,这会让备份过程变得更简单,而且我们剩下的唯一问题是停止平衡器,尝试让 IBM Spectrum Protect 代理同步执行备份。
部分需要脚本化的工作包括停止平衡器。此平衡器是锁定机制,它管理 MongoDB 集群中的分片间的数据重新分布。例如,如果按 Last Name                字段对某个集合进行了分片,那么两个分片之间的拆分位置可能是字母“L”。如果 MongoDB                注意到“A-L”分片中的条目比“M-Z”分片中的条目明显多得多,它可能将拆分点从“L”更改为“K”。在本例中,所有包含以“L”开头的姓氏的数据都会从分片                1 转移到分片                2。明智的做法是关闭平衡器,因为您不想让平衡器在备份过程中转移数据。新数据仍将基于其分片键而存放在正确的分片中,但分片点在平衡器关闭时不会更改。这意味着在平衡器关闭时,MongoDB                仍能接受新的写入和读取操作。
如果从分片键的一部分中流入大量数据,数据可能在此期间变得不平衡。要减少这种不平衡,可以使用更复杂的分片键,比如井号键,或者按不同的值进行分片。无论如何,MongoDB                都会在重新启用平衡器后重新平衡自身。必须注意的是,平衡器需要处于停止并禁用的状态,而不仅仅是其中一个状态。可能会遇到平衡器卡顿的问题。我们发现,处理此问题的最佳方法是,找到导致问题的                mongos 实例并将它软关闭。可通过以下过程完成此操作:
  • 通过 MongoDB shell 连接到一个 mongos                    实例。
    mongo ipaddr:27017
  • 进入 MongoDB shell                    中后,您可能想要使用配置数据库。然后,查看数据库的状态
    use config sh.status()
  • 在输出数据顶部附近,有一个名为 balancer 的字段。该数据如下所示:
    balancer:
        Currently enabled: yes
               Currently running: yes
    Balancer lock taken at Sat Jul 08 2017 16:18:45 GMT-0400 (EDT) by ltmngo10:27017:1444334119:1804289383:Balancer:846930886
            Failed balancer rounds in last 5 attempts: 0
            Migration Results for the last 24 hours:
                    No recent migrations




  • 该数据会告诉您平衡器是否已启用,是否正在运行,以及是何时启动的。平衡器可能已禁用,但仍在运行,因为禁用平衡器不会停止正在运行的进程,只会等待它们停止运行。为此,请运行以下命令:
                                                    sh.setBalancerState(false)
  • 可以再次检查并查看平衡器何时停止运行,以便开始备份流程。如果平衡器没有停止运行,而且上述代码中的锁定开始时间是在几个小时以前,您可能需要手动修复此问题。
  • 首先,尝试使用以下命令让 MongoDB 执行处理:
    sh.stopBalancer()
    • 这会实时提示您有哪些活动进程,以便关闭平衡器。
  • 根据我们的经验,如果此方法不起作用,您将需要关闭持有锁的服务器。在上述状态中,列出了持有锁的服务器。该服务器应该是一个可以安全地关闭并恢复运行的                    mongos 服务器,且不会引起严重的后果。在 Bash shell 中,运行:
    ps aux | grep mongos
    • 这会向您提供需要结束的 mongos 实例的 PID。
      kill xxxxx
    • 这会结束您指定的 ID 编号为 xxxxx 的进程。
    • 让该进程重新上线,留出一定的时间让锁超时(至多 15 - 30 分钟),然后再次尝试。默认超时时间应为 900,000                            毫秒或约 5 分钟。
  • 平衡器停止后,mongos 数据服务器就做好备份准备了,但配置服务器尚未做好准备。
    • 要获得干净的配置服务器备份,需要完全关闭一个配置服务器。我们这么做是因为完全关闭该服务器可以保证不会对该配置执行读或写操作,而且我们拥有一个真正的时间点备份。另一个好处是,配置服务器不会尝试执行任何数据块迁移,或者不会允许在一个服务器关闭时执行任何类型的配置更改,从而确保备份能顺利进行。
    • 实现此目标的方法是,使用命令 service mongos stop 停止期望的备份设备上正在运行的                            mongod 服务:。
    • 现在我们已准备好启动 IBM Spectrum Protect 备份流程。
返回列表