如何根据负载在 kubernetes 中自动缩放 elasticsearch?
How to autoscale elastic search in kubernates based on load?
我正在使用 Google Cloud,我正在做 RnD 是否可以在 Kubernetes 中的 elasticsearch 上应用 HPA
(Horizontal Pod Auto scaling)。
我在 Kubernetes
上做了 elasticsearch
设置:https://github.com/elastic/helm-charts/tree/master/elasticsearch
但我在论坛上发现了一个 post,他们说 elasticsearch
HPA 很难
https://discuss.elastic.co/t/how-to-scale-up-and-down-nodes-automatically/224089/2
那么是否可以在 elasticsearch 上做 HPA
呢?
我认为它效果不佳,而且您有丢失数据的风险。 HPA 倾向于以一分钟左右的规模响应负载变化,并且偶尔会做出较大的变化(例如,从 5 个副本扩展到 2 个)。对于 Elasticsearch,您需要一次扩展一个节点,在继续之前监控集群的状态,并且可能需要很长时间才能从一个节点移动到下一个节点。
假设您是 StatefulSet 中的 运行 Elasticsearch。请记住,每个 ES 索引由 shards 组成;你将有一些分片副本分布在 ES 集群中的节点上。因此,假设您的索引有 10 个分片,每个分片有 2 个副本。
横向扩展很容易。随心所欲地增加 StatefulSet 的大小;配置每个节点以与 es-0
对话以进行发现。 ES 将看到集群已经增长并开始自行将分片移动到新节点。
缩小规模很难。您一次只能删除一个节点。一旦该节点关闭并且集群意识到它丢失了,那么曾经在该节点上的分片将被复制不足。 ES 将在剩余的节点上创建新的副本,并将分片数据复制到那里。您可以通过 /_cat/shards
API 之类的东西观察到这种情况的发生。只要有复制不足的分片,索引状态就会是“黄色”,然后在复制序列完成后切换回“绿色”。
假设你目前有 8 个节点,你想缩小到 6 个。有可能给定分片的只有两个副本在 es-6
和 es-7
上,所以你可以'把它们一起关掉;您必须先关闭 es-7
,等待复制赶上,然后关闭 es-6
。还有一种可能性是,当您关闭 es-7
时,新的副本将在注定的节点 es-6
.
上创建
您也可以 tell Elasticsearch to move shards off of a replica 在删除它之前。这避免了集群进入“黄色”状态,但更难监控。
最后,重新复制可能需要很长时间,具体取决于集群中实际有多少数据。 (在过去的集群中,我维护了一个设计糟糕的索引结构,关闭一个节点需要几个小时。)这比 HPA 准备的操作要慢得多。
我正在使用 Google Cloud,我正在做 RnD 是否可以在 Kubernetes 中的 elasticsearch 上应用 HPA
(Horizontal Pod Auto scaling)。
我在 Kubernetes
上做了 elasticsearch
设置:https://github.com/elastic/helm-charts/tree/master/elasticsearch
但我在论坛上发现了一个 post,他们说 elasticsearch
HPA 很难
https://discuss.elastic.co/t/how-to-scale-up-and-down-nodes-automatically/224089/2
那么是否可以在 elasticsearch 上做 HPA
呢?
我认为它效果不佳,而且您有丢失数据的风险。 HPA 倾向于以一分钟左右的规模响应负载变化,并且偶尔会做出较大的变化(例如,从 5 个副本扩展到 2 个)。对于 Elasticsearch,您需要一次扩展一个节点,在继续之前监控集群的状态,并且可能需要很长时间才能从一个节点移动到下一个节点。
假设您是 StatefulSet 中的 运行 Elasticsearch。请记住,每个 ES 索引由 shards 组成;你将有一些分片副本分布在 ES 集群中的节点上。因此,假设您的索引有 10 个分片,每个分片有 2 个副本。
横向扩展很容易。随心所欲地增加 StatefulSet 的大小;配置每个节点以与 es-0
对话以进行发现。 ES 将看到集群已经增长并开始自行将分片移动到新节点。
缩小规模很难。您一次只能删除一个节点。一旦该节点关闭并且集群意识到它丢失了,那么曾经在该节点上的分片将被复制不足。 ES 将在剩余的节点上创建新的副本,并将分片数据复制到那里。您可以通过 /_cat/shards
API 之类的东西观察到这种情况的发生。只要有复制不足的分片,索引状态就会是“黄色”,然后在复制序列完成后切换回“绿色”。
假设你目前有 8 个节点,你想缩小到 6 个。有可能给定分片的只有两个副本在 es-6
和 es-7
上,所以你可以'把它们一起关掉;您必须先关闭 es-7
,等待复制赶上,然后关闭 es-6
。还有一种可能性是,当您关闭 es-7
时,新的副本将在注定的节点 es-6
.
您也可以 tell Elasticsearch to move shards off of a replica 在删除它之前。这避免了集群进入“黄色”状态,但更难监控。
最后,重新复制可能需要很长时间,具体取决于集群中实际有多少数据。 (在过去的集群中,我维护了一个设计糟糕的索引结构,关闭一个节点需要几个小时。)这比 HPA 准备的操作要慢得多。