Elasticsearch基础篇(七):分片大小修改和路由分配规则

这篇具有很好参考价值的文章主要介绍了Elasticsearch基础篇(七):分片大小修改和路由分配规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch基础篇(七):分片大小修改和路由分配规则

1. 分片

在Elasticsearch中,分片是对索引数据的水平划分和分布。索引被分成多个分片,每个分片可以在集群的不同节点上存储。这种分片的设计提供了一种水平扩展的能力,允许将大量数据分布到多个节点上,从而提高性能和可伸缩性。每个分片就是一个Lucene的实例,具有完整的功能。

1.1 主分片(Primary Shard)

每个索引都被划分成若干个主分片,每个主分片都是一个独立的索引。主分片负责处理所有的读和写操作。主分片的数量在索引创建时确定,之后不能更改。

1.2 副本分片(Replica Shard)

为了提高系统的可用性和容错性,每个主分片都可以有零个或多个副本分片。副本分片是主分片的完整复制,位于不同的节点上。如果某个节点故障,系统仍然能够通过副本分片提供服务。副本的数量可以在索引运行时动态调整。

1.3 分片路由(Routing Shard)

数据被分配到特定的分片是通过分片路由机制实现的。默认情况下,Elasticsearch使用文档ID的哈希值进行路由,确保数据在不同主分片上均匀分布。开发者也可以自定义路由值。

2. 分片分配的基本策略

  • ES使用数据分片(shard)来提高服务的可用性,将数据分散保存在不同的节点上以降低当单个节点发生故障时对数据完整性的影响,同时使用副本(repiica)来保证数据的完整性。关于分片的默认分配策略,在7.x之前,默认5个primary shard,每个primary shard默认分配一个replica,即5主1副,而7.x之后,默认1主1副
  • ES在分配单个索引的分片时会将每个分片尽可能分配到更多的节点上。但是,实际情况取决于集群拥有的分片和索引的数量以及它们的大小,不一定总是能均匀地分布。
  • Paimary只能在索引创建时配置数量,而replica可以在任何时间分配,并且primary支持读和写操作,而replica只支持客户端的读取操作,数据由es自动管理,从primary同步。
  • ES不允许Primary和它的Replica放在同一个节点中,并且同一个节点不接受完全相同的两个Replica

3. 分片写入验证

es集群,ip: 192.168.0.156,节点端口:9201,9202,9203

设置索引分片数量

http://192.168.0.156:9201/test_index/
{
  "settings": {
    "index": {
      "number_of_shards": "3",
      "number_of_replicas": "2"
    }
  }
}

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据

包含三个节点(node1、node2、node3)的ES集群,每个主分片有3个主分片和2个副分片,分片分布如下:

  • Node1: 主分片0、副本1、副本2
  • Node2: 主分片1、副本0、副本2
  • Node3: 主分片2、副本0、副本1
#查看所有索引的分片信息
http://192.168.0.156:9201/_cat/indices?v

health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   test_index       sX7MP6snQ7m3XjX5LXfM3w   3   2          0            0      1.9kb           681b

参数说明:

  • index: 索引名称
  • docs.count:文档总数
  • docs.deleted:已删除文档数
  • store.size: 存储的总容量
  • pri.store.size:主分片的存储总容量

3.1 数据写入测试

新增一条测试数据

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据

# 查看数据写入分片信息
http://192.168.0.156:9201/_cat/shards/test_index?v

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据

当新增一条数据时,该数据将被写入到其中一个主分片,并且它的两个副本被分配到其他两个节点上。这样设计可以提高系统的可用性和容错性,因为数据的多个副本分布在不同的节点上,即使某个节点发生故障,系统仍然可以继续工作。总的来说,具体的分配取决于Elasticsearch的集群配置和负载均衡策略。系统会尽量保证数据在不同节点上的均匀分布,以提高性能和可靠性。

3.2 路由机制

往索引中增加100条数据,文档分布如下:三个主分片的文档数量正好为100,随着文档数量的增加,三个主分片的数量会越来越均衡

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据

es 中的路由机制是通过哈希算法,将具有相同哈希值的文档放到一个主分片中,分片位置的计算方式如下:

shard=hash(routing) % number_of_primary_shards
    
# 路由公式参数说明:
shard_num:最终选择分片序号
routing:路由ID,不指定则为文档ID
number_of_primary_shards:主分片数量

routing 可以是一个任意字符串,es 默认是将文档的 id 作为 routing 值,通过哈希函数根据 routing 生成一个数字,然后将该数字和分片数取余,取余的结果就是分片的位置。

默认的这种路由模式,最大的优势在于负载均衡,这种方式可以保证数据平均分配在不同的分片上。劣势在查询时候无法确定文档的位置,此时 会将请求广播到所有的分片上去执行

4. 修改分片数量

4.1 修改主分片数量

PUT test_index/_settings
{
  "index" : {
    "number_of_shards" : 6
  }
}

报错信息如下:证明索引创建后无法修改分片数

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据

4.2 Reindex修改主分片的数量

[Reindex API | Elasticsearch Guide 8.11] | Elastic

在Elasticsearch中,一旦索引创建时确定了主分片的数量,就不能直接修改。主分片的数量是索引创建时固定的,因为这个值与数据的分布和索引结构有关。要修改主分片的数量,需要采取以下步骤:

  1. 创建新索引: 创建一个新的索引,设置新的主分片数量。这个步骤需要提前计划,因为主分片数量一旦确定,就不能更改。

  2. 重新索引(Reindex): 使用Elasticsearch的Reindex API将旧索引中的数据重新索引到新创建的索引中。这一步会消耗一些计算和存储资源,因此在生产环境中可能需要谨慎操作。

  3. 切换到新索引: 在完成重新索引后,将应用中的写操作切换到新的索引,确保新数据写入新的索引。

  4. 删除旧索引(可选): 如果确认新索引运行正常且数据完整,可以选择删除旧索引释放资源。

通过创建新索引来修改主分片的数量示例:

# 创建新索引(示例中主分片数量为6PUT new_test_index
{
  "settings": {
    "index": {
      "number_of_shards": "6",
      "number_of_replicas": "2"
    }
  }
}

# 使用Reindex API将旧索引数据重新索引到新索引
POST _reindex
{
  "source": {
    "index": "test_index"
  },
  "dest": {
    "index": "new_test_index"
  }
}

# 切换应用中的写操作到新索引

# 可选:删除旧索引
DELETE /old_index

Elasticsearch基础篇(七):分片大小修改和路由分配规则,# Elasticsearch基础学习,elasticsearch,jenkins,大数据文章来源地址https://www.toymoban.com/news/detail-812402.html

4.3 修改副分片数量

PUT test_index/_settings
{
  "index" : {
    "number_of_replicas" : 1
  }
}

到了这里,关于Elasticsearch基础篇(七):分片大小修改和路由分配规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录ElasticSearch分片被锁定导致无法分配处理过程

    本篇文章记录最近ES做节点替换, 从shard 迁移过程中被锁定导致无法分配, 主shard正常 ,希望可以帮助其它人 failed to create shard,failed to obtain in-memory shard lock,ShardLockObtainFailedException 这次遇到的问题比较特殊,尝试过以下几种手段都没有恢复: _cluster/reroute手动分片shard 由于

    2024年02月05日
    浏览(33)
  • 路由器DHCP分配IP地址规则

    路由器DHCP分配IP地址的机制: 先设置一个IP地址池,假设是192.168.1.100-192.168.1.199一共100个。 来一个请求,看一下是不是以前请求过的地址,如果是,还是返回以前给过的IP,然后将到期时间(有些路由器默认是120分钟)延长一下。到期的IP没延长请求,那么这个IP就重新放回地址

    2024年02月02日
    浏览(36)
  • Elasticsearch:如何使用集群级别的分片分配过滤(不包括节点)安全地停用节点

    当你想停用 Elasticsearch 中的节点时,通常的过程不是直接销毁节点。 如果你这样做,那么你就有数据丢失的风险,这不是你想要对应该是可靠的数据库做的事情。 这样做的问题是,节点很可能会通过 Elasticsearch 处理的恰当命名的分片分配分配给它们的分片。 Elasticsearch 中的

    2024年02月07日
    浏览(37)
  • ElasticSearch数据库修改分片数、副本数及修改mapping字段

            对于已经存在的索引,副本数可以随时修改。 示例演示如下:         ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。分片数量的设

    2024年02月02日
    浏览(41)
  • ElasticSearch修改分片数和副本数及增加字段

    一、修改副本数 PUT test/_settings {     \\\"index\\\": {         \\\"number_of_replicas\\\" : 1     } } 二、修改分片数 ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。如果

    2024年02月05日
    浏览(38)
  • es索引分片重新分配cluster.routing.allocation

    Index-level shard allocation filtering | Elasticsearch Guide [master] | Elastic index.routing.allocation.include.{attribute} Assign the index to a node whose  {attribute}  has at least one of the comma-separated values. index.routing.allocation.require.{attribute} Assign the index to a node whose  {attribute}  has  all  of the comma-separated values. i

    2024年02月09日
    浏览(32)
  • Sharding-JDBC分库分表-自动配置与分片规则加载原理-3

    Sharding JDBC自动配置的原理 与所有starter一样,shardingsphere-jdbc-core-spring-boot-starter也是通过SPI自动配置的原理实现分库分表配置加载,spring.factories文件中的自动配置类shardingsphere-jdbc-core-spring-boot-starter功不可没,他主要是自动创建了模式bean、事务类型bean和数据源bean,配置加载

    2024年02月10日
    浏览(34)
  • Elasticsearch的集群负载均衡与分片分片

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它可以处理大量数据并提供快速、准确的搜索结果。在大规模应用中,Elasticsearch的性能和可用性是关键因素。为了确保高性能和高可用性,Elasticsearch需要实现集群负载均衡和分片分片。 在本文中,我们将深入探讨Elasticsear

    2024年04月25日
    浏览(30)
  • Elasticsearch查询分片信息

    2024年02月15日
    浏览(35)
  • Elasticsearch的分片和副本

    Elasticsearch是一个分布式搜索和分析引擎,其设计目标是在分布式环境下处理海量数据。为了实现这个目标,Elasticsearch将数据分割成多个分片,并在多台服务器上进行存储和处理。每个分片都是一个独立的Lucene索引,可以被分配到不同的节点上。 分片可以帮助Elasticsearch水平扩

    2024年02月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包