`
rockelixir
  • 浏览: 310131 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

elasticsearch高级配置之(一)----分片分布规则设置

阅读更多
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-7.11.2-linux-x86_64.tar.gz

    Elasticsearch 7.11.2 是一个高度可扩展的全文搜索引擎,广泛应用于日志分析、实时数据存储、搜索和大数据分析等多个领域。这款软件是基于Java开发的,并且采用了分布式、RESTful的工作方式,使得它在处理大量数据时...

    elasticsearch-中文开发指南

    - **ES vs Solr:** 对比分析 Elasticsearch 与 Apache Solr 的异同点。 - **Elasticsearch River JDBC:** 描述如何使用 JDBC 连接器将关系型数据库中的数据流式导入 Elasticsearch。 #### 结论 Elasticsearch 作为...

    Elasticsearch 分享 - 基础篇

    3. **配置**:编辑`config/elasticsearch.yml`文件,设置必要的参数,如集群名称、节点名称、网络绑定地址等。 4. **启动**:使用命令`bin/elasticsearch`启动服务。 通过以上步骤,我们不仅了解了Elasticsearch的...

    elasticsearch-6.6.1.tar.gz

    Elasticsearch的分布式特性使其能够轻松地处理大量数据,并且可以自动进行数据分片和复制,确保高可用性和数据冗余。这种设计使得在集群中添加或移除节点变得极其简单,无需担心数据丢失或服务中断。 在6.6.1这个...

    ElasticSearch中文学习教程

    通过配置分片分布策略,可以控制分片在集群中的分布情况,确保数据的均衡分布,避免热点问题。 **5.2. 线程池设置** 线程池配置影响ElasticSearch的并发处理能力。合理设置线程池大小和队列长度可以提高系统响应...

    elasticsearch-5.2.2.zip

    Elasticsearch 5.2.2 是一个高度可扩展、高性能的开源全文搜索引擎,由Apache许可协议授权。它被广泛用于大数据分析、日志聚合、实时搜索和许多其他基于搜索的应用场景。Elasticsearch的核心特性包括分布式、RESTful...

    分布式搜索 elasticsearch 方案研究 - 基础知识

    1. **分片分布规则设置**:调整分片分配策略,优化数据在节点间的分布,避免热点问题。 2. **线程池设置**:根据工作负载类型定制线程池大小和类型,提高并发处理能力。 **七、Shard和Replica选择** 根据数据量和...

    elasticsearch集群安装包

    在实际部署中,还需要考虑线程池配置、索引分片策略、数据存储优化等高级主题,以及如何结合 Logstash 进行日志收集、Kibana 进行数据分析等。对于大规模生产环境,可能还需要关注滚动升级、热温冷数据分离、跨数据...

    Mastering Elasticsearch(中文版).pdf

    - **路由功能浅谈**:路由功能允许用户控制文档如何在分片之间分布,这对于实现一致性哈希等高级特性非常有用。 - **调整集群的分片分配**:通过手动调整分片的分配策略,可以在不同的节点间平衡负载,提高系统的...

    最新ElasticSearch6实战教程

    - **分布式架构**:Elasticsearch是一个分布式的文档数据库,能够自动分片和复制数据,确保高可用性和故障恢复。 - **RESTful API**:通过HTTP接口与Elasticsearch交互,使得集成和操作变得更加简单。 - **倒排索引*...

    ElasticSearch Server

    ElasticSearch提供了多种优化手段,例如调整分片大小、合理配置节点、使用索引模板和动态映射等。此外,还可以通过使用过滤器缓存(Filter Caching)和查询缓存(Query Caching)来进一步提升查询效率。 总而言之,...

    ElasticSearch server

    - **查询过程**:用户发送查询请求后,Elasticsearch 会遍历所有相关分片,执行查询并返回结果。 - **基本查询** - **Term Query**:精确匹配某个值。 - **Terms Query**:匹配多个值。 - **Match Query**:...

    【中华石杉】Elasticsearch顶尖高手系列-高手进阶篇all

    虽然提供的部分内容似乎包含了乱码,并不能直接用于理解文档的具体内容,但基于标题和描述中的信息,我们可以围绕Elasticsearch这一主题,特别是针对高级用户的进阶知识点进行展开。 ### Elasticsearch简介 ...

    elasticsearch指南

    一个索引由多个分片(Shard)组成,分片可以分布在集群中的多个节点上。为了提高容错性,每个分片可以有多个副本(Replica),当主分片(Primary Shard)发生故障时,副本可以承担起主分片的角色。 映射(Mapping)...

Global site tag (gtag.js) - Google Analytics