Elasticsearch负载均衡策略发生死锁解决方案
  FlJpWMh2LSTP 2023年11月02日 34 0


Elasticsearch负载均衡策略发生死锁解决方案

  • ​​一、问题描述与解决方案​​
  • ​​1、问题产生的背景​​
  • ​​2、解决方案​​
  • ​​二、集群分片分配时的相关设置(译文)​​
  • ​​集群分片分配​​
  • ​​分片分配设置​​
  • ​​分片重新平衡分配设置​​
  • ​​启发式分片平衡分配​​

一、问题描述与解决方案

1、问题产生的背景

es集群版本:elasticsearch-5.5.3

HEAD插件索引集群显示(red/yellow)。四个节点的集群,索引有大量写入,同时有大量删除操作,删除操作是在单个index(mapping分片数量为4)中执行delete_by_query接口后台执行task的方式实现。集群在负载均衡的时候有线程死锁了,导致分片未分配成功SHARD UNASSINGED。

报错信息:

Elasticsearch负载均衡策略发生死锁解决方案_默认值

reached the limit of outgoing shard recoveries [%d] on the node [%s] which holds the primary,cluser setting [cluster.routing.allocation.node_concurrent_outgoing_recoveries=2]

2、解决方案

在集群设置cluster.routing.allocation.node_concurrent_recoveries这个参数,大于最大分片数量。此参数默认值为2。

Elasticsearch负载均衡策略发生死锁解决方案_浮点数_02

二、集群分片分配时的相关设置(译文)

集群分片分配

分片分配是将分片分配给节点的过程。这可能发生在初始恢复、副本分配、重新平衡期间(分片均衡分配),或者在添加或删除节点时。

分片分配设置

下面的动态设置可以控制分片的分配和恢复:

1.cluster.routing.allocation.enable

为特定类型的分片启用或者禁用分配:

  • all-(默认设置)允许所有类型的分片分配。
  • primaries-仅仅允许主分片分配
  • new_primaries-仅允许新索引的主分片进行分片分配。
  • none-任何索引都不允许任何类型的分片分配。

2.cluster.routing.allocation.node_concurrent_incoming_recoveries

允许在一个节点上发生多少个并发的传入分片恢复。传入恢复是在节点上分配目标分片(很可能是复制,除非正在重新定位碎片)的恢复。默认为2。

3.cluster.routing.allocation.node_concurrent_outgoing_recoveries

允许在一个节点上执行多少并发传出分片恢复。传出恢复是在节点上分配源分片(很可能是主分片,除非正在重新定位分片)的恢复。默认为2。

4.cluster.routing.allocation.node_concurrent_recoveries

快捷设置:cluster.routing.allocation.node_concurrent_incoming_recoveries 和 cluster.routing.allocation.node_concurrent_outgoing_recoveries.

5.cluster.routing.allocation.node_initial_primaries_recoveries

虽然副本的恢复是通过网络进行的,但是在节点重新启动之后,未分配的主节点的恢复使用本地磁盘中的数据。这些应该是快速的,以便更多的初始主恢复可以在同一节点上并行进行。默认为4。

6.cluster.routing.allocation.same_shard.host

允许执行检查,以防止在单个主机上分配同一分片的多个实例(基于主机名和主机地址)。默认值为false,这意味着在默认情况下不执行任何检查。此设置仅适用于在同一台计算机上启动多个节点的情况。

分片重新平衡分配设置

以下动态设置可用于控制集群中分片的重新平衡:

1.cluster.routing.rebalance.enable

为特定类型的碎片启用或禁用重新平衡:

  • all-(默认设置)允许重新平衡所有节点。
  • primaries-仅允许主分片重新平衡。
  • -replicas-仅允许副分片重新平衡。
  • none-任何索引都不允许任何类型的分片重新平衡分配。

2.cluster.routing.allocation.allow_rebalance

指定什么时候允许碎片再平衡:

  • always-总是允许。
  • indices_primaries_active-只有当集群中的所有主分片都被分配时。
  • indices_all_active(默认设置)只有当集群中所有主分片和副分片都被分配时。

3.cluster.routing.allocation.cluster_concurrent_rebalance
允许控制集群范围内允许多少并发分片重新平衡。默认为2。注意,此设置仅控制由于集群中的不平衡而导致的并发碎片重定位的数量。此设置不限制由于分配筛选或强制感知而导致的分片重定位。

启发式分片平衡分配

当不允许重新平衡操作时,任何节点的权值与任何其他节点的权值之间的距离都超过balance.threshold时,集群就处于平衡状态。

1.cluster.routing.allocation.balance.shard

定义在节点上分片分配总数的权重因子(浮点数)。默认值0.45f。这增加了均衡集群中所有节点上分片配置数量相等的趋势。

2.cluster.routing.allocation.balance.index

为分配给特定节点(浮点数)的每个索引的分片数定义权重因子。默认0.55f。这增加了使集群中所有节点的每个索引的碎片数量相等的趋势。

3.cluster.routing.allocation.balance.threshold

应该执行的操作的最小优化值(非负浮点数)。默认为1.0度。提高这个值将导致集群在优化碎片平衡方面的积极性降低。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zRK4BzBUK860   2023年11月02日   65   0   0 elasticsearch字段nginx
FlJpWMh2LSTP