如何在不重新启动进程的情况下更改 MongoDB 集群中的主服务器?

如何在不重新启动进程的情况下更改 MongoDB 集群中的主服务器?

阅读 MongoDB 的文档,了解如何配置集群的主从配置(我们的集群将有超过 12 个节点,因此不幸的是我们不能有副本集配置),如何在不停止任何进程的情况下将从属服务器提升为主服务器?

有没有什么命令我们可以使用,比如 Redis 的 slaveof 命令,它允许我们将从属服务器提升为主服务器,而无需重新启动该进程?

这是我们在 MongoDB 文档中发现的(http://docs.mongodb.org/manual/core/master-slave/):

要从不可用或损坏的主服务器(以下示例中的 A)永久故障转移到从服务器(B):

关闭 A。停止 B 上的 mongod。备份并从 dbpath 中移动 B 上所有以 local 开头的数据文件。警告删除 local.* 是不可撤销的,无法撤消。执行此步骤时要极其谨慎。使用 --master 选项重新启动 B 上的 mongod。注意这是一次性操作,不可逆。在完成完全重新同步之前,A 不能成为 B 的从属。

这真是唯一的办法吗?

答案1

对系统管理员答案的附录,以澄清评论中的问题:

不,目前(截至 2.4)副本集无法超过 12 个节点。您可以考虑使用Mongo 连接器拥有多个集合是一种可能的解决方案。连接器允许您在另一个集合中重放一个集合中的操作,本质上是通过跟踪 oplog(这是复制的一般工作方式)。但是,这意味着解决集群之间的任何同步问题都不会是自动的,本质上取决于您。

作为参考,投票/关注增加 12 个节点限制的相关问题是服务器-3110- 目前计划发布 2.5.x 版本(当前不稳定的开发分支),但与所有此类事物一样,在提交并发布稳定版本之前,您无法确定它何时会完成。

答案2

是的,这确实是切换角色的方法。主/从模式被弃用,而采用副本集是有原因的。在主从文档中他们提供了一种使用副本集和两个节点模拟主/从行为的方法。如果您以这种方式进行设置,则可以通过 Mongo 控制台中的简单命令获得模式的热插拔。

{ _id : 'replSet', members : [ { _id : 0, host : "mongomaster", priority : 0},
                               { _id : 1, host : "mongoslave", priority : 1 } ]
}

这将为您提供角色交换。您告诉副本集交换哪些服务器充当主服务器,哪些服务器充当辅助服务器。

相关内容