如何根据负载在 kubernates 中自动缩放弹性搜索?

Dev*_*esk 1 elasticsearch autoscaling kubernetes

我正在使用谷歌云,我正在研究我们是否可以在 Kubernetes 的 elasticsearch 上应用HPA(水平 Pod 自动缩放)。

我确实elasticsearch设置了Kuberneteshttps : //github.com/elastic/helm-charts/tree/master/elasticsearch

但是我在论坛上找到了一篇他们说elasticsearchHPA 很难的帖子

https://discuss.elastic.co/t/how-to-scale-up-and-down-nodes-automatically/224089/2

那么是否可以HPA在 elasticsearch上做?

Dav*_*aze 5

我认为它不会很好地工作,并且您有丢失数据的风险。HPA 倾向于在大约一分钟的范围内响应负载变化,并且偶尔会进行大的更改(例如从 5 个副本扩展到 2 个)。对于 Elasticsearch,您需要一次扩展一个节点,在继续之前监控集群的状态,并且可能需要很长时间才能从一个节点移动到下一个节点。


假设您在 StatefulSet 中运行 Elasticsearch。请记住,每个 ES 索引都是由分片组成的;您将有一定数量的分片副本分布在 ES 集群中的节点上。因此,假设您的索引有 10 个分片,每个分片有 2 个副本。

扩展很容易。根据需要增加 StatefulSet 的大小;配置要与之对话以es-0进行发现的每个节点。ES 将看到集群已经增长并开始自行将分片移动到新节点。

扩大规模很难。一次只能删除一个节点。一旦该节点关闭并且集群意识到它丢失了,那么曾经在该节点上的分片将复制不足。ES 将在剩余节点上创建新副本并将分片数据复制到那里。您可以通过/_cat/shardsAPI 之类的东西观察这种情况。只要有复制不足的分片,索引状态就会为“黄色”,然后在复制序列完成后切换回“绿色”。

因此,假设您目前有 8 个节点,并且您想缩减到 6 个。给定分片的唯一两个副本可能会打开es-6es-7因此您不能同时关闭它们;你必须先关闭es-7,等待复制赶上,然后关闭es-6。还有一些可能性,当您关闭时es-7,新副本将在注定失败的节点上创建es-6

您还可以告诉 Elasticsearch在删除副本之前将分片从副本中移出。这避免了集群进入“黄色”状态,但更难监控。

最后,重新复制可能需要很长时间,具体取决于集群中实际有多少数据。(在过去的一个集群中,我维护的索引结构设计得很糟糕,关闭一个节点需要几个小时。)这比 HPA 准备的操作慢得多。