yangyang12138

导航

es(三)

一、元数据

  集群层面元数据,索引层面元数据,分片层面元数据

  MetaData(集群),主要是clusterUUID、settings、templates等

  IndexMetaData(索引层),主要是numberOfShards、mappings等

  ShardStateMetaData(分片层),主要是version、indexUUID、primary等

  主节点监控集群状态,当集群状态发生变化时由主节点公布集群状态,数据节点收到数据后做持久化操作。

  GatewayMetaState类负责接收集群状态,它继承自ClusterStateApplier。

  主节点流程:

    主要实现在GatewayService类中,它继承自ClusterStateListener,在集群状态发生变化时触发,仅由master时执行

      1.master选举成功之后,判断其持有的集群状态中是否存在STATE_NOT_RECOVERED_BLOCK,如果不存在,则说明元数据已恢复,跳过gateway恢复过程,否则等待。

      2.Master从各个节点主动获取元数据信息

      3.从获取的元数据信息中选择版本号最大的作为最新的元数据,包括集群级、索引级

      4.两者确定后,调用allocation模块的reroute,对未分配的分片执行分配,主分片分配过程中会异步获取各个shard级别元数据。

二、allocation

  触发分片的时机

    index增删、node增删、手工reroute、replica数量改变、集群重启

  allocators

    负责为某个特定的分片分配目的节点,每个allocator的主要工作是根据某种逻辑得到一个节点列表,然后调用deciders去决策,根据决策结果选择一个目的node。

    allocators分为gatewayAllocator和shardsAllocator两种,前者是为了找到现有分片,后者是根据权重策略在集群的各个节点间均衡分片分布。

    gatewayAllocator又分为主分片和副分片的allocator。

      primaryShardAllocator:找到那些拥有某分片最新数据节点

      replicaShardAllocator:找到磁盘上拥有这个分片数据的节点

      BalancedShardsAllocator:找到拥有最少分片个数的节点

 

posted on 2020-08-12 01:32  杨杨09265  阅读(186)  评论(0编辑  收藏  举报