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:找到拥有最少分片个数的节点