1.3 可扩展的和有弹性的:集群,节点和分片

Posted 大军001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.3 可扩展的和有弹性的:集群,节点和分片相关的知识,希望对你有一定的参考价值。

翻译地址:Scalability and resilience: clusters, nodes, and shards | Elasticsearch Guide [8.1] | Elastic

ES被构建的总是可用的,并且可以伴随着你的需要去进行扩展。它做这个是通过天生的分布式特性。对于一个集群你可以添加服务器(节点)去增加容量,以及ES会自动的分布你的数据到所有的节点上和查询加载你的数据在你的所有节点上。不需要改造你的应用,ES知道如何平衡多个节点的集群去支持扩展性和高可用。节点越多越好。

这个是如何工作的?在底层,一个ES索引真正的只是一个或者多个物理分片的逻辑组,在这里每一个分片是真正的独立索引。通过分配一个文档在一个索引上遍布在多个分片上,以及分配这些分片遍布在多个节点上,ES可以确保冗余的,这样既可以避免硬件故障也可以随着节点增加到集群中增加查询能力。随着集群增加(或者缩减),ES可以自动的迁移分片去平衡这个集群。

这里有两种类型的分片:主分片和副本。在一个索引中的每一个文档属于一个主分片。一个副本是一个主分片的拷贝。副本支持你的数据的拷贝作为备用去应对硬件故障以及增加查询的能力,像查询或者获取一个文档。

一个索引的主分片在创建的时候就被固定了,不能再修改了,但是这个副本可以随着被改变,不需要停止索引或者查询操作。

它取决于...

对于一个索引的所期望的分片数量和主分片的数量的配置,这里有一个性能的考虑和权衡。越多的分片,会导致在维护这些索引的时候成本会很高。这个分片的大小越大,ES在重新平衡集群的时候花费在移动分片的时间越长。

查询许多小的分片,会使得执行每一个分片会更快,但是更多的查询意味着更大的成本,因此查询少量的大的分片可能会更快。简言之...它依赖于。

作为一个起点:

  • 平均分片大小保持在几个G到几十个G之间为目标。对于基于时间基线的数据的使用场景,通常设置分片的范围在20G到40G。
  • 避免较大量的分片问题。一个节点拥有的分片数量对于可用的堆空间的比例是协调的。作为一个通用规则,堆空间的每个G的分片数量应该小于20。

对于你的使用场景,最好的方式去决定最佳的配置是通过testing with your own data and queries

一旦发生故障灾难

一个集群的所有节点互相之间需要好的,可靠的链接。为了更好的提供链接,你通常让这些节点处在相同的数据中心或者在数据中心附近。然而,为了保持高可用,你也需要避免任何的单点故障。一旦在一个地方出现主要故障,在另外一个地方的服务需要能够可以接收服务。这个答案是什么?是通过跨集群的副本实现(Cross-cluster replication--CCR)。

CCR提供了一种方式去自动的从主集群同步索引到一个副的远程集群,这个可以作为一个热的备份。如果这个主的集群失败了,这个副的集群可以做灾备。你也可以使用CCR去创建一个副集群去服务读请求,在地理位置上接近你的用户。

跨集群副本是被动的。在主集群上的这个索引,是活跃的主索引并且处理所有的写请求。索引复制到副集群中是只读的跟随者。

关心和维护

跟任何企业系统一样,你需要工具去稳固,管理,和监控你的ES集群。安全,监控和管理的特点被集成进了ES,可以让你去使用 Kibana 作为一个控制中心去管理你的集群。像data rollups 和 index lifecycle management 的产品特点帮助你聪明的管理你的数据。

以上是关于1.3 可扩展的和有弹性的:集群,节点和分片的主要内容,如果未能解决你的问题,请参考以下文章

1.3 可扩展的和有弹性的:集群,节点和分片

如何自动扩展分片 Akka 集群?

mongodb 集群分片

有状态集最佳实践的动态扩展

Spark复习-RDD

MongoDB 分片