ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

elasticsearch分片分布规则总结

2021-07-19 19:03:50  阅读:238  来源: 互联网

标签:总结 rack allocation elasticsearch routing 设置 分片 节点


分片分布是把索引分片分布到节点的过程。这个操作会在初次启动集群,副本分配,负载均衡,或增加删除节点时进行。   下面是一些与分片分布相关的设置:

cluster.routing.allocation.allow_rebalance 设置根据集群中机器的状态来重新分配分片,可以设置为always, indices_primaries_active和indices_all_active,默认是设置成indices_all_active来减少集群初始启动时机器之间的交互。 cluster.routing.allocation.cluster_concurrent_rebalance 设置在集群中最大允许同时进行分片分布的个数,默认为2,也就是说整个集群最多有两个分片在进行重新分布。 cluster.routing.allocation.node_initial_primaries_recoveries 设置指定初始每个节点。由于多数情况下是使用local的gateway,这应该会更快, cluster.routing.allocation.node_concurrent_recoveries 设置在节点中最大允许同时进行分片分布的个数,默认为2 cluster.routing.allocation.disable_allocation 使主要分片或副本的分布失效。要知道,如果主分片不存在(那个节点挂了)那么其副本仍然会被提升为主分片,这个设置只有在动态地使用集群更新设置api调用时才生效。 cluster.routing.allocation.disable_replica_allocation 使副本分布失效。和上一个设置一样,只有动态地使用集群更新设置api调用时才生效。 indices.recovery.concurrent_streams 当从一个点(peer)恢复分片时当前节点最多允许的文件读取流的个数,默认为5   自定义分片分布规则 可以通过设置分片的分布规则来人为地影响分片的分布,下面是个例子:   假设我们有几个机架。当我们启动一个节点,我们可以设置一个叫rack_id(其它名字也可以)的属性,例如下面设置: node.rack_id: rack_one 上面这个例子设置了一个属性叫rack_id,它的值为rack_one。现在,我们要设置rack_id作为分片分布规则的一个属性(在所有节点都要设置)。 cluster.routing.allocation.awareness.attributes: rack_id 上面设置意味着rack_id会用来作为分片分布的依据。例如:我们启动两个node.rack_id设置rack_one的节点,然后建立一个5个分片,一个副本的索引。这个索引就会完全分布在这两个节点上。如果再启动另外两个节点,node.rack_id设置成rack_two,分片会重新分布,但是一个分片和它的副本不会分配到同样rack_id值的节点上。可以为分片分布规则设置多个属性,例如: cluster.routing.allocation.awareness.attributes: rack_id,zone 注意:当设置了分片分布属性时,如果集群中的节点没有设置其中任何一个属性,那么分片就不会分布到这个节点中。   强制分布规则 更多的时候,我们不想更多的副本被分布到相同分布规则属性值的一群节点上,那么,我们可以强制分片规则为一个指定的值。 例如,我们有一个分片规则属性叫zone,并且我们知道有两个zone,zone1和zone2.下面是设置: cluster.routing.allocation.awareness.force.zone.values: zone1,zone2 cluster.routing.allocation.awareness.attributes: zone 现在我们启动两个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达到这样的效果,如:
curl -XPUT localhost:9200/test/_settings -d '{   
    "index.routing.allocation.include.tag" : "value1,value2"   
}'  
与此相反,通过设置index.routing.allocation.exclude.tag为value3,我们也可以创建一个索引让其分布在除了tag设置为value3的所有节点中,如:
curl -XPUT localhost:9200/test/_settings -d '{   
    "index.routing.allocation.exclude.tag" : "value3"   
}' 
include或exclude过滤器的值都会使用通配符来匹配,如value*。一个特别的属性名是_ip,它可以用来匹配节点的ip地址。 显然,一个节点可能拥有多个属性值,所有属性的名字和值都在配置文件中配置。如,下面是多个节点的配置: node.group1: group1_value1  node.group2: group2_value4   同样的方法,include和exclude也可以设置多个值,如:
curl -XPUT localhost:9200/test/_settings -d '{   
    "index.routing.allocation.include.group1" : "xxx"   
    "index.routing.allocation.include.group2" : "yyy",   
    "index.routing.allocation.exclude.group3" : "zzz",   
}'  
上面的设置可以通过索引更新的api实时更新到索引上,允许实时移动索引分片。   集群范围的过滤器也可以定义,可以通过集群更新api实时更新到集群上。这些设置可以用来做让一些节点退出集群的操作。下面是通过ip地址去掉一个节点的操作: 

curl -XPUT localhost:9200/_cluster/settings -d '{   
    "transient" : {   
        "cluster.routing.allocation.exclude._ip" : "10.0.0.1"   
    }   
}'  

 

原文地址:https://blog.csdn.net/laigood/article/details/7800064

标签:总结,rack,allocation,elasticsearch,routing,设置,分片,节点
来源: https://www.cnblogs.com/opsdemo/p/15031404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有