Elasticsearch集群负载均衡最佳实践

Elasticsearch cluster load balancing best practices

我想了解我是否需要将负载均衡器作为 Elasticsearch 部署的一部分,或者将其视为一种好的做法。

据我了解,Elasticsearch 的高级休息客户端和传输客户端可以管理节点之间的负载平衡。所以客户端需要以逗号分隔的端点列表,仅此而已。

中间还有负载均衡器有什么意义吗? 对于哪种情况它可能有用? 每种方法的优缺点?

答案取决于您的体系结构和您的要求。您是否需要负载均衡器来实现高可用性?还是为了性能reasons/scalability?或者两者兼而有之?

与许多其他分布式系统一样,Elasticsearch 具有自己的协议和语义,可以跨多个节点分配负载并管理故障转移。

您可以使用这些语义来配置节点,使节点可以仅执行协调器的角色——有效地充当搜索请求或批量索引请求等繁重操作的负载平衡器。

Elasticsearch 也有自己的内置协议,用于在发生故障时选择新的主节点——再次有效地发挥负载均衡器的作用。

总的来说,我建议您使用原生功能来实现您的目标,而不是通过在它前面引入另一种技术来增加复杂性。

如果您希望集群稳定 URL,请配置您的 DNS 服务器以实现该目标。云提供商管理的集群应该已经有这样的功能,否则你可以通过一些努力来配置它。

通常 ES 集群中的外部负载均衡器不是很常见,也不是必需的,因为 Elasticsearch 已经做了负载均衡,默认情况下 ES 集群中的所有数据节点都充当 co-ordinating role 但是如果你想改进性能你也可以有专门的协调节点。

如果你的目标是拥有一个智能负载平衡来提高性能,而不是在 ES 6.X 或更高版本上(默认情况下在 7.X 上打开),你可以从使用 Adaptive replica selection.

不做任何外部配置的盒子

拥有另一个负载均衡器意味着在您的请求到达 ES 之前需要额外的配置和另一层,因此恕我直言,使用它没有任何意义。