【问题标题】:simple Solr deployment with two servers for redundancy具有两台服务器的简单 Solr 部署以实现冗余
【发布时间】:2012-03-04 14:23:40
【问题描述】:

我正在两个冗余 Tomcat 6 服务器中部署 Apache Solr Web 应用程序, 提供冗余和改进的可用性。在这一点上,可扩展性不是问题。

我有一个负载平衡器,可以将流量动态路由到一台服务器或另一台服务器或两者。

我知道 Solr 支持主/从配置,但是如果从属设备在主设备中断期间接收到更新(在我的用例中是这样),则需要手动恢复。

我正在考虑使用重新加载核心功能的更简单方法: - 两台服务器中只有一台在任何时候都在接收流量(“活动”实例),但两者都在运行, - 两个实例共享相同的索引数据并且 - 在由于中断重新路由流量之前,现在活动的实例被告知重新加载索引核心

通过索引读取和写入对故障转移进行的有限测试已成功。我遗漏了哪些影响/问题?

欢迎您的想法和意见。

【问题讨论】:

  • 澄清一下,两个 Tomcat 是否都运行在同一个硬件服务器上?如果不是,那么它们如何共享索引数据?
  • 好问题:他们共享一个 NAS 或其他设备来存储索引数据。

标签: solr search-engine


【解决方案1】:

您考虑的简单冗余方法似乎是合理的,但您无法将其用于灾难恢复,除非您可以使用 NAS/SAN 将数据/索引共享到/来自不同的物理位置。

以下是一些建议:-

  1. 为灾难恢复进行备份并测试这些备份的工作情况,因为在 SOLR/Lucene 内部没有发生校验和,因此可以想象索引可能已损坏。索引可能会被擦除,或者某些记录可能会在您不知情的情况下被删除和合并,如果您需要进行调查,备份对于稍后恢复这些记录/文档很有用。

  2. 在您将流量重新路由到第二个实例之前,我会运行一些查询来加载缓存,并在当前索引上线之前测试和确认它是否正常工作。

  3. 将更新隔离到一个位置和进程和线程,以确保在发生切换时事务的完整性,因为 SOLR 不像某些数据库那样使用矢量时钟来同步更新,因此可能难以管理一致性。我个人会将所有更新的副本与 SOLR 分开保存在其他商店中,以防需要重复一个小的时间窗口。

总的来说,只要您不使用尖端功能和插件,我对 SOLR 的体验就非常好。我有一个实例,目前有 4000 万个文档,正常运行时间超过一年,没有任何问题。这并不意味着您不会遇到问题,而是让您了解它的稳定性。

【讨论】:

    【解决方案2】:

    我对 Solr 几乎一无所知,因此我不知道使用这种设置需要考虑的一些问题的答案,但我可以提供一些供考虑的问题。您必须考虑要防止哪些类型的故障以及原因,并据此做出决定。毕竟,没有完美的系统。

    两个实例都使用相同的文件。如果文件由于某种原因(硬件故障、软件错误)损坏或不可用,第二个实例将与第一个实例一样失败。

    类似地,文件的存储和访问方式是否在非活动实例读取它们时始终有效?当活动实例正在写入文件时,非活动实例会尝试读取文件吗?如果发生了会发生什么?如果活动实例在写入索引文件时中断(断电、网络中断、磁盘已满),当非活动实例尝试加载它们时会发生什么?如果“非活动”实例将要写入文件,则相同的问题反过来适用(如果设计时没有考虑到这种用途,这并不是特别不可能;例如,它可能会更新某种空闲统计信息) .

    此外,重新加载索引听起来可能是一个相当耗时的操作,并且在此过程中服务将不可用。

    如果活动实例需要在非活动实例加载索引之前完成有序关闭(可能是由于上述文件有效性问题),这也可能很耗时并导致不可用。如果活动实例无法完成有序关闭,那你的日子会很糟糕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多