如何使用MongoDB配置副本集

时间:2014-04-22 04:48:31

标签: mongodb replication

我遇到了无法解决的问题。部分是因为我无法用正确的术语来解释它。我很陌生,对这个笨拙的问题感到抱歉。

您可以在下面看到我的目标概述。

我希望在MongoDB中为我尝试配置复制集

use local
db.dropDatabase()

config = { _id: "rs0", members:[
{_id: 0, host: 'localhost:27017'}]
}

rs.initiate(config)

我希望每件事情都是正确的,但这里显示以下错误消息

{ "errmsg" : "server is not running with --replSet", "ok" : 0 }

我在这里做错了什么?

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

您实际上可以按照MongoDB Manual设置副本集。很清楚。 以下是一些关键步骤:

  1. 更改配置文件并添加以下行。不要将主/从复制搞乱,因为副本集旨在替代主/从复制。因此,您可能希望从配置文件中删除这些主/从相关配置。

    replSet = [set name]
    

    编辑:在最新版本的mongoDB中,replSet似乎不再存在,至少它是 no longer documented 。以下似乎已经完成了我的案例。

    replication: 
      replSetName: "smm"
    
  2. 重新启动您的mongod实例:

    systemctl restart mongodb
    // or
    service mongod restart
    
  3. 转到本地数据库并启动副本集。不要将任何东西传递给启动函数,mongodb会很好地处理所有事情。请注意,它将使用您的主机名作为当前实例的名称,因为我知道它并不那么容易更改。因此,您可能需要先更改主机名。

    use local
    rs.initiate()
    
  4. 那就是它。你的套装很棒。如果您有其他成员加入该集,则需要执行1/2步骤,然后转到主实例并键入:

    rs.add("hostname:port")
    

    仅当您想要更改副本集的配置时,是否需要输入:

    var conf = rs.conf();
    // change your conf here
    rs.reconfig(conf);
    

    请注意,这会导致服务器脱机一点时间。如果你在网上做,请小心。

答案 1 :(得分:1)

我希望在MongoDB中讨论复制和副本集的概念。

  

我们如何获得可用性和容错?我们的意思是,如果该节点发生故障,我们仍然希望能够使用该系统。如果主节点出现故障并且由于某种原因我们完全失去了它,那么假设备份之间丢失或硬件损坏导致系统无法使用。因此,我们要解决这两个问题的方法是引入复制

副本集指的是一组mongodmongo个节点,它们共同作用,并且在数据方面彼此镜像。有一个主节点,其他节点是辅助节点。但是,这种选择是动态的。写入主数据库的数据将异步复制到辅助数据库。应用程序和驱动程序保持连接到主要和将,并且只能写入主要。比如,如果主要人员失败,其中一个辅助人员将进行选举以选出新的主要人员。要选择新的主要节点,我们必须拥有原始节点数的绝大部分。因此,由于此处的原始节点数 3 ,我们需要 2 节点来选择新的主节点,这就是我们拥有的数量。所以,如果一个人失败了,那么其他任何人都可以成为主要的。在这种情况下,应用程序将通过驱动程序连接到主要权限。一切都透明。

稍后如果关闭服务器启动,它将把副本集作为辅助服务器加入。并且最小节点数 3 - 因为如果我们小于3,那么剩下的将不是原始集的大部分。因此,没有办法选出新的小学。所以,我们没有主要的,这意味着我们不能再获得权利。