1、简介
负责集群元信息的存储和集群重启时的恢复
2、元数据
元数据信息包含以下几种
- 集群元数据
- 索引层面元数据
- 分片层面元数据
分别对应es中的数据结构
2.1 Metadata
其对应的文件名在datapaths/_state/目录下,对应文件名为global-{generation}.st
包含的信息有
名称 | 说明 |
version | 当前版本号,每次更新加1 |
clusterUUID | 集群的唯一id |
clusterUUIDCommitted | |
coordinationMetadata | |
persistentSettings | 持久化的集群设置 |
indices | 所有Index的Meta |
hashesOfConsistentSettings | |
templates | 所有模版的Meta |
customs | 自定义配置 |
2.2 IndexMetadata
索引层元数据,其对应的文件名在datapaths/_state/目录下,对应文件名为state-{generation}.st
包含的信息有
名称 | 说明 |
settings | numbersOfShards,numbersOfRepilicas等配置 |
mappings | Index的mapping |
aliases | 别名 |
in_sync_allocations | 处于InSync状态的AllocationId |
rollover_info | |
primary_terms | primaryTerm在每次Shard切换Primary时加1,用于保序 |
timestamp_range | |
state | Index的状态, 是个enum,值是OPEN或CLOSE |
version | 当前版本号,每次更新加1 |
mapping_version | |
settings_version | |
aliases_version | |
routing_num_shards | 用于routing的shard数, 只能是该Index的numberOfShards的倍数,用于split |
system |
2.3 ShardStateMetadata
包含的信息有
名称 | 说明 |
primary | 是否是主分片 |
index_uuid | 索引的uuid |
allocation_id | 分配id |
3、元数据的持久化
在处理发布请求时,CoordinationState#handlePublishRequest会调用PersistedState#setLastAcceptedState,通过调用GatewayMetaState的内部类LucenePersistedState#setLastAcceptedState,最终是PersistedClusterStateService.Writer来更新数据。
4、元数据的恢复
4.1 影响恢复的参数
参数 | 说明 |
gateway.expected_data_nodes | 预期的节点数。加入集群的节点数达到这个数量后立即开始gateway的恢复,默认为-1 |
gateway.recover_after_time | 如果没有达到预期的节点数,则恢复过程将等待配置的时间,再尝试恢复。默认是0 |
gateway.recover_after_data_nodes | 只要配置数量的节点加入集群就可以开始恢复 |
4.2 恢复方式
当发现节点是Coordinator时,直接使用分片层元数据恢复。
发现节点不是Coordinator时,gateway模块负责集群层和索引层的元数据恢复,分片层的元数据恢复由allocation模块实现,但是由gateway模块在执行完上述两个层次恢复工作后触发。
参考资料: