Elasticsearch支持PB级全文索引,当索引上的数据量太大的时候,Elasticsearch通过水平拆分的方式将一个索引上的数据拆分出来分配到不同的数据块上,拆分出来的一个数据块称之为一个分片。目的是让数据访问的时候,通过不同的分片去访问不同的数据分片,从而降低Elasticsearch索引文件访问的频次,增强高并发下的搜索效率。
    在一个多分片的索引中写入数据时,通过路由来确定具体写入哪一个分片中,在索引创建的时候需要指定分片数量,并且分片的数量一旦确定就不能修改。
    分片是提高Elasticsearch的搜索和存储效率,副本的作用是提高数据的可用性。Elasticsearch会针对每一个分片定义若干个副本,副本的数据和分片的数据一致。分片和副本都可以处理读请求,而写请求只能在分片上完成,然后再由分片同步到对应的副本上。
    如图所示,假设有三个Elasticsearch节点服务器,将Elasticsearch索引设置4个分片,同时每个分片设置2个副本。4个分片S0、S1、S2、S3 分片放在3个Elasticsearch服务器节点上。这4个分片也称为主分片,用来写入数据。同时每个分片的副本也会分片放到与之不同的服务器节点上。例如S1分片的2个副本R1 就放到了ES1 和ES3 节点上了。通过这种方式保证数据的可用性,一旦一个节点上的分片挂了,其他节点上的副本可以马上顶替。
    41369500_1629695890.png