【ES三周年】ES元信息|每日看点
腾讯云 2023-02-21 16:13:09

背景

在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-21 16:13:09

轨模式摊铺机和滑模式图片_轨模式摊铺机与滑模式摊铺机的区别

2023-02-21 14:41:01

环球最新:河南省、开封市医保中心调研组到通许县冯庄乡调研医疗保障工作

2023-02-21 12:07:14

飞利浦两款Evnia电竞显示器上市 售价1299欧元起|今日热文

2023-02-21 10:48:59

闽侯教师创作5米长剪纸作品 侯官文化跃然纸上

2023-02-21 08:43:37

若相惜,此心无垠_关于若相惜,此心无垠的简介

2023-02-21 05:39:46

企业微信营销手段有哪些?企业微信营销的方法技巧_环球看点

2023-02-21 01:08:25

微头条丨成都试点建设“近零碳园区”,抢技术、定标准或是突破点

2023-02-20 21:13:14

御制连中枪_天天消息

2023-02-20 18:51:38

热点聚焦:百川畅银可转债发行申请获证监会同意注册 将进一步优化业务结构

2023-02-20 16:50:30

侠盗猎车手罪恶都市飞机场电话任务_侠盗猎车手之罪恶都市飞机_世界今亮点

2023-02-20 14:46:11

属龙跟属虎的婚姻状况 属虎和属龙的适合做夫妻吗

2023-02-20 12:42:15

全球即时看!哈尔滨工程大学相关上市公司_哈尔滨工程学院

2023-02-20 10:54:13

世界今日讯!十大机构论市:牛市第一波未完 把握配置良机

2023-02-20 08:43:55

世界速读:股票000816今天什么价_股票000816

2023-02-20 06:09:38

「凡人故事」“每个生命都值得认真对待”铜川这位大姐赚的钱都花给了流浪狗 当前时讯

2023-02-20 01:12:58

防疫口罩标准型号_防护口罩国家标准 速递

2023-02-19 20:59:02

今日转矩与力的关系_转矩计算公式 世界资讯

2023-02-19 18:01:09

当前通讯!如何更换 Pella 腰带

2023-02-19 14:50:32

天天日报丨忍足侑士忍足谦也_忍足侑士

2023-02-19 12:03:53

行通济_新gto 新视野

2023-02-19 09:10:09

全球资讯:复课后第一节课_放课后的y交

2023-02-19 06:00:46

葡萄牙波尔图用上中国城轨列车-全球热点

2023-02-19 01:04:42

宫外孕手术危险吗疤痕大吗_宫外孕手术危险吗

2023-02-18 21:02:38

如何使新鲜椰子脱水

2023-02-18 17:55:48

每日热议!如何吃珍宝蟹

2023-02-18 15:10:03

天天快资讯:走进企业看信心|创新提质——打开海外中高端市场的“金钥匙”

2023-02-18 12:04:32

世界看热讯:如何煮炒面

2023-02-18 10:00:51

天天热资讯!bass是什么意思_bass

2023-02-18 06:58:39

约定期间爱上你_关于约定期间爱上你的介绍 天天观焦点

2023-02-18 02:51:07

尿液检查项目的正常值范围_尿液检查项目有哪些

2023-02-17 22:54:15

艾鹿薇和苏先生照片_艾鹿薇七日霜飞

2023-02-17 20:02:46

当前快报:梅江区博物馆

2023-02-17 18:09:27

露兜树如何养护_露兜树怎么养|聚看点

2023-02-17 16:49:13

2023年春季征兵体检有序展开

2023-02-17 14:57:59

青岛媒体:32岁的前广州城中卫弋滕时隔9年将重返青岛海牛

2023-02-17 12:51:40

世界今日讯!糟蹋乳房的3个行为,不少女生可能经常做,自查下,若有尽早改掉

2023-02-17 10:44:23

环球快看:周黑鸭业绩大降90%,是新卤味品牌上位的机会吗?

2023-02-17 09:00:08

6次争顶全部失败!1.97米的韦霍斯特争顶输给1.73米的加维

2023-02-17 06:12:08

意甲CEO:盗版让意甲3年损失10亿欧,不干预我们球队将越来越穷

2023-02-17 00:57:05

如何预防诺如病毒具体详细内容是什么_每日观察

2023-02-16 22:03:59

2023杭州普通话去哪考试

2023-02-16 19:14:54

沧州运河区2023年第二批文化惠民卡使用范围+咨询电话|环球焦点

2023-02-16 17:08:07

海南橡胶(601118)2月16日主力资金净买入860.19万元 世界最资讯

2023-02-16 15:34:04

环球即时:滁州户口可以在合肥办理港澳通行证吗?

2023-02-16 13:00:04

仔细的反义词是什么

2023-02-16 11:22:35

受高空槽过境影响,预计17-18日山西省有降水天气

2023-02-16 11:02:08

个人房产查询-世界观速讯

2023-02-16 09:11:39

蹑手蹑脚的意思是什么_蹑手蹑脚的意思 当前讯息

2023-02-16 09:05:00

全球微速讯:广州邦禾检测技术有限公司

2023-02-16 07:00:57

郑州市房管局地址位置百花路_郑州市房管局地址 天天新消息

2023-02-16 06:10:12

iphone6序列号查询_iphone6序列号查询 世界短讯

2023-02-16 03:09:16

汽车漂移视频制作_汽车漂移是什么原理?_天天视点

2023-02-16 01:56:32

准妈妈的孕妇装品牌公司起名大全

2023-02-16 00:05:46

腾讯微信申诉中心_微信申诉中心|环球今热点

2023-02-15 22:39:30

每日看点!乌合之众的乌什么意思 乌合之众的乌是指乌鸦

2023-02-15 20:54:39

期货保证金会退还吗-环球速递

2023-02-15 20:22:12

股票质押是利好还是利空|世界看点

2023-02-15 18:32:40

当前动态:天龙八部之宿敌歌词 许嵩天龙八部之宿敌

2023-02-15 17:44:53

中方将对有关美国实体采取反制措施详细内容|环球快资讯

2023-02-15 16:48:32

如何制作三角帽 当前速递

2023-02-15 15:25:51

各地房地产市场冷热不均 支持政策需更精准-每日焦点

2023-02-15 13:49:36

环球视讯!美国大豆期货一手多少吨?美国大豆期货合约介绍

2023-02-15 13:52:28

天天实时:团校怎么报名_团学网招生是真的吗

2023-02-15 11:45:28

今日视点:中金:释放海风资源是长期趋势 中长期可开发资源体量有更大空间

2023-02-15 09:58:20

黑椒汁怎么制作做法步骤易学_天天快消息

2023-02-15 09:51:09

有神态描写的句子100字(必备138句)

2023-02-15 09:03:39

皇天不负苦心人!信阳师范学院即将更名信阳师范大学!|世界时讯

2023-02-15 05:59:19

北京天气预报一周/10天/15天/30天查询系统_每日速看

2023-02-15 05:49:40

SolarWorld首席执行官为该公司提出了数百万欧元的生命线 焦点短讯

2023-02-15 01:44:15

正确的入党动机是什么

2023-02-15 01:39:02

青海先心病患儿千里转诊 “心佑工程”强强联合顺利救治 播报

2023-02-14 22:22:06

13张麻将打法和技巧知识_13张麻将的技巧口诀 热点

2023-02-14 22:03:42

汽车安全气囊怎么修复视频_汽车安全气囊怎么修复 环球视点

2023-02-14 20:01:44

中学生写事作文

2023-02-14 18:11:17

酸奶什么时候喝减肥_饭后喝酸奶

2023-02-14 17:56:58

Magic5 Pro正面屏幕曝光 圆润的像块肥皂

2023-02-14 16:00:31

给男生送什么生日礼物比较好

2023-02-14 14:21:12

《夜雨寄北》教学教案-环球新视野

2023-02-14 13:39:08

石家庄市总工会全面开展2023年“春风行动”暨就业援助月活动

2023-02-14 12:21:22

世界今日报丨两场冬季风暴相继来袭 美国26州将遭风雪恶劣天气

2023-02-14 10:53:37

国泰君安期货:双硅价格短期或持续承压

2023-02-14 08:58:52

青海湖海拔多少米,青海湖的位置在哪里呢,青海湖多大面积呢?|全球简讯

2023-02-14 07:58:19

13岁女孩生日礼物送什么好|当前焦点

2023-02-14 06:26:10

今亮点!苹果手机app内购买项目是什么意思

2023-02-14 04:08:55

央媒公开发文讽刺文盲演员,王一博刘浩存中招|实时

2023-02-14 01:42:29

什么叫真空杯 当前快看

2023-02-14 00:18:11

工会计提比例文件_工会计提比例

2023-02-13 21:51:12

微动态丨万姓历史名人

2023-02-13 20:22:25

极米科技: 2023年股票期权及限制性股票激励计划激励对象名单(截止授予日)

2023-02-13 19:46:53

无量上涨意味着什么 全球热讯

2023-02-13 17:57:53

申菱环境(301018)2月13日主力资金净买入263.22万元-快报

2023-02-13 15:48:19

这家文化传媒企业,是怎样前瞻布局元宇宙的?

2023-02-13 13:55:41

多地农信系统年度工作会议召开 释放哪些改革信号 天天观天下

2023-02-13 11:48:11

用于抗艾滋治疗,我国自研药复邦德在京东大药房线上首发

2023-02-13 10:13:30

雪地开车用什么模式

2023-02-13 09:12:24

世界快资讯丨指数基金有哪些比较好的_指数基金有哪些

2023-02-12 13:56:05

每日短讯:科学家们对脑细胞如何说话有了新的认识

2023-02-12 11:01:26

春日烟雨绕丛山 百里金黄漫上林

2023-02-12 07:51:52

变速自行车怎么调速最快_变速自行车怎么调速 全球实时

2023-02-12 03:47:34