如何在Amazon EC2上使用自动扩展设置ElasticSearch集群?

Vic*_*nov 25 elasticsearch

关于在Amazon EC2上配置ES的ec2有一个很棒的教程弹性搜索.我研究了它并应用了所有建议.

现在我有了AMI,可以从这个AMI在集群中运行任意数量的节点.配置自动发现,节点按照实际应该加入群集.

问题是如何配置集群,我可以根据集群负载自动启动/终止节点?

例如,当我们没有任何负载且12个节点在峰值负载上运行时,我希望只有1个节点在运行.但是等等,如果我终止集群中的11个节点,那么分片和副本会发生什么?如果我终止12个节点中的11个节点,如何确保我不会丢失群集中的任何数据?

我可能想为此配置S3网关.但是除了本地之外的所有网关都被弃用了.

手册中有一篇关于分片分配的文章.可能是我遗漏了一些非常基本的东西但是我应该承认我没有弄清楚是否可以配置一个节点来始终保存所有分片副本.我的目标是确保如果这是集群中唯一运行的节点,我们仍然不会丢失任何数据.

我现在能想到的唯一解决方案是配置索引以包含12个分片和12个副本.然后,当最多启动12个节点时,每个节点都会有每个分片的副本.但是我不喜欢这个解决方案,因为如果我想在峰值负载上有超过12个节点,我将不得不重新配置集群.

Rot*_*mon 22

使用ElasticSearch进行自动缩放并没有多大意义.

碎片移动和重新分配不是一个轻松的过程,特别是如果你有大量的数据.它强调IO和网络,并且可能严重降低ElasticSearch的性能.(如果要限制效果,则应使用cluster.routing.allocation.cluster_concurrent_rebalance,indices.recovery.concurrent_streams,indices.recovery.max_size_per_sec等设置限制群集恢复.这将限制影响,但也会减慢重新平衡和复苏).

此外,如果您关心您的数据,您不希望只有1个节点.您需要复制数据,因此至少需要2个节点(如果您认为更高的复制级别更安全,则需要更多节点).

另一件需要记住的事情是,虽然您可以更改副本的数量,但您无法更改分片的数量.这是在创建索引时配置的,无法更改(如果需要更多分片,则需要创建另一个索引并重新索引所有数据).因此,您的分片数量应考虑数据大小和群集大小,考虑到您需要的节点数量较多,以及您的最小设置(可以使用较少的节点保存所有分片并提供估计的流量吗?).

因此,从理论上讲,如果您希望在低时间拥有2个节点并在峰值上拥有12个节点,则可以将索引设置为具有1个副本的6个分片.因此,在低频时,您有2个节点,每个节点可容纳6个分片,而在峰值时,您有12个节点,每个节点可容纳1个分片.

但同样,我强烈建议重新考虑这一点并测试碎片对集群性能的影响.

  • 如果你不能自动调整它并调整它是一项昂贵的操作,你想要一般避免,那么为什么他们称之为_elastic_ search? (6认同)
  • 除此之外,我建议我们使用AWS中的T2实例(尤其是新的较大实例大小)来托管ElasticSearch,这样在低时间内,积分会累积,而在高峰期,它们将会使用.这绕过了自动缩放/动态分片分配问题,同时产生了成本效益. (3认同)
  • 随着时间的推移,集群上的负载发生了很大的变化。有时我们每秒有 250 个请求,而在其他 20 小时内,我们每天有 0(零)个请求。这就是我们考虑配置自动缩放的原因。我喜欢你关于始终拥有 2 台服务器以及 6 个分片和 1 个副本的设置的想法。我们仍在研究和测试。我计划很快提供更多测试结果。谢谢你的建议。 (2认同)

小智 10

如果应用程序的弹性由变量查询加载驱动,则可以设置ES节点配置为不存储任何数据(node.data = false,http.enabled = true),然后将它们放入以进行自动缩放.这些节点可以从主数据节点卸载所有HTTP和结果混合处理(释放它们以进行更多索引和搜索).

由于这些节点没有分配给它们的分片,因此动态上下都不应该成为问题,自动发现应该允许它们加入集群.