我们有一个在 AWS 上运行的 Web 应用程序,其架构如下:
- 1 个具有 2 个数据节点的 elasticseach 集群
- 1 个自动扩展负载平衡的 Web 服务器集群
由于 elasticsearch 做了一些巧妙的内部负载平衡,我们可以将所有 Web 服务器指向其中一个数据节点。但这会产生单点故障——如果该节点出现故障,那么我将不会得到任何查询结果。
到目前为止,我的解决方案是让 elasticsearch 在每个 Web 服务器上作为非数据节点运行。每个 Web 服务器查询其本地 elasticsearch 节点,该节点又将请求发送到数据节点之一。这似乎是弹性搜索网站上的建议方法
这很好,因为如果其中一个数据节点以某种方式发生故障,我们不会失去提供搜索查询的能力。但是,这确实意味着 elasticsearch 正在使用每个 Web 服务器上的资源,如果我们迁移到使用 elastic beanstalk(我很想这样做),那么我们将需要一些如何在我们的 Web 实例上安装 elasticsearch。编辑:我现在已经成功了,但还没有弄清楚如何为每个环境指定不同的配置。
是否有另一种方法可以避免单点故障,而无需在每个 Web 服务器上运行 elasticsearch?
我曾考虑在数据节点前使用负载均衡器来处理来自 Web 服务器的查询,但这也意味着将集群开放给公共访问,而无需设置 VPC 来限制访问。
我缺少一个更简单的解决方案吗?