【问题标题】:mongoDB replica setmongoDB 副本集
【发布时间】:2012-11-15 10:20:17
【问题描述】:

我正在尝试理解 MongoDB 中副本集的概念。

以 2 个 mongoDB 实例 A(主要)和 B(次要)为例。

如果我的客户很高兴地查询 A,我知道写入会复制到 B,但是如果服务器 A 变得不可访问会发生什么?

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

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

【问题讨论】:

    标签: mongodb replication


    【解决方案1】:

    以 2 个 mongoDB 实例 A(主要)和 B(次要)为例。

    您不应将两个实例用作副本集的一部分。您应该有一个arbiter 或另一个二级,以便可以进行选举。

    请参阅here 了解问题,here 了解复制基础知识,here 了解有关选举的信息。

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

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

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

    这通常通过驱动程序执行,因为驱动程序知道副本集配置。请参阅here 获取相关驱动程序文档(取决于您使用的驱动程序)。

    【讨论】:

    • 感谢您的回复。关于偶数个 mongo 实例的好点 - 我错过了,但它在提供的 gotchas 链接中提到。我正在使用 c# 驱动程序mongodb.org/display/DOCS/CSharp+Driver+Tutorial。我看到它提到在连接字符串中指定多个服务器。如果所有服务器都属于同一个集合(并且您在连接字符串中指定了副本集的名称),这听起来似乎没有必要 - 那么为什么要提供多个服务器呢?
    • 我不是 C# 驱动程序方面的专家,但我强烈建议您遵循那里的文档。那里的团队成员很周到。
    • 我试试看。感谢您的帮助。
    • 客户端可以通过应用程序中指定的read preference知道如何查询。请参考此链接docs.mongodb.org/manual/core/read-preference
    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多