elasticsearch 中分片(Shards)非常非常重要,直接和性能挂钩。以下仅为个人实际使用 elasticsearch 4年的理解,可能存在误解,一切以官方文档为准。
分片重要性
Es中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能、安全和稳定性, 所以很有必要了解一下它。
分片是什么?
简单来讲就是咱们在ES中所有数据的文件块。 实列场景:
咱们设置了索引A有2个分片,我们向索引A中插入10条数据,那么这10条数据分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。
和主流关系型数据库的表分区的概念有点类似,如果你比较熟悉关系型数据库的话。
分片的设置
创建Mapping的设置(curl) PUT indexName { "settings": { "number_of_shards": 5 } } 注意
1、默认索引是5个分片
2、分片一定设置是不可以修改的,只能新建新索引解决
分片个数(数据节点计算)
分片个数是越多越好还是越少越好了?这个问题是根据数据量决定的,正确来说是根据数据入Es后文件大小决定的。 实列场景:
如果索引A总文件大小是300G,改怎么定制方案了?
建议:(仅参考)
1、保证每一个分片数据大小在30GB左右
2、每一个节点最多存放一个分片
3、节点数大于等于分片数
根据建议,至少需要十个分片。
结果: 建10个数据节点,Mapping 指定分片数为 10,满足每一个节点一个