背景
在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);}
节点元信息持久化时机:节点启动时会持久化,并且及时已经持久化了会再次写入目的是保证所有的路径上有最新的节点元信息。
索引元信息读取时机:节点启动时读取,如果节点元信息不存在则会为节点生成新的节点元信息。
-
【ES三周年】ES元信息
在ES中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时
-
面相吧木火通明_面相吧
1、我祝愿你早日见到真正的高人,在遇到高人前,请参考我对命运的理解和做法:朋友,命运这个东西,非常有玄机,一般人是看不透
-
世界卫生健康宣传日_世界卫生宣传日一览表
1、11月最后一个星期日国际麻风节23月3日全国爱耳日33月24日世界防治结核病日30全国中小学生
-
每日资讯:易事特:接受汇丰前海证券等机构调研
每经AI快讯,易事特(SZ300376,收盘价:7 53元)发布公告称,2023年2月15日,易事特接受汇丰前海证券等
-
天天视讯!记者:英力士和卡塔尔财团对曼联的报价都将于今日提交
记者SantiAouna消息,英力士和卡塔尔财团对曼联的收购报价都将在今天正式提交。记者表示,英力士收购曼联的正式报价将会在今天被提交,收购方
-
当前头条:网易招财猫怎么购买_网易招财猫怎么购买账号
1、目前只是测试版,在应用市场上搜索不到。此轮预售仅限网易内部员工,有具体内部价格。如果您已经成功购买,请耐心等待,预计
-
商业银行金融资产风险分类新规出台 分类对象扩展至承担信用风险的全部金融资产|天天播报
2月11日,中国银保监会、中国人民银行联合发布《商业银行金融资产风险分类办法》(以下简称《办法》),将于2023年7月1日起正式施行。《办法》将
-
雄塑科技董秘回复:公司的产品广泛应用于建筑工程、市政工程、水利工程、农业和工业等领域 环球看热讯
雄塑科技(300599)02月17日在投资者关系平台上答复了投资者关心的问题。
-
达仁堂2月17日快速上涨
以下是达仁堂在北京时间2月17日09:59分盘口异动快照:2月17日,达仁堂盘中快速上涨,5分钟内涨幅超过2%,截至9点59分,报34 34元,成交6311 79
-
胃寒吃什么可以暖胃_胃寒吃什么可以暖胃的
1、胃寒的人要多吃暖胃的食物,那么胃寒吃什么能暖胃呢?每天能暖胃的食物有很多,如辣椒、生姜等调料,荔枝等水果,狗肉、羊肉
-
涨价8%后雀巢去年净利不及预期,中国区销售额增逾3%-最新
全球食品巨头雀巢2022年净利润低于预期,今年还要涨价转嫁成本。财报显示,雀巢预计2023年的有机增长在6%-8%,不考虑汇率影响,基本每股收益预
-
雅马哈钢琴哪个型号好?_雅马哈钢琴哪个型号好,报名立享7.1折! 天天热文
1、雅马哈钢琴在国际钢琴比赛和音乐节上有着出色的表现。国产叶系列是性价比最高的明星产品。雅系列是一个以卓越音质著称的钢琴
-
成都青白江区在全省率先推行工程建设项目“结备合一”
“这下好了,只到一个窗口,交一套材料,就可以同时办理竣工结算备案和竣工验收备案,我马上就可以申请退还农民工工资保证金,还可以办产权...
-
婴儿的睡眠时间应该是多长_婴儿的睡眠时间
1、宝宝出生后睡眠时间很长,除了睡觉就是吃奶的时间,醒来玩耍的时间比较少。随着年龄的增长,清醒时间逐渐延长,睡眠时间逐渐
-
全球焦点!脆皮蛋糕图片_脆皮蛋糕
1、材料:面粉500g,糖350g,鸡蛋320g,海威力无铝泡打粉12g,水200g,蛋糕油25g,葡萄糖2g。2、混合泡打粉:将海威力无铝泡打粉混入面粉中,搅
-
“三进套餐”激发党员冬训新魅力_当前播报
“党员冬训年年讲、年年新,今年的党员冬训很精彩,既为我们思想充
-
世界快看点丨房屋知识科普:房产证的面积怎么算 房产证上的面积到底是什么面积 怎么算
房产方面的知识对于多数小伙伴们是一般都不太懂的,那么如今买房卖房这当中都会存在着很多的问题的,那么大家就需要对于房产方面
-
种子文件哈希校验码怎么查看_今日热闻
种子文件哈希校验码怎么查看,教大家种子文件哈希校验码怎么查看的办法,希望对大家有帮助首先要把种子文件转化为磁力链接,百度搜索【转磁力
-
爱康医疗(01789.HK)盘初走强,升约8%
爱康医疗(01789 HK)盘初走强,升约8%。公司预计2022年度收入将录得逾35%的增幅,股东应占净溢利将录得逾100%的显著增幅。截至发稿,爱康医疗涨
-
【环球报资讯】百度文库怎么复制
百度文库怎么复制,百度文库复制步骤如下:
-
磁盘分区形式MBR与GPT有什么区别_磁盘分区
1、windows7自带分区工具,功能也不错。2、比第三方软件要安全的多。3、一般有两种情况,一是在装系统的时候分区,
-
纯水机十大品牌排行_纯水机十大品牌
1、关于品牌排名,还真是没有找到相关的排名情况,毕竟它不和饮水机、热水器似的,已经比较成熟的产品。2、但选择要点就是,不要买私人厂家销
-
男儿战略兵团倾情部长衣服好看
1、乱世红颜梦作者:林家成。2、邂逅夜下香作者:玄武岩。3、嬉戏红尘作者:千夜魅罗。4、鹿死谁手作者:夭夭桃红。5、女驸马男公主作者:岸芷町蓝
-
吃豆渣可以减肥不_吃豆渣可以减肥吗-世界播报
1、可以的,因为平时轻量食用豆渣,能降低血液中胆固醇含量,减少糖尿病人对胰岛素的消耗;豆腐渣中丰富的食物纤维,有预防肠癌
-
服装店名字好听个性
花木兰服装店发仔王服装店千葩服装店天际服装店贤钥服装店欧陆星卡服装店茂艺服装店博尼服装店祥丰服装店华睿服装店爵森服装店煜
-
每日聚焦:银联卡和银行卡的区别
两者的区别有范围不同、支持系统性质不同以及概念不同。①范围不同:卡上面印有“银联”字样的叫做银联卡;而银行发行的所有卡,
-
红白蓝是哪个国家的国旗啊_红白蓝是哪国国旗
1、红白蓝的国旗的国家是荷兰。2、蓝红白的国旗可能有:法国(蓝白红)法国国旗是一面从左至右蓝、白、红色垂直排列的三色旗。
-
留言条怎么写二年级 二年级怎么写好留言条-环球讯息
1、什么是留言条。在日常生活中,有事情要通知对方,或有事托付对方,对方不在,却又没时间等候对方回来,写张字条留给对方。这种文体就是留言
-
怎么样挽救爱情_感情破裂怎么样才能挽救爱情 世界百事通
1、【合理分析遇到的问题并解决】。无论男女感情出现问题,都要静下心来想办法解决。他们不应该用逃避或者冷暴力的方式去解决,
-
王者荣耀镜技能连招 王者荣耀镜技能有什么连招
1、连招一:1a1a2a,一技能伤害更高,留人能力更强,用一技能打伤害更赚。2、连招二:121,典型的追人连招,假设面前有跳板,就直接一技能先命中
广告
X 关闭
- 航母板块12月20日涨0.08%,宝塔实业领涨,主力资金净流入1.94亿元 世界即时
- 工信部:截至10月底全国共有110个城市达到千兆城市建设标准-世界快播
- 2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
- 创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告
- 焦点快看:威海市商业银行 加大普惠金融力度 支持小微企业发展
- 当前播报:3小时!开发ChatGPT微信小程序
- 协程这么好,它能完全代替线程么?
- 湖人正式裁掉马特-瑞安 预示将有大交易发生?
- 华东数控董秘回复:公司主营业务为研发、生产和销售数控机床、普通机床及其关键功能部件,未研发钠离子电池生产设备
- 2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
- 创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告
- 焦点快看:威海市商业银行 加大普惠金融力度 支持小微企业发展
- 当前播报:3小时!开发ChatGPT微信小程序
- 协程这么好,它能完全代替线程么?
- 湖人正式裁掉马特-瑞安 预示将有大交易发生?
- 华东数控董秘回复:公司主营业务为研发、生产和销售数控机床、普通机床及其关键功能部件,未研发钠离子电池生产设备
- 今日大上海:一边核酸检测亭空空荡荡,一边电影院人流如织、快递派送量翻倍
- 本周盘点(12.12-12.16):茂业商业周涨0.27%,主力资金合计净流出300.70万元
广告
X 关闭
-
航母板块12月20日涨0.08%,宝塔实业领涨,主力资金净流入1.94亿元 世界即时
-
工信部:截至10月底全国共有110个城市达到千兆城市建设标准-世界快播
-
2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
-
创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告