分片(shard)
ES中的概念,类似于结构化数据库中分库分表的概念。每个分片保存索引的一部分数据,分配到集群的各个节点上,每个节点可以拥有 多个分片。
分片是段(segment)和提交点的集合。
分片分为主分片(primary shard)和副本分片(replica shard)。
主分片(primary shard)
用于写入数据的分片,每个索引的主分片数默认为1,通过index.number_of_shards
修改。
当写入数据时,通过路由来确定具体写入哪个主分片:
shard = hash(routing) % number_of_primary_shards
routing默认为文档的_id
。
由于此路由规则,索引的主分片数在创建后就不能修改。
副本分片(replica shard)
主分片的副本,可以用于处理读请求。
每个主分片有一个或多个复制分片。复制分片越多(复制分片所处的节点越多),就能调用更多的资源,处理的搜索吞吐量就越大。
当写操作在主分片上完成时,ES并发将数据并发复制到主分片的所有分片上,采用[乐观锁]进行锁控制,当所有副本分片报告成功后,主分片向客户端返回成功响应。