分片分布是把索引分片分布到节点的过程。这个操作会在初次启动集群,副本分配,负载均衡,或增加删除节点时进行。
下面是一些与分片分布相关的设置:
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"
- }
- }'
相关推荐
因此,理解并合理利用Elasticsearch的索引策略、分片和副本设置,以及查询优化技术,对于提升整体性能至关重要。 总的来说,elasticsearch-analysis-pinyin-7.4.0为Elasticsearch带来了强大的中文拼音分词功能,极...
- **配置文件**:修改`config/elasticsearch.yml`配置文件,设置端口、路径、内存等参数。 - **服务管理**:可以使用`elasticsearch-service.bat`脚本安装为系统服务,方便管理和启动。 4. **RESTful API**: - ...
5. **数据分片与副本**:Elasticsearch 自动将每个索引划分为多个分片,每个分片可以有零个或多个副本。分片允许数据分布到不同的节点上,提高读写性能;副本则用于提高数据的冗余度和恢复能力。 6. **RESTful API*...
4. **包结构**:压缩包中的"es"文件夹很可能包含Elasticsearch的核心库文件,这些文件是运行Elasticsearch服务的基础。"other"文件夹中的内容可能包含额外的依赖或辅助工具,其具体用途可能需要进一步探索或文档说明...
Elasticsearch通过分片和复制机制实现了数据的分布存储,可以轻松处理大规模数据。 接着,源代码部分可能包含了如何设置和配置Elasticsearch集群的示例。这可能包括创建索引、映射字段、导入数据、搜索查询以及性能...
每个索引都可以被划分为多个分片,这些分片可以在不同的节点上分布,提高查询性能。同时,通过复制分片,可以实现数据冗余,保证系统的高可用性。 在Elasticsearch中,索引(Index)是数据的容器,类似于关系数据库...
4. **容错机制**:通过复制分片,Elasticsearch可以自动处理节点故障,保持数据的完整性。 5. **数据分析**:Elasticsearch内置了丰富的聚合功能,方便对数据进行统计分析。 6. **监控和日志管理**:Elasticsearch...
- **复制与分片**:理解副本分片的概念,如何配置以提高数据冗余和可用性。 5. **Elastic Stack(ELK)** - **Logstash**:作为数据收集和预处理工具,Logstash如何与Elasticsearch配合实现日志管理和分析。 - *...
- 解压"elasticsearch-7.1.0"文件夹到任意位置,设置环境变量`ES_PATH_CONF`指向配置文件夹。 - 修改`config/elasticsearch.yml`配置文件,如设置集群名称、网络监听地址等。 - 配置JVM内存,修改`jvm.options`...
2. **分布式架构**: 它支持分布式的文档存储和索引,这意味着数据可以自动分片并复制到多个节点,提高系统的容错性和性能。 3. **RESTful API**: Elasticsearch 使用易于理解和使用的HTTP RESTful接口,使得与其他...
第四章通常会涵盖Elasticsearch的索引和分片机制,解释数据分布和复制的概念,这是理解Elasticsearch高可用性和可扩展性基础。这部分还可能讨论路由算法,以及如何通过调整分片和副本数量来优化性能和容错能力。 第...
它通过浏览器展示ES集群的状态,包括节点信息、索引信息、文档数、分片分布等,为开发者和运维人员提供了便捷的可视化操作界面。`master`分支代表了项目的最新稳定版本,确保了与最新版Elasticsearch的兼容性。 **...
通过配置分片分布策略,可以控制分片在集群中的分布情况,确保数据的均衡分布,避免热点问题。 **5.2. 线程池设置** 线程池配置影响ElasticSearch的并发处理能力。合理设置线程池大小和队列长度可以提高系统响应...
创建Elasticsearch用户和组:`groupadd elasticsearch && useradd -r -g elasticsearch elasticsearch`,然后将文件所有权更改为新用户:`chown -R elasticsearch:elasticsearch /opt/elasticsearch-7.14.0` ...
- **分片(Shard)**:为了实现水平扩展,Elasticsearch将索引分割为多个分片,每个分片可以分布在不同的节点上。 - **副本(Replica)**:每个分片都可以有多个副本,提高数据冗余性和系统容错性。 2. **安装与配置*...
- 分片和副本:根据需求调整Elasticsearch索引的分片和副本数量,以提高读写性能和容错能力。 - 过滤和聚合:合理使用过滤和聚合查询,避免全量扫描。 - 搜索提示和自动补全:利用Elasticsearch的`Completion ...
在实际操作中,Elasticsearch Head插件能够帮助管理员快速定位问题,例如检查分片分布是否均匀,或者检测某个索引是否过载。同时,对于开发人员来说,它可以用于验证索引映射、查询语句的正确性,以及测试数据导入...
Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛应用于日志分析、全文检索、监控等多个领域。这份个人笔记详细深入地介绍了Elasticsearch的核心概念和使用方法,旨在帮助读者全面理解和...