ElasticSearch集群shard均衡策略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch集群shard均衡策略相关的知识,希望对你有一定的参考价值。

参考技术A

ES集群的 rebalance 和 allocation 功能,可以自动均衡集群内部数据、分配分片,保证各个节点间尽量均衡。但是,在高访问量或者节点宕机的情况下,大范围的 rebalance 会影响到集群性能。所以,调整好集群相关参数,是重中之重。

集群分片分配是指将索引的shard分配到其他节点的过程,会在如下情况下触发:

上述策略开关,可以动态调整,由参数 cluster.routing.allocation.enable 控制,启用或者禁用特定分片的分配。该参数的可选参数有:

重新启动节点时,此设置不会影响本地主分片的恢复。如果重新启动的节点具有未分配的主分片的副本,会立即恢复该主分片。

cluster.routing.rebalance.enable 为特定类型的分片启用或禁用重新平衡:

cluster.routing.allocation.allow_rebalance 用来控制rebalance触发条件:

cluster.routing.allocation.cluster_concurrent_rebalance 用来控制均衡力度,允许集群内并发分片的rebalance数量,默认为2。

cluster.routing.allocation.node_concurrent_recoveries ,每个node上允许rebalance的片数量。

rebalance 策略的触发条件,主要由下面几个参数控制:

elasticsearch内部计算公式是:

如果计算最后的 weight(node, index) 大于 threshold , 就会发生shard迁移。

可以通过设置分片的分布规则来人为地影响分片的分布,示例如下:

假设有几个机架,可以在每个节点设置机架的属性:

现在添加一条策略,设置 rack_id 作为分片规则的一个属性

上面设置意味着rack_id会用来作为分片分布的依据。例如:我们启动两个 node.attr.rack_id 设置 r1 的节点,然后建立一个5个分片,一个副本的索引。这个索引就会完全分布在这两个节点上。如果再启动另外两个节点, node.attr.rack_id 设置成 r2 ,分片会重新分布,但是一个分片和它的副本不会分配到同样 rack_id 值的节点上。

可以为分片分布规则设置多个属性,例如:

注意:当设置了分片分布属性时,如果集群中的节点没有设置其中任何一个属性,那么分片就不会分布到这个节点中。

强制分布规则
更多的时候,我们不想更多的副本被分布到相同分布规则属性值的一群节点上,那么,我们可以强制分片规则为一个指定的值。

例如,我们有一个分片规则属性叫 zone ,并且我们知道有两个 zone , zone1 和 zone2 。下面是设置:

现在我们启动两个 node.zone 设置成zone1的节点,然后创建一个5个分片,一个副本的索引。索引建立完成后只有5个分片(没有副本),只有当我们启动 node.zone 设置成 zone2 的节点时,副本才会分配到那节点上。

分片分布过滤
允许通过 include/exclude 过滤器来控制分片的分布。这些过滤器可以设置在索引级别上或集群级别上。下面是个索引级别上的例子:

假如我们有四个节点,每个节点都有一个叫 tag (可以是任何名字)的属性。每个节点都指定一个tag的值。如:节点一设置成 node.tag: value1 ,节点二设置成 node.tag: value2 ,如此类推。我们可以创建一个索引然后只把它分布到 tag 值为 value1 和 value2 的节点中,可以通过设置 index.routing.allocation.include.tag 为 value1,value2 达到这样的效果,如:

与此相反,通过设置 index.routing.allocation.exclude.tag 为 value3 ,我们也可以创建一个索引让其分布在除了 tag 设置为 value3 的所有节点中,如:

include或exclude过滤器的值都会使用通配符来匹配,如 value* 。一个特别的属性名是 _ip ,它可以用来匹配节点的ip地址。

显然,一个节点可能拥有多个属性值,所有属性的名字和值都在配置文件中配置。如,下面是多个节点的配置:

同样的方法,include和exclude也可以设置多个值,如:

上面的设置可以通过索引更新的api实时更新到索引上,允许实时移动索引分片。

完。

Elasticsearch 顶尖高手—剖析Elasticsearch的基础分布式架构

1.Elasticsearch对复杂分布式机制的透明隐藏特性

Elasticsearch是一套分布式的系统,分布式是为了应对大数据量

隐藏了复杂的分布式机制

分片机制,cluster discovery(集群发现机制),shard负载均衡 ,shard副本,请求路由,集群扩容,shard重分配

2.Elasticsearch的垂直扩容与水平扩容

垂直扩容:采购更强大的服务器,成本非常高昂,而且存在瓶颈。

水平扩容:业界经常采用的方案,采购越来越多的普通服务器。性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算级和存储能力。

扩容对应用程序的透明性

3.增加或减少节点的数据rebalance

保持负载均衡

4.master节点
  1. 创建或删除索引
  2. 增加或删除节点
5.节点对等的分布式架构
  1. 节点对等,每个节点都能接受所有的请求
  2. 自动请求路由
  3. 响应收集


技术图片

以上是关于ElasticSearch集群shard均衡策略的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch shardreplica与routing机制

Elasticsearch 顶尖高手—剖析Elasticsearch的基础分布式架构

高可用 Elasticsearch 集群的分片管理 (Shard)

ELK 分布式日志处理 10.12

elasticsearch安全重启节点

ElasticSearch Shard——本质上是做分布式扩展,副本对于集群的稳定性有很强的影响