【问题标题】:How many Replicate set should we create in MongoDB and ElasticSearch?我们应该在 MongoDB 和 ElasticSearch 中创建多少个 Replicate 集?
【发布时间】:2014-01-22 16:01:03
【问题描述】:

我正在使用 MongoDB 原则将 ElasticSearch 与我的 symfony2 应用程序集成。
在这个 tutorial 中,它说我需要将我的独立实例转换为复制集
基本概念是这样的:应用程序向MongoDB主服务器查询数据,搜索功能需要向从服务器查询。 我的复制集配置如下:

{
    "_id" : "rs0",
    "version" : 1,
    "members" : [
            {
                    "_id" : 0,
                    "host" : "localhost:27017"
            }
    ]

} 我认为这是主服务器,我的问题是我需要创建另一个服务器吗?如果是,如何创建第二个复制服务器?
坦克很多!

【问题讨论】:

  • 那是纯技术问题,你能回答关于算法的问题吗?我什至需要创建另一个复制集吗?
  • 教程说你必须这样做,那为什么会出错。创建第二个(和第三个)副本服务器只是意味着创建第二个(和第三个)mongo 实例并将它们组合到一个副本集。

标签: mongodb symfony replicate


【解决方案1】:

根据您链接的教程,为了使 ElasticSearch River 工作,您需要将 MongoDB 配置为副本集。在副本集配置中,每个节点都有一个操作日志(oplog),它是已应用的所有操作(插入、更新、删除)的日志。可以使用tailable cursor 读取 oplog,以启用 ElasticSearch River 或 MMS 备份等功能。

我的问题是我需要创建另一个服务器吗?

从技术上讲,副本集可以配置为单个节点(您已经这样做了)。推荐的最佳实践是具有至少三个节点(一个主节点、一个辅助节点和一个仲裁器或一个主节点和两个辅助节点)的副本集,这将提供高可用性和数据的额外好处冗余。有关详细信息,请参阅 MongoDB 手册中的Replica Set Introduction

搜索功能需要查询辅助服务器进行搜索。

默认情况下,MongoDB 驱动程序将所有写入和读取请求定向到为读取数据提供强一致性的主数据库。如果您从辅助设备读取,则数据最终是一致的。这意味着如果从主节点到辅助节点有任何复制延迟,您可能会从辅助节点读取较旧的数据。

通常不建议在辅助节点上执行查询。在您的场景中,如果两台机器都已满负荷使用,并且您遇到故障或需要关闭机器,那么您将没有足够的资源来为应用程序提供服务并执行搜索。您应该计划让您的主节点有足够的资源来执行这两个功能。

至于将独立服务器迁移到副本集,您可以按照教程中描述的步骤进行操作:Convert a Standalone to a Replica Set

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多