今日视点:【ES三周年】ES元信息
2023-02-21 07:13:24 来源:腾讯云
背景
在ES中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时即可从磁盘上读取对应元信息并恢复。
(资料图)
分片元信息
1、具体内容
集群中每个分片都有属于自己的元信息,该元信息包括:
public final String indexUUID;public final boolean primary; public final AllocationId allocationId;
对应的类图如下:
分片元信息在shard恢复时会被用到:
首先是GateWayAllocator
在恢复主备分片时,会从集群各个节点获取对应分片元信息(节点读取分片元信息时会判断本地分片的indexUUID
和索引的UUID
相同),用于判断是否可以本地恢复,如果满足条件(如分片的allocatId在in_sync_allocations中)则会从本地恢复分片;其次是在创建IndexShard
时,会判断本地分片的indexUUID
是否和索引的UUID
相同,如果不同则报错(避免分片或索引出现异常)。2、持久化
分片元信息会保存在磁盘上,作用:,对应文件路径路径:${data.path}/nodes/${node.id}/indices/${index.UUID}/${shard.id}/_state/state-xxx.st
实现元信息序列化的代码:
public void toXContent(XContentBuilder builder, ShardStateMetaData shardStateMetaData) throws IOException { builder.field(PRIMARY_KEY, shardStateMetaData.primary); builder.field(INDEX_UUID_KEY, shardStateMetaData.indexUUID); if (shardStateMetaData.allocationId != null) { builder.field(ALLOCATION_ID_KEY, shardStateMetaData.allocationId); }}
分片被持久化的时机有两种方式,其一是分片被创建的时候,此时会分片的元信息持久化,其二是集群状态变化的时候(集群状态变化的时候,会判断分片状态是否变化,只有在当前分片的状态发生变化才更新本地文件,避免大量无效的IO)。
分片持久化的作用前面也提到了,主要是用于分片的恢复。
索引元信息
1、具体内容
集群中每个索引都有属于自己的元信息,该元信息包括:
private final int routingNumShards; private final int routingPartitionSize;private final int numberOfShards;private final int numberOfReplicas; private final Index index; private final long version;private final long[] primaryTerms;private final State state;private final ImmutableOpenMap aliases;private final Settings settings;private final ImmutableOpenMap mappings;private final ImmutableOpenMap customs;private final ImmutableOpenIntMap> inSyncAllocationIds;
对应类图如下:
evernotecid://9B7AC1A3-2163-4103-A68D-1127DA246949/appyinxiangcom/8902081/ENResource/p3135
索引元信息主要是用于提供索引的配置信息以及mapping信息,以便对索引执行相应操作。
2、持久化
索引元信息会保存在磁盘上,作用:,对应文件路径路径:${data.path}/nodes/${node.id}/indices/${index.UUID}/_state/state-xxx.st
实现元信息序列化的代码:
public static void toXContent(IndexMetaData indexMetaData, XContentBuilder builder, ToXContent.Params params) throws IOException { builder.startObject(indexMetaData.getIndex().getName()); builder.field(KEY_VERSION, indexMetaData.getVersion()); builder.field(KEY_ROUTING_NUM_SHARDS, indexMetaData.getRoutingNumShards()); builder.field(KEY_STATE, indexMetaData.getState().toString().toLowerCase(Locale.ENGLISH)); boolean binary = params.paramAsBoolean("binary", false); builder.startObject(KEY_SETTINGS); indexMetaData.getSettings().toXContent(builder, new MapParams(Collections.singletonMap("flat_settings", "true"))); builder.endObject(); builder.startArray(KEY_MAPPINGS); for (ObjectObjectCursor cursor : indexMetaData.getMappings()) { if (binary) { builder.value(cursor.value.source().compressed()); } else { builder.map(XContentHelper.convertToMap(new BytesArray(cursor.value.source().uncompressed()), true).v2()); } } builder.endArray(); for (ObjectObjectCursor cursor : indexMetaData.getCustoms()) { builder.startObject(cursor.key); cursor.value.toXContent(builder, params); builder.endObject(); } builder.startObject(KEY_ALIASES); for (ObjectCursor cursor : indexMetaData.getAliases().values()) { AliasMetaData.Builder.toXContent(cursor.value, builder, params); } builder.endObject(); builder.startArray(KEY_PRIMARY_TERMS); for (int i = 0; i < indexMetaData.getNumberOfShards(); i++) { builder.value(indexMetaData.primaryTerm(i)); } builder.endArray(); builder.startObject(KEY_IN_SYNC_ALLOCATIONS); for (IntObjectCursor> cursor : indexMetaData.inSyncAllocationIds) { builder.startArray(String.valueOf(cursor.key)); for (String allocationId : cursor.value) { builder.value(allocationId); } builder.endArray(); } builder.endObject(); builder.endObject();}
索引原型被持久化的时机有两种方式,其一是节点启动时,此时如果如果索引元信息有发生变化,则会更新索引原型;其二是集群中索引的元信息变化时(如索引的mapping信息变化),此时会更新对应索引元信息;
索引元信息读取时机:
节点启动时用于恢复索引元信息:索引配置信息变更时判断索引元信息是否需要再次持久化:如果原来索引元信息不存在或发生变化则再次持久化分片删除时判断本节点索引元信息是否存在GateWayAllocator
在恢复主备分片时,会从集群各个节点获取对应分片元信息(节点读取分片元信息时会判断本地分片的indexUUID
和索引的UUID
相同)集群元信息
1、具体内容
集群的元信息包括:
private final String clusterUUID;private final long version;private final Settings transientSettings; private final Settings persistentSettings; private final Settings settings;private final ImmutableOpenMap indices; private final ImmutableOpenMap templates;private final ImmutableOpenMap customs;private final int numberOfShards;
对应类图如下:
evernotecid://9B7AC1A3-2163-4103-A68D-1127DA246949/appyinxiangcom/8902081/ENResource/p3147
集群元信息主要是用于提供集群以及索引相关的配置信息信息,以便对集群或索引上执行相应操作提供信息。
2、持久化
集群元信息会保存在磁盘上,作用:,对应文件路径路径:${data.path}/nodes/${node.id}/_state/global-xxx.st
实现元信息序列化的代码:
public static void toXContent(MetaData metaData, XContentBuilder builder, ToXContent.Params params) throws IOException { XContentContext context = XContentContext.valueOf(params.param(CONTEXT_MODE_PARAM, "API")); builder.startObject("meta-data"); builder.field("version", metaData.version()); builder.field("cluster_uuid", metaData.clusterUUID); if (!metaData.persistentSettings().isEmpty()) { builder.startObject("settings"); metaData.persistentSettings().toXContent(builder, new MapParams(Collections.singletonMap("flat_settings", "true"))); builder.endObject(); } if (context == XContentContext.API && !metaData.transientSettings().isEmpty()) { builder.startObject("transient_settings"); metaData.transientSettings().toXContent(builder, new MapParams(Collections.singletonMap("flat_settings", "true"))); builder.endObject(); } builder.startObject("templates"); for (ObjectCursor cursor : metaData.templates().values()) { IndexTemplateMetaData.Builder.toXContent(cursor.value, builder, params); } builder.endObject(); if (context == XContentContext.API && !metaData.indices().isEmpty()) { builder.startObject("indices"); for (IndexMetaData indexMetaData : metaData) { IndexMetaData.Builder.toXContent(indexMetaData, builder, params); } builder.endObject(); } for (ObjectObjectCursor cursor : metaData.customs()) { if (cursor.value.context().contains(context)) { builder.startObject(cursor.key); cursor.value.toXContent(builder, params); builder.endObject(); } } builder.endObject();}
集群元信息持久化时机有两个:其一是节点启动时验证集群的元信息有变化则会重新持久化,其二是集群的元信息发生变化(集群的配置发生变化)则会重新初始化。
索引元信息读取时机:节点启动时用于恢复索引集群元信息用于数据恢复。
节点元信息
1、具体内容
节点的元信息包括:
private final String nodeId;
对应类图如下:
evernotecid://9B7AC1A3-2163-4103-A68D-1127DA246949/appyinxiangcom/8902081/ENResource/p3148
节点元信息主要是用于在集群中唯一标记节点,以便ES在进行各项操作时能唯一区分节点。
2、持久化
节点元信息会保存在磁盘上,作用:,对应文件路径路径:${data.path}/nodes/${node.id}/_state/node-xxx.st
实现元信息序列化的代码:
public void toXContent(XContentBuilder builder, NodeMetaData nodeMetaData) throws IOException { builder.field(NODE_ID_KEY, nodeMetaData.nodeId);}
节点元信息持久化时机:节点启动时会持久化,并且及时已经持久化了会再次写入目的是保证所有的路径上有最新的节点元信息。
索引元信息读取时机:节点启动时读取,如果节点元信息不存在则会为节点生成新的节点元信息。
关键词: ElasticsearchService Java
为你推荐
-
今日视点:【ES三周年】ES元信息
-
niconico动画有app吗_niconico动画网站官网|播报
-
吃货大福利最全长沙美食地图建议收藏!_天天热闻
-
民间债务追讨过程中认可查债务人名下财产吗 全球播资讯
-
天天即时看!祥源文旅董秘回复:1、根据中国证监会最近一期公布的《2021年3季度上市公司行业分类结果》
-
植物2中文版狂野西部植物危机第3天攻略_植物2狂野西部19天简单|天天新视野
-
最新快讯!同花顺2月20日盘中涨幅达5%
-
传播非遗文化
-
快播:汽车违章查询网站北京_汽车违章查询网
-
查尔斯国王加冕礼,阿黛尔等英国歌星以“档期已满”为由拒绝献唱 世界热文
-
播报:土叙地震巨大伤亡的背后:被“特赦”的劣质建筑
-
前沿资讯!如何查询实时话费_如何查询实时话费套餐
-
全球观点:追逐火,因为风的缘故——2023年2月温州市1.5模作文深度解析
-
走进区域看发展|“川渝通办”让办事有速度服务有温度 焦点资讯
-
环球微动态丨3万+美妆人齐聚,市场“活”了!
-
当前速看:美前总统吉米·卡特将接受临终关怀具体详细内容是什么
-
心脏衰竭严重吗能治好吗_心脏衰竭严重吗
-
每日快讯!这四大生肖不要出现在一个家庭中,否则影响家庭和睦
-
WTA迪拜站签表出炉:首轮上演金花德比,一姐张帅大战郑钦文-速递
-
西宁城西公安:跑出追逃“加速度”
推荐内容
- 今日视点:【ES三周年】ES元信息
- niconico动画有app吗_niconico动画网站官网|播报
- 吃货大福利最全长沙美食地图建议收藏!_天天热闻
- 民间债务追讨过程中认可查债务人名下财产吗 全球
- 天天即时看!祥源文旅董秘回复:1、根据中国证监
- 植物2中文版狂野西部植物危机第3天攻略_植物2狂野
- 最新快讯!同花顺2月20日盘中涨幅达5%
- 传播非遗文化
- 快播:汽车违章查询网站北京_汽车违章查询网
- 查尔斯国王加冕礼,阿黛尔等英国歌星以“档期已满
- 播报:土叙地震巨大伤亡的背后:被“特赦”的劣质
- 前沿资讯!如何查询实时话费_如何查询实时话费套餐
- 全球观点:追逐火,因为风的缘故——2023年2月温
- 走进区域看发展|“川渝通办”让办事有速度服务有
- 环球微动态丨3万+美妆人齐聚,市场“活”了!
- 当前速看:美前总统吉米·卡特将接受临终关怀具体
- 心脏衰竭严重吗能治好吗_心脏衰竭严重吗
- 每日快讯!这四大生肖不要出现在一个家庭中,否则
- WTA迪拜站签表出炉:首轮上演金花德比,一姐张帅
- 西宁城西公安:跑出追逃“加速度”
- 电脑对人有什么危害_电脑对人有什么危害吗|世界热
- 教你荷叶头怎么弄_荷叶头怎么打理
- 热门看点:内蒙古自治区凉城县发布道路结冰黄色预
- 天天看热讯:合肥被称为什么_合肥的别称介绍
- 世界观察:电商代运营岗位好做吗_电商代运营是做
- 每日视讯:女人月经一般几天才正常_女人月经一般
- 每日关注!扬州第二发电有限责任公司
- 2023春游赏花去哪里好
- 谷歌推出ChromeOS 110 更新:引入超分辨率音频
- 河北邢台:2035年农村基本具备现代生活条件|环球
- 北京电子科技学院分数_北京电子科技学院分配|天天
- 汽车疑问解答:a5掀背是什么意思?
- 360邮箱app_360邮箱登陆首页登录
- 世界即时:广东广州,一男子的女邻居以家里要清洗
- 让修鞋、配钥匙等“小修小补”规范有序回归百姓生
- 全球观焦点:哪些球星今夏可能加盟湖人?美媒列10
- 【全球新要闻】苏州渭塘镇发生火灾致6人死亡 4层
- 新资讯:美国爆料记者:两天收千余封电邮 网友直
- 股票质押都有哪些风险?_全球微动态
- 汽车疑问解答:宝骏发动机是哪里产的
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经济
-
中新网通辽10月18日电 (记者 张林虎)18日,记者从内蒙古自治区通辽市奈曼旗公安局获悉,国家一级保护动物--梅花鹿误入当地村民羊群,
-
中新网杭州10月18日电 (王题题 胡燕婕)云天收夏色,浅秋正渐浓。10月18日,浙江杭州市西湖游船有限公司推出的惠民多站点“西湖环湖游
-
中新网福州10月18日电 (记者 龙敏 王东明)福州市晋安区官方18日晚间通报,18日14时47分,晋安区岳峰镇化工路爱摩轮商业广场项目摩天
-
中新网兰州10月18日电 (闫姣 艾庆龙 吉翔)“红山白土头,黄河向西流。”不少人疑问,天下黄河向东流,为何甘肃永靖县这段黄河却向西
-
中新网北京10月18日电 《清华城市健康设施指数》18日在北京发布。报告成果显示,城市健康设施指数领先城市以中心城市和东部沿海城市