我有一个专门的服务器,大约10GB的MongoDB数据库。 我需要做每日备份,但我不能停止与数据库。 是否有可能在单个磁盘上使用副本集(有两个在不同端口上运行的mongod实例),并简单地使第二个副本脱机并将数据文件备份到非现场存储(如S3(日志打开))? 或者使用主/从比副本更好?
这是否可行,如果是的话,我可能会遇到什么样的问题? 如果没有,我怎么概念化这个工作?
副本集将在这种情况下工作。 然而,我不知道在同一台服务器上是否有两个MongoDB实例是一个好主意 – 这取决于服务器硬件/软件和负载。
为了确保您的backup MongoDB节点不成为主节点,请将其priority参数设置为0 ,例如
rs.add({_id: 1, host: "localhost:<port>", priority: 0})
注意 :如果你不能停机,你应该在ReplicaSet中至less有2个主要的MongoDB节点,参见文章
要考虑的一个策略是使用复制集上的备份节点上的“隐藏”选项。 从MongoDB博客:
隐藏的服务器不会出现在isMaster()结果中。 这也意味着如果驱动程序自动将读取分配给从机,则不会使用它们。 一个隐藏的服务器必须有一个优先级为0(你不能有一个隐藏的主)。 要添加隐藏的成员,请运行:
rs.add({“_ id”:num,“host”:主机名,“priority”:0,“hidden”:true})
一般情况下,副本集是首选,但在这种情况下,仅仅是因为其自动恢复和自动重新同步function。 您所描述的备份方法听起来非常合理,并且之前也已经用于其他数据库。
我看到的唯一潜在的问题是,在某些情况下,您的辅助人员可能被提升为您的主要人员,您需要a)需要从新的辅助人员进行备份,或者b)使您的备份脚本足够聪明, MongoDB下台。
好消息是,这应该是相当微不足道的
db.isMaster() ) rs.freeze()和rs.stepDown()命令rs.stepDown() 或重新连接到次级