分片分配、迁移和恢复
Elasticsearch 中的每个索引被划分为一个或多个分片。索引中的每个文档都属于一个单独的分片。
集群可以包含多个分片的副本。每个分片有一个特别的副本称为主分片,以及零个或多个非主副本称为副本分片。主分片副本作为所有索引操作的主要入口点。主分片副本上的操作随后会被转发到其副本分片。
副本分片在集群的节点之间维护数据的冗余副本,以防硬件故障,并增加处理读请求(如搜索或检索文档)的容量。如果主分片副本失败,那么一个副本分片会被提升为主分片,并接管主分片的责任。
在正常操作过程中,Elasticsearch 会在节点之间分配分片副本,为了平衡集群或满足新的分配约束而跨节点迁移分片副本,并恢复分片以初始化新的副本。在本主题中,你将了解这些操作是如何工作的,以及如何控制它们。
要了解如何优化集群中分片的数量和大小,请参阅调整分片大小。要了解读写操作如何跨分片和分片副本复制,请参阅读写文档。
分片分配是将分片副本分配给节点的过程。这可能发生在初始恢复、副本分配、重新平衡、向集群添加或移除节点时,或者当影响分配的集群或索引设置被更新时。
默认情况下,索引的主分片和副本分片可以分配给集群中的任何节点,并且可能会被迁移以重新平衡集群。
调整分片分配设置
你可以使用以下设置来控制分片副本的分配:
-
集群级别的分片分配设置:使用这些设置来控制整个集群中分片副本的分配和平衡。例如,你可能想要将节点分配到可用区域,或者防止某些节点被使用,以便进行维护。
-
索引级别的分片分配设置:使用这些设置来控制特定索引的分片副本的分配。例如,你可能想要将索引分配到特定数据层级的节点,或者分配到具有特定属性的节点。
分片恢复是初始化分片副本的过程,例如从快照恢复主分片或从主分片创建副本分片。当分片恢复完成时,恢复的分片将可用于搜索和索引。
恢复会在以下过程中自动发生:
-
当首次创建索引时。
-
当节点重新加入集群并使用其数据路径中的数据启动任何缺失的主分片副本时。
-
从主分片创建新的副本分片副本。
-
将分片副本迁移到同一集群中的不同节点。
-
执行快照恢复操作。
-
执行克隆、缩减或拆分操作。
你可以使用恢复或 cat recovery
API 来确定分片恢复的原因。
监控分片恢复
你可以使用以下 API 来监控分片分配:
-
使用
cat recovery
API 查看进行中和已完成的恢复列表。 -
使用索引恢复 API 查看有关特定恢复的详细信息。
分片迁移是将分片副本从一节点移动到另一节点的过程。这可能发生在节点加入或离开集群时,或者当集群正在重新平衡时。
当分片副本被迁移时,它会在目标节点上作为新的分片副本被创建。当分片副本完全分配和恢复后,旧的分片副本将被删除。如果被迁移的分片副本是主分片,那么新的分片副本在旧分片副本被删除之前会被标记为主分片。
调整分片迁移设置
你可以控制分片副本如何以及何时被迁移。例如,你可以调整控制何时迁移分片副本以平衡集群的重新平衡设置,或者可能触发迁移的基于磁盘的分片分配的高水位设置。这些设置是集群级别分片分配设置的一部分。
分片迁移操作还尊重分片分配和恢复设置。
关于ES分片的小知识
-
分片定义:
Elasticsearch中的分片(Shard)是数据分布和查询的基本单元。一个索引可以被分成多个分片,这些分片可以分布在集群的不同节点上,以提高数据的可扩展性和查询性能。 -
分片和副本:
每个分片都可以配置副本分片(Replicas),副本分片的数量直接影响数据的可靠性和查询的负载能力。副本分片允许Elasticsearch在分片所在节点故障时仍然提供查询服务,并且可以在多个节点上并行执行查询,提高性能。 -
分片分配:
Elasticsearch在集群中自动分配分片,这个过程考虑了集群的状态和配置。分片分配策略确保分片均匀分布在所有节点上,以平衡负载和优化资源利用。 -
分片迁移:
当集群中添加新节点或移除节点时,Elasticsearch会自动迁移分片以重新平衡集群。这个过程称为分片迁移(Shard Relocation),它是集群自我修复和扩展的一部分。 -
分片大小:
每个分片的最大大小应该控制在一定的范围内,通常建议不超过50GB。过大的分片会增加恢复时间和维护成本,而过小的分片则会增加资源开销和复杂性。 -
分片不可变性:
一旦索引创建,其主分片数量数量就不能再更改。如果需要调整这些设置,必须创建一个新的索引并将数据重新索引到新索引中。这也是为什么在创建索引时要仔细规划分片数量的原因。