Elasticsearch黑鸟教程10:分片设置 es number_of_shards和number_of_replicas
备注:此内容为《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。