Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用elasticsearch群集和web服务器群集避免单点故障的最佳方法_Search_Amazon Web Services_Amazon Ec2_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Amazon Elastic Beanstalk - Fatal编程技术网 elasticsearch,amazon-elastic-beanstalk,Search,Amazon Web Services,Amazon Ec2,elasticsearch,Amazon Elastic Beanstalk" /> elasticsearch,amazon-elastic-beanstalk,Search,Amazon Web Services,Amazon Ec2,elasticsearch,Amazon Elastic Beanstalk" />

使用elasticsearch群集和web服务器群集避免单点故障的最佳方法

使用elasticsearch群集和web服务器群集避免单点故障的最佳方法,search,amazon-web-services,amazon-ec2,elasticsearch,amazon-elastic-beanstalk,Search,Amazon Web Services,Amazon Ec2,elasticsearch,Amazon Elastic Beanstalk,我们有一个在AWS上运行的web应用程序,其体系结构如下: 1个elasticseach群集,带有2个数据节点 1个自动扩展的web服务器负载平衡群集 当elasticsearch进行一些巧妙的内部负载平衡时,我们可以将所有web服务器指向其中一个数据节点。但这将创建一个单点故障-如果该节点发生故障,那么我将无法获得任何查询结果 到目前为止,我的解决方案是让elasticsearch作为非数据节点在每个web服务器上运行。每个web服务器查询其本地elasticsearch节点,该节点将请求

我们有一个在AWS上运行的web应用程序,其体系结构如下:

  • 1个elasticseach群集,带有2个数据节点
  • 1个自动扩展的web服务器负载平衡群集
当elasticsearch进行一些巧妙的内部负载平衡时,我们可以将所有web服务器指向其中一个数据节点。但这将创建一个单点故障-如果该节点发生故障,那么我将无法获得任何查询结果

到目前为止,我的解决方案是让elasticsearch作为非数据节点在每个web服务器上运行。每个web服务器查询其本地elasticsearch节点,该节点将请求转发给其中一个数据节点。这似乎是建议的解决方案

这很好,因为如果其中一个数据节点以某种方式出现故障,我们不会失去服务搜索查询的能力。然而,这确实意味着elasticsearch正在使用每个web服务器上的资源,如果我们迁移到使用elastic beanstalk(我很想这么做),那么我们需要了解如何在web实例上安装elasticsearch。编辑:我现在已经成功了,但是还没有弄清楚如何为每个环境指定不同的配置

是否有其他方法可以避免单点故障,而不必在每个web服务器上运行elasticsearch

我曾考虑在数据节点前面使用负载平衡器来处理来自web服务器的查询,但这也意味着在不设置VPC限制访问的情况下开放集群供公众访问


有没有我缺少的更简单的解决方案?

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


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

如果您有两个数据节点和一个副本,一个节点可能会停机,您仍然可以在不丢失文档的情况下提供查询服务。你的问题我遗漏了什么吗?你是对的。但是,如果不使用本地非数据节点,我将失去处理节点故障的内置能力。Ie我必须检测连接和切换到工作数据节点的故障。也许这没什么大不了的。它只是在最佳情况下,您的意思是希望将客户机节点用作某种负载平衡器?客户端库应该通过循环支持更多地址,如果第一个地址不起作用,希望可以回退到其他地址。有道理?是的,有道理。我们在symfony2 php应用程序中使用elasticsearch,不幸的是,它不支持指定多个连接。因此,对于实时环境,我们指定localhost,并让elasticsearch自己选择将查询发送到哪个数据节点。这是一个非常好的解决方案。我只是想知道我是否遗漏了另一个解决方案,它不涉及在每台web服务器上运行elasticsearch。我认为你应该在你的问题中添加这一棘手的部分,因为这会产生不同。您可以在elasticsearch(Nginx或Apache)前面使用负载平衡器,但您的问题与elasticsearch暴露于单点故障无关!谢谢你,肯。我已经设法使用.ebextensions路径安装了elasticsearch。我现在要讨论的是如何为每个环境指定不同的elasticsearch配置文件,即dev/staging/production这可能有助于您配置每个环境的设置: