elasticsearch 分片设计管理

  • 7.0开始 新创建要给索引时,默认只有一个主分片
    单个分片,查下算分,聚合不准的问题都可以得以避免

  • 单个索引,单个分片时候,集群无法实现水平扩展
    即使增加新的节点,无法实现水平扩展
    在es中最小的单元是分片.无法增加节点的方式水平扩展

  • 集群增加一个节点后,Elasticsearch会自动进行分片的移动,也叫Shard Rebalancing
    要是为索引,生成两个主分片,当数量越来越大的时候,磁盘无法保存,只要为它增加新的节点,会自动发送第二个分片上去

     当分片书 > 节点数时
     	一旦集群中有新的数据节点加入,分片就可以自动进行分片 
     	分片在重新分配时,系统不会有downtime
     多分片的好处: 一个索引如果分布在不同的节点,多个节点可以并行执行
    

    查询可以并行执行
    数据写入可以分散到多个机器
    增加插入吞吐量,查询吞吐量

    分片:一个分片就是一个运行的 lucene 实例,
    一个节点可以包含多个分片,分片由分为如下类型:

  • 主分片:用于解决数据水平扩展的问题,一个索引的所有数据是分布在所有主分片之上的(每个主分片承担一部分数据,主分片又分布在不同的节点上),一个索引的主分片数量只能在创建时指定,后期无法修改,除非对数据进行重新构建索引(reindex操作)。

  • 副本分片:用于解决数据高可用的问题,一个副本分片即一个主分片的拷贝,其数量可以动态调整,通过增加副本分片也可以实现提升系统读性能的作用。

    分片过多带来的副作用
    Shard 是 Elasticsearch 实现集群水平扩展的最小单位
    过多设置分片数会带来一些潜在的问题
    每个分片是一个LUCENE的索引,会使用机器的资源,过多的分片会导致额外的性能开销
    Lucene 可以看以下的文章会,更好的理解
    https://blog.csdn.net/ZY12166/article/details/93230169
    https://blog.csdn.net/qq_15175765/article/details/78861947

     	Lucene indices /File descriptiors /RAM /CPU 
     	每次搜索的请求,需要从每个分片上获取数据
     	分片的Meta信息由Master节点维护,过多,会增加管理的负担。经验值,控制分片总数在10w以内 
    

从存储的物理角度看
日志类应用,单个分片不要大于50GB
搜索类应用,单个分片不要超过20GB
为什么要控制分片存储大小
提高Update的性能
Merge时,减少所需的资源
丢失节点后,具备更快的恢复速度/便于分片在集群内Rebalancing

如何确定副本分片数
副本时主分片的拷贝
提高系统可用性:相应查询请求,防止数据丢失
需要占用和主分片一样的资源
对性能的影响
副本会降低数据的索引速度:有几份副本就会有几倍的CPU资源消耗在索引上
会减缓对主分片的查询压力,但是会消耗同样的内存资源
如果机器资源充分,提高副本数,可以提高整体的查询QPS

文档到分片的路由算法

哈希算法 =主分片的总数 做了一个取模的运算 shard = hash(_routing) % bumber_of_primary_shards
shard = hash(_routing) % number_of_primary_shards

  • Hash 算法确保文档均匀分散到分片中
  • 默认的_routing值是文档id
  • 可以自行制定routing数值,例如用相同国家的商品,都分配到指定shard
  • 设置index Settings 后,Primary数,不能随意修改的根本原因

Elasticsearch 集群分配多少分片合理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值