备注:此内容为《Elasticsearch黑鸟教程(入门系列)》之十,修订于2020年12月13日。

1、分片是什么?

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,每一份就是一个分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。

每个分片本身也是一个功能完善并且独立的"索引",这个"索引"可以被放置到集群中的任何节点上。

2、分片为什么重要?

分片之所以重要,主要有两方面的原因:

(1)允许你水平分割/扩展存储容量

(2)允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

至于一个分片怎样分布,它的文档怎样聚合搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了。这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许为分片创建一份或多份拷贝,这些拷贝叫做副本分片。

总之,每个索引可以被分成多个分片。一个分片也可以被复制多次。一旦复制了,每个索引就有了主分片和副本分片之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本分片的数量,但是不能改变主分片的数量。

默认情况下,Elasticsearch中的每个索引被分片1个主分片和1个副本分片。

3、分片参数设置

number_of_shards:主分片数,默认为1

number_of_replicas:副本分片数,默认为1

可以在线修改副本分片数 number_of_replicas ,但主分片数 number_of_shards 不可以在线改

curl -XPUT 'http://localhost:9200/myindex/_settings' -H 'Content-Type: application/json' -d ' 
{
    "index" : {
        "number_of_replicas" : 0
    }
}
'

也可以在配置文件 elasticsearch.yml 中进行修改:

index.number_of_shards:

设置默认索引分片个数,默认为1片。索引分片对ES的查询性能有很大的影响,在应用环境,应该选择适合的分片大小。

index.number_of_replicas:

设置默认索引副本个数,默认为1个副本。此处的1个副本是指index.number_of_shards的一个完全拷贝;如果有5个主分片1个副本分片,即总分片数为10。

标签: none

添加新评论