Elasticsearch 基本概念- Replica(二)

2023-05-08 11:08:52 浏览数 (1)

副本如何工作?

在 Elasticsearch 中,每个副本都是一个完整的分片拷贝。这意味着副本中包含与主分片相同的所有数据,并且可以完全独立地提供服务。

当索引操作在主分片上执行时,Elasticsearch 会自动将这些操作传播到副本分片上,以便在发生故障时进行故障转移。这些操作包括文档索引、更新和删除等操作。

如果主分片变为不可用状态,Elasticsearch 会自动从可用的副本中选择一个作为新的主分片。选择新的主分片的过程称为选举。Elasticsearch 会选择具有最高副本。

对于一个拥有多个副本的索引,Elasticsearch会将每个副本分配到不同的节点上,以保证索引的高可用性。当一个主分片出现故障时,Elasticsearch会从它的副本中自动选举一个新的主分片,使得数据的可用性不受影响。

副本的数量可以在索引创建时指定。每个主分片可以有0个或多个副本。副本的数量不仅影响到索引的可用性,还影响到搜索性能。由于副本可以跨越多个节点,因此它们可以并行地处理搜索请求,从而提高搜索速度。

在索引中,副本是在主分片之后创建的,它们将自动复制主分片中的所有数据。Elasticsearch使用复制协议来保持主分片和副本之间的数据同步。当主分片接收到新的文档时,它会将该文档写入本地的Lucene索引,并将该文档的副本分发给每个副本。每个副本都会将副本写入本地的Lucene索引,并将副本的确认发送回主分片。当主分片收到所有副本的确认时,该文档被视为成功索引。

副本数量的配置可以在索引创建时指定,也可以在索引创建后动态更改。下面是一些常用的副本管理API:

  • _shrink API 用于将现有索引缩小到一个较小的大小,并在缩小后的索引中重新分配副本。
  • _reindex API 用于将一个或多个索引中的文档重新索引到新的索引中,并在新的索引中重新分配副本。
  • _update_by_query API 用于更新一个或多个索引中的文档,并在新的索引中重新分配副本。

下面是一些有关副本管理的常见示例:

创建一个有3个副本的索引:

代码语言:javascript复制
PUT /my_index
{
  "settings": {
    "number_of_replicas": 3
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "author": {
        "type": "keyword"
      }
    }
  }
}

将现有索引缩小到一个较小的大小,并在缩小后的索引中重新分配副本:

代码语言:javascript复制
POST /my_index/_shrink/my_shrunk_index
{
  "settings": {
    "index.number_of_replicas": 1
  }
}

0 人点赞