一 分片概念以及设置

分片概念:一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。我们往 Elasticsearch 添加数据时需要用到索引 —— 保存相关数据的地方。索引实际上是指向一个或者多个物理 分片逻辑命名空间。

分片分为主分片和副本,数量可以设置。

举个例子:

假设elasticsearch集群由6台服务器,分别是 node-1、node-2、node-3、node-4、node-5、node-6

分片以及副本的数量在创建索引时候设置:

PUT /index-test-1
{
    "settings" : {
        "index" : {
            "number_of_shards" : 6,
            "number_of_replicas" : 1,
            "max_result_window" : 50000
        } 
    }
}

其中分片数量设置为 6,副本数量设置成 1;即index 包含6个主分片,6个副本,均衡散落在6台服务器上;

下图是kinaba视图,可以看出该索引分片的散落位置

node -1 : 主分片 5 、副本 4               

node -2 : 副本 0

node -3 : 主分片 0 、副本 1               

主分片 4

node -5 : 副本 3 、副本 5                    

node -6 : 主分片 1 、主分片 2

主分片负责读、写,副本只负责读。

ES分片设置 es分片数量_数据

二 分片动态变化

索引创建好之后,在每个节点上的分片或者主从关系并不是一成不变的;

比如node-3 节点因为网络原因失联了,集群该如何应对? (这在生产环境中实际遇见过此问题)

集群会对分片进行再均衡,具体如下:


  1. Node-3 在网络中失联了
  2. Master 立即注意到了这个节点的离线,它决定在集群内提拔其他拥有 node-3 上面的主分片对应的副本分片为主分片; node-2上的副本0提拔为主分片
  3. 在副本被提拔为主分片以后,master 节点开始执行恢复操作来重建缺失的副本。集群中的节点之间互相拷贝分片数据,网卡压力剧增,集群状态尝试变绿。即重新拷贝一个副本1 散落在其他节点。
  4. 由于目前集群处于非平衡状态,这个过程还有可能会触发小规模的分片移动。其他不相关的分片将在节点间迁移来达到一个最佳的平衡状态


分片动态变化保证了集群数据的安全性;同时也会引发其他问题,比如Node-3是偶尔失联,几分钟之内有回来了,那么这些操作也会不会被终止,恰巧如果集群数据量巨大,那么这个机制会引发大量的IO操作,以至于集群卡死。这样的结果肯定不是我们想要的。如何解决这个问题,我们将在另外一篇文章集群管理进行解答。


参考:

《Elasticsearch权威指南》