我们在生产环境中使用MongoDB,现在,由于当前服务器的一些问题,我将更改服务器并启动一个新的MongoDB实例。
我们有一个副本集和一个mongod
实例(两个不同的MongoDB网络用于不同目的)。现在,首先我应该将单个mongod
实例迁移,然后将整个副本集迁移到新服务器。
我想知道的是,如何在没有停机的情况下迁移这两个实例?我不想关闭服务器或停止写操作。
提前致谢。
答案 0 :(得分:10)
首先,您永远不应该将mongodb作为单个实例进行生产。至少应该有1个主要,1个次要和1个仲裁。
其次,即使使用副本设置,当您切换原色时也总会有一些写入停机时间,因为在选举过程中无法进行写入。来自文档:
重要选举选举对于a的独立运作至关重要 副本集;但是,选举需要时间才能完成。而一个 选举正在进行中,副本集没有主要而不能 接受写作。除非必要,否则MongoDB会避免选举。
例如,当您将主要设备移至新服务器或虚拟实例或升级数据库版本(例如从2.4升级到2.6)时,将会发生选举。
通过设置适当的选项以允许查询针对辅助副本运行,您可以使用现有副本集将停机时间降至最低。再次来自文档:
在故障转移期间维护可用性。使用primaryPreferred if 您希望应用程序在正常情况下从主数据库中读取 情况,但允许来自二级的陈旧读取 紧急情况。这为您的应用程序提供了“只读模式” 在故障转移期间。
这至少可以处理读取。写入最好通过让您的应用程序重试失败写入或排队。
关于您的独立版本,转换为副本集的文档化程序经过了充分测试,可以非常快速地完成并且停机时间最短:
http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/
答案 1 :(得分:2)
副本集是Mongodb数据库提供的功能,用于实现高可用性和自动故障转移。
它有点传统的主从配置,但具有自动故障转移功能。
它基本上是mongod实例的组/集群,它们相互通信,相互复制以提供高可用性并进行自动故障转移
基本上,在副本集中最少有2个,最多可以存在12个mongod实例
在副本集中存在以下类型的服务器。总而言之,一台服务器始终是主要服务器。
http://blog.ajduke.in/2013/05/31/setup-mongodb-replica-set-in-4-steps/
答案 2 :(得分:2)
你不能没有停机时间(一个新的mongod将在新IP上运行,所以你至少需要连接它)。但是,您可以通过制作地理位置分散的副本集来最大限度地减少停机时间。
请阅读 http://docs.mongodb.org/manual/tutorial/deploy-geographically-distributed-replica-set/
使用给定的流程但请注意:
注意:到目前为止我还没有做同样的事情。我曾经计划过一次,但后来我遇到了问题,而不是主机提供商。实际上你可能会遇到一些问题。
答案 3 :(得分:1)
John回答是对的,顺便说一下,你无法避免停机,你可以尽量缩短停机时间。
如果您有大量数据,可以使用不同的方法在副本集上添加隐藏的辅助成员,这样您就可以在停止生产服务器之前等待它是最新的。基本上对于副本集,您有很多方法来处理迁移,而单个实例则没有这样的功能。