先回顾几个概念:ES的Index是个逻辑概念,实际由若干shard组成,而shard就是Lucene的Index,即真正存储数据的实体。当有数据需要存储的时候,就需要先分配shard。具体来说需要分配shard的场景包括:数据恢复,主分片(primary)、副本分片的分配,再平衡(rebalancing),节点的新增、删除。对于分布式存储系统来说,数据的分布非常重要,ES shard的分配工作由ES的master节点负责。
ES提供了多种分配策略的支持,简单来说就是用户可以通过配置定义一些“策略”或者叫“路由规则”,然后ES会在遵守这些策略的前提下,尽可能的让数据均匀分布。比如可以配置机房、机架属性,ES会尽量让主数据和副本数据分配在不同的机房、机架,起到容灾的作用。再比如,可以配置一些策略,让数据不分配到某些节点上面,这在滚动升级或者数据迁移的时候非常有用。不过本文并不会介绍所有这些策略,只聚焦于默认的基于磁盘的分配策略,因为这部分是最常用的。
先说一下再平衡。
再平衡
再平衡这个概念在分布式存储系统里面很常见,几乎是标配。因为各种各样的原因(比如分配策略不够智能、新增节点等),系统各个节点的数据存储可能分布不均,这时候就需要有能够重新让数据均衡的机制,即所谓的再平衡。有些系统的再平衡需要用户手动执行,有些则是自动的。ES就属于后者,它的再平衡是自动的,用户不参与,也几乎不感知。</