2012-11-15 67 views
1

我想了解MongoDB中副本集的概念。mongoDB复制集

以2个mongoDB实例A(primary)和B(secondary)为例。

如果我的客户正在愉快地查询A我明白写入被复制到B但是如果服务器A变得不可访问会发生什么?

虽然就mongo复制而言,我可以看到B被选为新的主节点,客户如何知道现在将其查询传送给B而不是A?这一切都是在内部完成mongo?

我问,因为我的客户的配置有一个uri指向A,但没有为B.是否正确?

回答

3

以2个mongoDB实例A(primary)和B(secondary)为例。

您不应该使用两个实例作为副本集的一部分。你应该有一个arbiter或另一个中学,以便选举可以发生。

请参阅here获取细节,here获取复制基础知识,here获取关于选举的信息。

如果我的客户在快乐地查询我的理解是写入得到复制到B,但如果一个服务器变得不可访问,会发生什么?

服务应该failover与服务器B成为主节点。但是,有两个实例,服务器B将无法选择自己为主,因为没有多数。

虽然在蒙戈复制的方面,我可以看到,B获得当选为新的主,如何在客户端知道现在渠道的查询B和不成?这一切都是在内部完成mongo?

这为驾驶员意识到副本集配置通常通过驾驶员执行。有关驱动程序文档,请参阅here(取决于您使用的驱动程序)。

+0

感谢您的回复。关于偶数个mongo实例的好处 - 我错过了,但它在提供的gotchas链接中提到。我正在使用C#驱动程序http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial。我看到它提到了在连接字符串中指定多个服务器。如果所有的服务器都是同一个集合的一部分(并且你在连接字符串中指定了replicaSet的名字),这听起来不是必要的 - 那么为什么你会提供多个服务器呢? – obaylis

+0

我并不是C#驱动程序中的专家,但我强烈建议您按照相应的文档。球队里的球员都很彻底。 –

+0

我会试试看。谢谢你的帮助。 – obaylis