Elasticsearch 7.9 之 Scalability and resilience:clusters, nodes and shards

Elasticsearch 旨在始终可用并根据您的需求扩展。它是通过自然分布来实现的。您可以将服务器(节点)添加到集群以增加容量,Elasticsearch 会自动在所有可用节点之间分配数据和查询负载。无需大修大改您的应用程序,Elasticsearch 知道如何平衡多节点集群以提供扩展性和高可用性,节点越多越好。

这是如何运作的?在幕后,Elasticsearch 索引实际上只是一个或多个物理碎片的逻辑分组,其中每个碎片实际上是一个独立的索引。通过将一个索引中的文档分配在多个分片,并将这些分片在多个节点之间进行分配, Elasticsearch 可以确保冗余,这既可以防止硬件故障,又可以在将节点添加到集群中时提高查询能力。随着集群的增长(或收缩), Elasticsearch 会自动迁移碎片以重新平衡集群。

分片有两种类型:主分片和副本分片。索引中的每个文档都属于一个主分片。一个副本分片是一个主分片的拷贝。副本分片可提供数据的冗余副本,以防止硬件故障,并提高处理读取请求(如搜索或检索文档)的能力。

创建索引时,索引中主分片的数量是固定的,但是副本分片的数量可以随时更改,而不会中断索引或查询操作。

It depends

在分片大小和为索引配置的主分片数量方面,存在许多性能方面的考虑和权衡取舍。分片越多,维护这些索引的开销就越大。分片大小越大,当 Elasticsearch 需要重新平衡集群时,分片移动所需的时间就越长。

查询很多小的分片会使每个分片的处理速度更快,但是更多的查询意味着更多的开销,因此查询较小数量的大分片可能会更快。简而言之…要视情况而定。

作为起点:

  • 旨在将平均分片大小保持在几 GB 到几十 GB 之间。对于具有基于时间的数据的用例,通常会看到 20GB 到 40GB 范围内的碎片。
  • 避免庞大的碎片问题。节点可以容纳的分片数量与可用堆空间成比例。通常,每 GB 堆空间中的分片数量应少于 20。

确定用例最佳配置的最佳方法是通过使用自己的数据和查询进行测试。

In case of disaster

出于性能原因,群集内的节点必须位于同一网络上。跨不同数据中心节点的集群的分片平衡花费太长时间。但是高可用性架构要求您避免将所有鸡蛋都放在一个篮子里。如果一个位置发生重大故障,则另一个位置的服务器需要能够无缝地接管,答案就是跨集群复制(CCR)。

CCR 提供了一种方法,可以自动将索引从主集群同步到可作为热备份的辅助远程集群。如果主集群发生故障,则辅助集群可以接管。您还可以使用 CCR 创建辅助集群,以接近地理位置的方式向您的用户提供读取请求服务。

跨集群复制是主动-被动模式。主集群上的索引是活动的领导者索引,并处理所有写请求。复制到辅助集群的索引是只读的关注者。

Care and feeding

与任何企业系统一样,您需要工具来保护,管理和监视 Elasticsearch 集群。集成到 Elasticsearch 中的安全,监视和管理功能使您可以将 Kibana 用作控制中心来管理集群。数据汇总和索引生命周期管理等功能可帮助您随着时间的推移智能地管理数据。

详情见官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/scalability.html

翻译不易,请勿盗用,如使用请标明出处。

上一篇:Java中的线程安全双向关联


下一篇:内存耗用:VSS/RSS/PSS/USS 介绍