ElasticSearch--分片和副本--原理

原文网址:ElasticSearch--分片和副本--原理_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍ES的分片和副本的原理。

什么是分片

        Elasticsearch集群允许系统存储的数据量超过单机容量,这是通过shard实现的。在一个索引index中,数据(document)被分片处理(sharding)到多个分片上。也就是说:每个分片都保存了全部数据中的一部分。

        一个分片是一个 Lucene 的实例,它本身就是一个完整的搜索引擎。文档被存储到分片内,但应用程序直接与索引而不是与分片进行交互。

什么是副本

说明

        为了解决访问压力过大时单机无法处理所有请求的问题,Elasticsearch集群引入了副本策略replica。副本策略对index中的每个分片创建冗余的副本。

副本的作用如下:

1. 提高系统容错性

        当分片所在的机器宕机时,Elasticsearch可以使用其副本进行恢复,从而避免数据丢失。

2. 提高ES查询效率

        处理查询时,ES会把副本分片和主分片公平对待,将查询请求负载均衡到副本分片和主分片。

副本分片是越多越好吗?

答案当然是 no ,原因有以下两点:

(1)多个 replica 可以提升搜索操作的吞吐量和性能,但是如果只是在相同节点数目的集群上增加更多的副本分片并不能提高性能,因为每个分片从节点上获得的资源会变少,这个时候你就需要增加更多的硬件资源来提升吞吐量。

(2)更多的副本分片数提高了数据冗余量,保证了数据的完整性,但是根据上边主副分片之间的交互原理可知,分片间的数据同步会占用一定的网络带宽,影响效率,所以索引的分片数和副本数也不是越多越好。

设置分片与副本的方法

创建索引的命令:

PUT /my_temp_index
{
    "settings": {
        "number_of_shards" :   5,
        "number_of_replicas" : 1
    }
}
  • number_of_shards
    • 每个索引的主分片数,默认值是 5 。
    • 这个配置在索引创建后不能修改。这里和索引分片的算法有关,因为索引通过取模算法判断分到哪个分片,如果改变了主分片数就无法正常查询之前的索引。
  • number_of_replicas
    • 每个主分片的副本数,默认值是 1 。
    • 这个配置可以修改。

分片示例

示例1:启动2个ES节点。创建5个分片,1个副本

结果如下:

也就是:

         上图中,黄色的代表主分片,绿色的是副本。可以发现,分片与其副本不在同一个节点内。这是非常合理的,因为副本本来就是主分片的备胎,当主分片节点挂了,另外一个节点的副本将会充当主分片,如果它们在同一个节点内,副本将发挥不到作用。

示例2:启动3个ES节点。创建5个分片,1个副本

分片的路由原理

见 :ElasticSearch--分片的路由原理_IT利刃出鞘的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/126407470
今日推荐