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
相关推荐
console.trace('elasticsearch cluster is down!'); } else { console.log('All is well'); } }); ``` 当你完成所有操作后,别忘了使用 `close` 方法关闭客户端连接: ```javascript client.close(); ``` ###...
Elasticsearch(简称ES)是一种基于Lucene的分布式、RESTful搜索引擎,常用于大数据分析、日志收集和实时搜索等场景。在单节点部署中,我们将设置一个独立的Elasticsearch实例,适用于学习、测试或者小型应用。 **...
Elasticsearch是一个开源的全文搜索引擎,它以分布式、RESTful API接口、实时、高可用性和可扩展性著称。在Windows环境下安装Elasticsearch 7.11.1,你可以获得一套强大的数据检索和分析工具。这个压缩包"elastic...
- **Replica**: `org.elasticsearch.cluster.routing` 和 `org.elasticsearch.cluster.service` 包下包含关于副本的路由和集群状态更新逻辑。 - **Search**: `org.elasticsearch.search` 包中的类涉及搜索算法,如 `...
首先,我们要理解Spring Data Elasticsearch是Spring Data项目的一个模块,它为Elasticsearch提供了一种简单的方式来操作数据。通过这个模块,我们可以利用Spring的注解驱动和Repository抽象来简化Elasticsearch的...
spring.data.elasticsearch.cluster-name=your_cluster_name spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300 ``` 3. 创建ElasticsearchRepository:SpringData提供了接口,可以直接操作Elasticsearch。...
2. **eshelloword-spring-boot-starter**:这是一个Spring Boot启动模块,可能包含了与Elasticsearch的集成示例,你可以在这里找到如何在Spring Boot应用中使用Elasticsearch的代码。 3. **eshelloword-booter**:...
Elasticsearch的集群发现机制是通过discovery.zen模块来实现的,而节点间的消息传递则由Transport模块负责。集群的发现机制负责自动发现集群中的其他节点,以便于节点间通信和协调。Elasticsearch还提供了数据恢复...
在这个版本中,`elasticsearch-5.0.1-core-main` 模块包含了 Elasticsearch 的核心功能源码,这些源码在 `elasticsearch-5.0.1\core\src\main` 目录下,经过 Gradle 工具的处理,可以方便地在 Eclipse 这样的集成...
为了发现集群中的其他节点以及选举一个主节点,ElasticSearch使用发现模块。 ElasticSearch默认情况下使用,并且还支持发现协议。 试试看 使用 , , , 和我们将安装具有扩展名(手动),docker,docker-machine和...
Elasticsearch 的核心特性之一就是分布式。它将数据分布在多个节点上,每个节点都可以处理一部分数据,实现了数据的冗余备份和故障恢复。在源码中,我们可以看到如何通过集群通信(如 `Transport` 模块)来协调各个...
- **X-Pack Security**:Elasticsearch的官方安全模块,提供身份验证、授权、SSL/TLS加密等功能。 - **jar包安全更新**:如果发现有安全漏洞的jar包,可以通过修改源代码,替换为修复后的版本,重新打包生成新的...
4. **modules**:Elasticsearch的一些内置模块,如 ingest、analysis-icu等。 5. **plugins**:用于存放用户安装的插件,未预装任何插件时,此目录为空。 6. **data**:默认的数据存储位置,可以配置在`elastic...
**Elasticsearch-Demo 知识点详解** `Elasticsearch` 是一款强大的开源搜索引擎,以其高可扩展性、实时性、分布式特性以及强大的全文检索功能而被广泛应用于数据分析、日志收集、网站搜索等领域。这个`elastic...
Elasticsearch是一个开源的全文搜索引擎,它基于Lucene构建,被广泛用于数据分析和日志管理。在Linux平台上,Elasticsearch提供了稳定且高效的运行环境。本文将深入探讨Elasticsearch 7.15.0在Linux上的安装、配置...
5. **分布式特性**:Elasticsearch 作为分布式系统,其集群管理、路由、复制等关键功能都在`org.elasticsearch.cluster`和`org.elasticsearch.transport`包下。`ClusterService`负责集群状态的管理和更新,`...
- `modules/`:包含Elasticsearch的内置模块,如`analysis-icu`(国际化分析器)。 - `plugins/`:用于安装和管理Elasticsearch插件。 要启动Elasticsearch 5.0.1,只需在命令行中运行`bin/elasticsearch`。然后,...
1. **Spring Data Elasticsearch**:Spring Boot通过Spring Data Elasticsearch模块,提供了对Elasticsearch的便捷支持。首先,在pom.xml文件中引入依赖: ```xml <groupId>org.springframework.boot ...
Elasticsearch 6.2.1 是一个高度可扩展、高性能的开源全文搜索引擎,由Apache许可协议发布。这个版本的Elasticsearch是一个重要的里程碑,它提供了丰富的搜索和数据分析功能,广泛应用于日志分析、实时监控、网站...