1:shard allocation
分片分配就是将索引的各个分片合理的分布到各个节点上去。这个过程可能发生在以下场景下:
初始化(重启恢复),副本分配,平衡,节点加入,节点移除。
es在这个模块对应的设置有:
cluster.routing.allocation.allow_rebalance: 根据集群状态是否允许平衡操作,什么时机可以平衡。选项有:always, indices_primaries_active, indices_all_active(default).默认值减少集群启动时机器之间的交互。
cluster.routing.allocation.cluster_concurrent_rebalance: 设置集群级别平衡过程中的shard并发度设置,2(default)
cluster.routing.allocation.node_initial_primaries_recoveries: 设置node级别上初始化数据恢复过程中并发的主分片数量,大多情况下是local gateway,这个过程会很快,因此可以在不增加负载的情况下处理更多的主分片。
cluster.routing.allocation.node_concurrent_recoveries: 设置node级别recovery的并发度。2(default)
cluster.routing.allocation.enable: 哪些分片可以参与重新分配。选项有:all(default), primaries(主分片), new_primaries(新增加的主分片), none.
cluster.routing.allocation.same_shard.host: 是否启用对同一分片在同一个主机上出现多个分配实例的检测。默认false。这个选项只有在同一个node上启动多个es实例的情况下才有意义。
indices.recovery.concurrent_stream:设置node级别上从一个分片恢复另一个分片的并发度。
2:shard allocation awareness
集群分配awareness可以跨一般的属性来控制节点上分片和副本的分配。举例说明:
假设我们有多个机架。当我们启动一个节点的时候,配置一个属性rack_id(任何名称都可以,这里只是举例),例如:
node.rack_id : rack_one
以上给一个node设置了rank_id属性,现在我们将rack_id属性设置为一个awareness allocation属性(所有node上都要设置):
cluster.routing.allocation.awareness.attributes: racd_id
以上设置将rack_id属性应用在awareness过程中影响分片和副本的分配。例如:我们启动了2个设置rack_id为rack_one的 节点,部署了一个有5分片1副本的索引,那么索引会部署到所有当前节点中,总共10个分片,每个节点5个。现在如果我们再启动2个节 点,node.rack_id: rack_two。分片就会在当前4个节点中重新分配,但是分片和副本不会同时分配到rack_id相同的节点上。也就是说如果一个分片落在 rack_one上,其副本必定落在rank_two上。
awareness允许多值,例如:
cluster.routing.allocation.awareness.attributes:rank_id, zone。
注意:当应用awareness属性时,分片不会落在没有设置属性值的节点上。
3:forced awareness
有些时候,我们事先就可以知道awareness属性值的数量,并且我们不想让超出需求数量以外的副本分配到特定的具有相同awareness属性值的节点群中,这种情况下我们可以使用强制awareness的功能。举例说明:
假设我们有一个awareness的属性为zone,而且我们知道只存在两个zone的取值:zone1和zone2.因此我们可以配置这样的一个强制awareness属性:
cluster.routing.allocation.awareness.force.zone.values: zone1, zone2
cluster.routing.allocation.awareness.attributes: zone
现在我们启动两个node.zone:zone1的节点,部署一个5分片1副本的索引,则这两个节点启动后,只会分配5个主分片,一个节点2一个节 点3,但是不会有副本(请注意跟2中的区别,2中是有副本的,因为预先es并不知道会有rack_two的存在)。只有我们启动具有node.zone: zone2的节点,副本才会分配。
4:automatic preference when searching/getting
当执行一个查询或者get操作的时候,节点接受到请求后,会优先在相同属性值的分片上处理请求。
5:realtime settings update
这些配置都可以通过update api进行实时的更新
6:shard allocation filtering
支持用include/exclude过滤器来控制分片的分配。过滤器可以设置在索引级别或者是集群级别。索引级别设置举例:
假设有4个节点,每个节点有tag属性,tag有对应取值:节点1为node.tag: value1, 节点2为node.tag: value2。依次类推。
我们创建一个索引,设置index.routing.allocation.include.tag: value1, value2。
这个配置将索引分配限定在tag值为value1和value2的节点上。
另外,我们可以设置索引部署在所有节点,除了tag为value3的节点,
设置index.routing.allocation.exclude.tag: value3.
index.routing.allocation.require.tag可以设置必须满足的一些规则才能分配,是must all的关系,而inclued 是 any的关系。
include,exclude,require可以支持简单的通配符,例如value*。
另外有一个特殊的属性_ip可以匹配节点的ip,_host可以匹配主机名称也可以匹配ip,_name可以匹配node name,_id可以匹配node id。
显然一个节点可以设置多个属性,并且属性名称和属性值可以在setting中指定。比如:
node.group1: group1_value1
node.group2: group2_value4
同样的,include exclude require 也可以有多个属性:
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",
"index.routing.allocation.require.group4" : "aaa",
}'
上边设置的意义是:分片分配要符合这样规则----group4必须为aaa,group3必须不能为zzz,group为xxx或者group2为yyy
以上设置可以通过update api实时改变,当然会触发shard的重新分配。
cluste级别的filter同样可以定义,也可以实时更新。这个设置在删除节点时很有用途(即使副本为0)
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}'
显然10.0.0.1这个节点将要被删除,其上的分片将会重新分配~
http://www.aiuxian.com/article/p-1792959.html
http://rockelixir.iteye.com/blog/1890855
相关推荐
kafka-end-2-end-encryption.zip,kafka-end-2-end-encryptionde-/serialization用于完成端到端加密的kafka包装器
spring-data-elasticsearch api文档
一键安装elasticsearch脚本,Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集...随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。
elasticsearch_node模块,npm下载的模块,没网可以用下
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载
elasticsearch-8.2.3 windows 版本。 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的...
elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索...随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长
一、概述 一般来说我们开发Elasticsearch会选择...2、elasticsearch-head (方便查看ES中的索引及数据) 3、Kibana(方便开发通过rest api 调试ES,有代码提示) 4、中文分词elasticsearch-analysis-ik (ik) 1、下载ela
Elasticsearch 简介 简单描述Elasticsearch Elasticsearch的特性 分布式、全文检索、近实时搜索和分析、高可用、模式自由、restful 讲述Elasticsearch的架构和Elasticsearch 的核心 概念 二、索引数据 单词 文档...
docker run --name elasticsearch7.16.3 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v /Users/xingyue/Home/xingyue/学习/工程化/es/elasticsearch.yml:/usr/share/elastic...
本示例程序主要是spring 整合elasticsearch-2.3.5的实践,测试时先将配置文件es.properties中ES服务端es.ip,es.port, es.cluster 配置替换成自己的服务器信息
This is a step-by-step guide with lots of case studies on solving real-world ElasticSearch cluster issues Book Description ElasticSearch is a distributed search server similar to Apache Solr with a ...
适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...
ElasticSearch实战 in Action(原著原版)压缩包,ElasticSearch文档,ES全文检索从入门到精通,高清PDF,是学习es和精通es必备手册,能快速达到精通ElasticSearch,一册在手,ElasticSearch无忧,开发、学习、调优...
赠送jar包:elasticsearch-6.8.3.jar; 赠送原API文档:elasticsearch-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.8.3.pom; 包含翻译后的API文档...
ElasticSearch数据导出 elasticsearch单文档数据导出 支持自定义查询 导出数据Json文件
kubernetes-elasticsearch-cluster:在Kubernetes之上的Elasticsearch集群变得容易
elasticSearch(ES) 最新版ik分词插件7.10 elasticsearch-analysis-ik-7.10.0
ElasticSearch官网文档中文版