Answers:
ReplicaSet将在这种情况下工作。但是,我无法确定在同一服务器上具有两个MongoDB实例是否是一个好主意-这取决于服务器的硬件/软件和负载。
为了确保您的backup
MongoDB节点不会成为主节点,请将其priority
参数设置为0
,例如
rs.add({_id: 1, host: "localhost:<port>", priority: 0})
注意:如果你不能有停机时间,你应该至少有2个主要的MongoDB节点ReplicaSet,请参阅文章
要考虑的一种策略是在副本集上的备份节点上使用“隐藏”选项。来自MongoDB博客:
隐藏的服务器不会出现在isMaster()结果中。这也意味着如果驱动程序自动将读取分发给从属,则将不会使用它们。隐藏的服务器必须具有0的优先级(您不能拥有隐藏的主服务器)。要添加隐藏成员,请运行:
rs.add({“ _ id”:num,“ host”:主机名,“ priority”:0,“ hidden”:true})
通常,首选副本集,但在这种情况下,也仅是因为它们具有自动恢复和自动重新同步功能。您所描述的备份方法听起来很合理,并且之前也已与其他数据库一起使用。
我看到的唯一潜在问题是,在某些情况下,您的辅助数据库可能会升级为主数据库,您要么a)需要从新的辅助数据库中获取备份,要么b)使备份脚本足够智能以告知该实例。 MongoDB辞职。
好消息是,对于
db.isMaster()
)rs.freeze()
and rs.stepDown()
命令说服备份实例退出或重新连接到辅助实例rs.status()
并循环通过result["members"]
),并连接到其中一个次要执行备份。