繁体   English   中英

如何使用MongoDB配置副本集

[英]How to configure a replica set with MongoDB

我遇到了我无法解决的问题。 部分原因是我无法用正确的术语进行解释。 我对此很陌生,所以很抱歉这个笨拙的问题。

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

我想在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 }

我在这里做错了什么?

有任何想法吗 ?

您实际上可以按照MongoDB手册来设置副本集。 很清楚 以下是一些重要步骤,如下所述:

  1. 更改配置文件并添加以下行。请勿将其与主/从复制搞混,因为副本集旨在替代主/从复制。 因此,您可能需要从配置文件中删除那些与主/从相关的配置。

     replSet = [set name] 

    编辑replSet在mongoDB的最新版本中似乎不再存在,至少不再记录了 在我看来,以下似乎已经解决了问题。

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

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

     use local rs.initiate() 

而已。 你的布景很好。 如果您还有其他成员加入集合,则需要执行1/2步,然后转到主实例并键入:

rs.add("hostname:port")

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

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

请注意,这将导致服务器离线一段时间。 如果您在线上进行操作,请当心。

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

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

副本集是指一组mongodmongo节点,它们一起起作用,并且在数据方面都相互镜像。 有一个主节点,其他节点是辅助节点。 但是,这种选择是动态的。 并且写入主数据库的数据将异步复制到辅助数据库。 应用程序和驱动程序保持与主数据库的连接,并且将只能写入主数据库。 假设,如果小学选修失败,其中一名中学将进行选举以选举新的小学。 要选择一个新的主节点,我们必须拥有原始节点数的严格多数。 因此,由于此处的原始节点数为3 ,因此我们需要2个节点来选择一个新的主节点,这就是我们拥有的节点数。 因此,如果一个人失败了,那么其他任何人都可以成为主要人。 在这种情况下,该应用将通过驱动程序连接到主要权限。 全部透明。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM