2

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

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

由于 elasticsearch 做了一些巧妙的内部负载平衡,我们可以将所有 Web 服务器指向其中一个数据节点。但这会产生单点故障——如果该节点出现故障,那么我将不会得到任何查询结果。

到目前为止,我的解决方案是让 elasticsearch 在每个 Web 服务器上作为非数据节点运行。每个 Web 服务器查询其本地 elasticsearch 节点,该节点又将请求发送到数据节点之一。这似乎是弹性搜索网站上的建议方法

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

是否有另一种方法可以避免单点故障,而无需在每个 Web 服务器上运行 elasticsearch?

我曾考虑在数据节点前使用负载均衡器来处理来自 Web 服务器的查询,但这也意味着将集群开放给公共访问,而无需设置 VPC 来限制访问。

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

4

1 回答 1

0

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

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

于 2013-09-18T04:13:00.267 回答