我们有一个运行在AWS上的Web应用程序,具有以下架构:

  • 1个Elasticseach群集,带有2个数据节点
  • 1个自动扩展的Web服务器负载平衡群集

  • 当Elasticsearch进行一些巧妙的内部负载平衡时,我们可以将所有Web服务器指向一个数据节点。但这会造成单点故障-如果该节点发生故障,那么我将不会获得任何查询结果。

    到目前为止,我的解决方案是让Elasticsearch作为非数据节点在每个Web服务器上运行。每个Web服务器都查询其本地elasticsearch节点,该节点随后将请求转交给数据节点之一。这似乎是对elasticsearch website的建议方法

    这样做的好处是,如果其中一个数据节点以某种方式发生故障,我们将不会失去为搜索查询提供服务的能力。但是,这确实意味着Elasticsearch正在每个Web服务器上使用资源,并且如果我们迁移到使用Elastic Beantalk(我很想这样做),那么我们将需要一些如何在我们的Web实例上安装elasticsearch的方法。编辑:我现在已成功完成此操作,但尚未弄清楚如何为每个环境指定不同的配置。

    还有另一种方法可以避免在每个Web服务器上都没有运行Elasticsearch的情况下避免单点故障吗?

    我曾考虑过在数据节点之前使用负载平衡器来处理来自Web服务器的查询,但这也意味着在不设置VPC限制访问的情况下将群集开放给公共(public)访问。

    我缺少一个更简单的解决方案吗?

    最佳答案

    我认为这不能直接回答您的问题,但是如果您仍然可以在Web服务器节点上运行ES,则可以自定义使用.ebextensions mechanism安装的软件,该软件可以在运行时运行脚本和/或安装软件包。新的Elastic Beanstalk实例已启动。如果这还不够,您可以使用自定义AMI启动Elastic Beanstalk实例。

    另外,您可能不知道可以在VPC中运行Elastic Beanstalk。

    关于search - 通过Elasticsearch集群和Web服务器集群避免单点故障的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18784370/

    10-13 07:46
    查看更多