ES-08-ElasticSearch数据分片(shard)

31 篇文章 0 订阅
9 篇文章 0 订阅

说明

  • ElasticSearch数据分片(shard)
  • 创建多分片索引、更改多分片索引副本分片数量、路由计算和分片控制
  • 官方文档:https://www.elastic.co/cn/

核心概念

》什么是数据分片(shard)?

  • 一个分片是一个底层的工作单元 ,它仅保存了全部数据中的一部分,一个分片是一个Lucene的实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
  • Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时,Elasticsearch会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
  • 主分片:在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改,索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。
  • 副分片:一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

》如何创建多分片索引?

  • 创建索引时不提交分片参数默认是创建一个主分片和一个副本分片(要创建副本分片至少两台节点)
  • 可以指定参数规定分为几个主分片和副本
  • 创建索引时定义主分片数量后以后无法更改,但是副本数量可以更改

》路由计算和分片控制

  • 既然数据是被分别存储在不同的分片中,那么ES是如何定位数据到底存放在哪个分片的呢?
  • 路由计算
    • 公式:hash(<文档id>) % <主分片数量>(如果有3个分片,最终结果必然=0、1、2)
  • 分片控制
    • 用户可以访问任何一个节点获取数据,该节点被称为协调节点
  • 写数据
    • 写数据时也是靠这个协调节点做路由的,先计算出数据所属分片,然后路由到相关分片所在节点进行写数据,然后找到副本进行数据复制,最终反馈结果
  • 读数据
    • 类似写数据

》分片策略

  • 合理设置分片数
    • 一个分片底层即为一个Lucene索引,会消耗一定的文件句柄、内存、CPU
    • 索引创建的时候分片就已经被设定好了,后期无法动态改变
    • 控制每个分片占用硬盘容量不超过ES最大JVM堆空间设置,一般对打32G
    • 通常遵循这个公式:节点数 <= 主分片数 * (副本分片数 + 1)

常用操作

》创建多分片索引

  • 请求参数说明

    • number_of_shards:主分片数量
    • number_of_replicas:副本数量
  • 请求示例

    • 请求方式:PUT

    • 发送请求:

      curl -X PUT http://192.168.3.201:9201/index001 -H 'Content-Type:application/json' -d'
      {
          "settings": {
              "number_of_shards": 3,
              "number_of_replicas": 1
          } 
      }'
      
    • 响应结果:

      {
          "acknowledged": true,
          "shards_acknowledged": true,
          "index": "index001"
      }
      

》更改多分片索引副本分片数量

  • 请求示例

    • 请求方式:PUT

    • 发送请求:

      curl -X PUT http://192.168.3.201:9201/index001 -H 'Content-Type:application/json' -d'
      {
          "number_of_replicas": 2
      }'
      
    • 响应结果:

      {
          "acknowledged": true
      }
      
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值