环球今热点:【ES三周年】ES元信息
腾讯云 2023-02-18 02:11:54

背景

在ES中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时即可从磁盘上读取对应元信息并恢复。

分片元信息

1、具体内容

集群中每个分片都有属于自己的元信息,该元信息包括:

public final String indexUUID;public final boolean primary;                        public final AllocationId allocationId;

对应的类图如下:


(资料图片仅供参考)

image.png

分片元信息在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

image.png

索引元信息主要是用于提供索引的配置信息以及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

image.png

集群元信息主要是用于提供集群以及索引相关的配置信息信息,以便对集群或索引上执行相应操作提供信息。

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

image.png

节点元信息主要是用于在集群中唯一标记节点,以便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);}

节点元信息持久化时机:节点启动时会持久化,并且及时已经持久化了会再次写入目的是保证所有的路径上有最新的节点元信息。

索引元信息读取时机:节点启动时读取,如果节点元信息不存在则会为节点生成新的节点元信息。

环球今热点:【ES三周年】ES元信息

2023-02-18 02:11:54

五粮液:春晚抽奖二次宣传累计实现品牌曝光量1.17亿人次_滚动

2023-02-17 22:44:26

全球讯息:什么是少年宫_什么是少年儿童年龄

2023-02-17 19:52:16

天天新消息丨洪城环境:子公司联合中标4.6亿元生活污水处理项目

2023-02-17 17:59:27

一艘载有69名罗兴亚难民船只滞留印尼西部海岸|环球速递

2023-02-17 16:33:57

岸田文雄就核电站延长运行时间提出计划_天天热点

2023-02-17 14:55:41

“Thank you,China!”万里驰援土耳其的福建勇士收到温暖“回礼”|世界简讯

2023-02-17 12:56:20

水边的阿狄丽娜钢琴曲分解_水边的阿狄丽娜钢琴曲

2023-02-17 10:40:24

从学情出发,把语文教“活”

2023-02-17 08:55:44

世界信息:本轮疫情波及28省份预计什么时候结束

2023-02-17 05:58:09

贰佰信息网网站正能量hd_贰佰

2023-02-17 01:11:52

环球观天下!邢台特产有哪些_邢台有哪些特产

2023-02-16 21:38:15

年龄的雅称,原来可以这么美!

2023-02-16 19:07:41

2月16日热点题材概念分析:云游戏、医药电商领涨|天天时快讯

2023-02-16 17:06:29

当前动态:哈维-西蒙斯忆世界杯:梅西随时能改变比赛,这是荷兰所缺乏的

2023-02-16 15:09:29

全球观察:玉米:大范围落!2月16日最新行情!

2023-02-16 12:53:22

每日视讯:成都温江区将首席质量官纳入政府人才目录

2023-02-16 10:47:54

养老保险能领多少钱一个月?养老保险要交够多少年才能领钱? 热推荐

2023-02-16 09:06:20

剥皮200以后哪里学_剥皮150以后去哪学 全球消息

2023-02-16 06:37:42

常数的二重积分的几何意义_二重积分的几何意义

2023-02-16 06:46:12

当前热门:测运势2021年运势免费 免费最准牛年运势预测

2023-02-16 03:27:50

2月15日基金净值:交银成长混合A最新净值5.8129,跌1.04%

2023-02-16 01:52:25

今日热搜:2022年8月份黄道吉日 2022年8月吉日查询一览表

2023-02-16 00:27:17

当前热讯:比特币为什么要挖矿

2023-02-15 22:38:07

新舟600水上飞机_新舟600

2023-02-15 21:29:26

环球热点!热刺有意迎回波切蒂诺?其与孔蒂执教期间战绩对比:胜率相差无几

2023-02-15 20:02:09

全国层次最高、规模最大的产业论坛为何花落青山湖畔?_要闻速递

2023-02-15 18:24:35

双叶双曲面的标准方程_双叶旋转双曲面_环球热消息

2023-02-15 16:53:38

今日视点:比弗利娇妻_关于比弗利娇妻的基本详情介绍

2023-02-15 15:04:38

视点!凌乱的反义词 凌乱的意思

2023-02-15 14:27:36

航天长峰2月15日盘中涨幅达5%-全球速看料

2023-02-15 13:30:00

每日热讯!奥迪A4L和宝马3系怎么选?

2023-02-15 12:01:07

焦点简讯:清除系统垃圾文件的批处理

2023-02-15 10:29:14

中国海拔最高乡:移民管理警察的边境守护

2023-02-15 10:11:53

世界新消息丨正威新材:融资净买入786.74万元,融资余额1.63亿元(02-14)

2023-02-15 08:30:46

每日资讯:桥溪村旅游攻略

2023-02-15 06:20:08

河北继续加大城镇老旧小区改造力度 今年计划完成改造超一千八百个_观热点

2023-02-15 05:27:26

dmc欣兰冻膜正确使用方法怎样的_天天播资讯

2023-02-15 02:22:22

26℃|散步都能免费“蹭”网!“90后”业主自筹设备让老旧小区WiFi全覆盖-全球实时

2023-02-15 01:09:05

热点!三年级班主任教学计划10篇

2023-02-14 22:33:16

补牙需要多长时间才完成_补牙需要多长时间-世界快播

2023-02-14 22:04:58

水上坦克玩具视频_水上坦克

2023-02-14 19:37:11

环球速读:江苏省特级教师传授高考数学解题技巧

2023-02-14 18:45:03

汉堡加盟骗局_汉堡加盟什么好

2023-02-14 17:41:53

电影票价岂能成为“糊涂价” 短讯

2023-02-14 15:51:23

工商企业管理专业介绍 世界报资讯

2023-02-14 14:28:46

【全球热闻】1963年出生的,2023年退休能拿到多少养老金?

2023-02-14 14:16:49

快看点丨【转载】金陵为何只有“十二”钗?

2023-02-14 12:00:07

环球焦点!男人的礼物一般送什么

2023-02-14 10:25:51

家用电梯什么时候安装好?别墅电梯怎么选? 天天精选

2023-02-14 09:09:24

无人超市试营业失败 无人超市买东西方便吗

2023-02-14 08:28:35

若,你是我的妻_关于若,你是我的妻的简介-天天新消息

2023-02-14 05:42:41

50克凉粉要放多少水-世界观热点

2023-02-14 04:27:08

【全球时快讯】详解源文件编译链接至可执行程序的每一步

2023-02-14 01:12:35

nasa是什么_天天观焦点

2023-02-14 00:51:36

国家安全部门设立的间谍行为全国举报电话是多少_国家安全部设立的间谍行为全国举报电话

2023-02-13 21:56:37

环球观速讯丨盗墓笔记穷奇纹身是谁

2023-02-13 20:40:42

遗产继承问题咨询,子女不赡养老人是否有继承权?

2023-02-13 19:14:12

环球焦点!中国财险(02328.HK)与人保资本签订股权投资咨询服务和技术支持协议

2023-02-13 17:13:10

友谊杯冬钓热闹开场|天天观热点

2023-02-13 15:48:19

没有每天排便就是便秘?专家详解便秘误区 滚动

2023-02-13 13:57:05

天天看点:0031是什么意思_0031

2023-02-13 11:57:47

全球最资讯丨下一个AI颠覆性应用发生在音乐领域?

2023-02-13 10:03:38

02月13日08时, 昆明早高峰路况 今日热文

2023-02-13 09:17:25

3.8给妈妈送什么礼物才好呢

2023-02-12 13:13:32

三奶奶送的孩子胎记

2023-02-12 10:30:46

全球速读:小学生拿菜刀砍父亲?场面惊心!

2023-02-12 07:20:30

湖北自驾旅游攻略自由行路线_湖北自驾旅游 环球新视野

2023-02-12 02:58:47

短剧《魔法少女小圆》:传承之石|播报

2023-02-11 22:59:45

受强震影响,土耳其甲级球队马拉耶士邦申请退出联赛|全球球精选

2023-02-11 19:16:26

男生礼物知乎|快讯

2023-02-11 16:15:29

送给朋友的订婚礼物|世界快报

2023-02-11 13:06:29

美调查记者称美策划炸毁“北溪”管道 俄方呼吁进行国际调查-环球视点

2023-02-11 09:50:00

心机女送外卖的哥哥 天天观速讯

2023-02-11 07:09:31

即时焦点:200元送男友的七夕礼物

2023-02-11 03:18:00

广州白云皮具批发城在哪里?如何辨别皮具真假?

2023-02-11 01:04:06

『中医肿瘤康复专病门诊』今日开诊!_世界热文

2023-02-10 23:52:30

渤海大学专科多少分_渤海大学专科录取分数线-世界即时

2023-02-10 21:33:30

全球消息!北京大兴机场临空区发布系列成果 197项市区两级行政权力下放

2023-02-10 20:46:20

下周一开学,北京这四个区域学校集中,交通高峰压力突出

2023-02-10 19:03:29

2022苹果秋季发布会

2023-02-10 17:56:49

天天新消息丨23日照银行CD028今日发布发行公告

2023-02-10 16:57:26

世界热点!商业故事|AIGC潮涌:喧嚣过后前路何往?

2023-02-10 15:20:40

vivoX27手机的屏幕材质是什么? 速读

2023-02-10 13:41:26

世界即时:花开无声的作者是谁

2023-02-10 12:56:45

不穿10号的内马尔,踢的是9号位!1-2输球不是他的错-快播报

2023-02-10 11:55:15

西媒:若安切洛蒂离任,皇马考虑让劳尔担任一队主帅_实时焦点

2023-02-10 10:00:39

五分钟让您巧记大游年

2023-02-10 08:51:32

观热点:姚玉兰_说一说姚玉兰的简介

2023-02-10 08:56:13

环球观点:国情咨文反映出的美国,令世界不安

2023-02-10 05:55:28

洛阳龙门石窟夜景春节开放吗-世界今亮点

2023-02-10 04:55:12

fost_fost-天天新要闻

2023-02-10 02:11:08

世界头条:好听的穿越小说名字

2023-02-10 01:06:44

速讯:今天最新消息 胎儿腹腔巨大囊肿 广东医院多学科团队合作护航

2023-02-09 23:01:36

环球热资讯!游泳踩水技巧_游泳踩水介绍

2023-02-09 21:18:37

当前滚动:爸爸我怀了你的孩子

2023-02-09 20:11:36

国际油价创逾一周新高,但须警惕美国存在的两大利空因素

2023-02-09 17:56:42

环球新动态:三八妇女节黑板报资料,2017年妇女节黑板报内容

2023-02-09 17:16:38

天天即时看!2023年食堂设计公司top10_餐饮行业榜单

2023-02-09 16:50:04

怎么解除实时认证_怎么解除限速_动态焦点

2023-02-09 14:51:29