使用elasticsearch群集和web服务器群集避免单点故障的最佳方法
我们有一个在AWS上运行的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节点,该节点将请求
- 1个elasticseach群集,带有2个数据节点
- 1个自动扩展的web服务器负载平衡群集
有没有我缺少的更简单的解决方案?我认为这并不能直接回答您的问题,但如果您仍然可以在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这可能有助于您配置每个环境的设置: