全球聚焦:【ES三周年】ES元信息
在ES中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时
在ES中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时即可从磁盘上读取对应元信息并恢复。
集群中每个分片都有属于自己的元信息,该元信息包括:
(资料图片仅供参考)
public final String indexUUID;public final boolean primary; public final AllocationId allocationId;
对应的类图如下:
分片元信息在shard恢复时会被用到:
首先是GateWayAllocator
在恢复主备分片时,会从集群各个节点获取对应分片元信息(节点读取分片元信息时会判断本地分片的indexUUID
和索引的UUID
相同),用于判断是否可以本地恢复,如果满足条件(如分片的allocatId在in_sync_allocations中)则会从本地恢复分片;其次是在创建IndexShard
时,会判断本地分片的indexUUID
是否和索引的UUID
相同,如果不同则报错(避免分片或索引出现异常)。分片元信息会保存在磁盘上,作用:,对应文件路径路径:${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)。
分片持久化的作用前面也提到了,主要是用于分片的恢复。
集群中每个索引都有属于自己的元信息,该元信息包括:
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信息,以便对索引执行相应操作。
索引元信息会保存在磁盘上,作用:,对应文件路径路径:${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
相同)集群的元信息包括:
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
集群元信息主要是用于提供集群以及索引相关的配置信息信息,以便对集群或索引上执行相应操作提供信息。
集群元信息会保存在磁盘上,作用:,对应文件路径路径:${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();}
集群元信息持久化时机有两个:其一是节点启动时验证集群的元信息有变化则会重新持久化,其二是集群的元信息发生变化(集群的配置发生变化)则会重新初始化。
索引元信息读取时机:节点启动时用于恢复索引集群元信息用于数据恢复。
节点的元信息包括:
private final String nodeId;
对应类图如下:
evernotecid://9B7AC1A3-2163-4103-A68D-1127DA246949/appyinxiangcom/8902081/ENResource/p3148
节点元信息主要是用于在集群中唯一标记节点,以便ES在进行各项操作时能唯一区分节点。
节点元信息会保存在磁盘上,作用:,对应文件路径路径:${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中,涉及元信息主要有三种,分别为分片元信息、索引元信息、集群元信息(节点元信息),并且这些元信息会保留在磁盘上,这样在节点重启时
1、内分泌失调是一个模糊的概念,因为内分泌系统是由内分泌腺、内分泌组织和内分泌细胞组成的完整的体液调节系统,主要是在神经
1、扬州网景科技有限公司于2009年07月06日成立。2、法定代表人高治,公司经营范围包括:云平台服务;云计算技术开
央广网北京2月17日消息据证监会官网,2023年2月17日,中国证监会发布境外上市备案管理相关制度规则,自2023年3月
宜昌健康证网上申报方式方式一:政务服务网(点此查看图文版详解)1、登录支付宝扫码登录或者注册个人账号登录湖北省政务服务网:http: zwfw hubei g
欢迎观看本篇文章,小升来为大家解答以上问题。婉君剧情简介,婉君电视剧内容很多人还不知道,现在让我们一起来看看吧!1、剧情
日产GT-R502018于7月29日首次通过日产美国网站发布,展现了令人惊叹的设计美感。这是日产GT-RNismo
1、左耳是男性想你,右耳是女的想你左耳烫财,右耳烫灾是做完剧烈的运动,往往会感到耳朵发热。2、这是因为人们进行运动时,心
2月16日,交银信用添利债券(LOF)最新单位净值为1 254元,累计净值为1 74元,较前一交易日上涨0 06%。历史数据显示该基金近1个月上涨0 64%,近3
1、如何把一张照片做成视频?来看看操作方法。2、点击打开电脑中的剪辑软件,点击开始创建按钮。3、单击“导入材质”按钮,选
来药王山赶一场千年古庙会,更多精彩活动即将开始~
商洛新闻网讯:2月15日,市交投公司总支书记、董事长朱三民,党总支副书记、总经理黄甫军,副总经理王金萍与来访的陕西交控产业发展集团党委书
以下是海马汽车在北京时间2月16日13:19分盘口异动快照:2月16日,海马汽车盘中涨幅达5%,截至13点19分,报5 77元,成交4 42亿元,换手率4 79%
鸿腾精密(06088)早盘高开近5%,截至发稿,涨4 83%,报2 17港元,成交额26 47万港元。 消息面上,据媒体报道,产业链人士表示,富士康控股子
据1905电影网官博消息,周星驰导演的《美人鱼2》进入了后期制作阶段。华谊兄弟2月15日在互动平台表示,管虎导演的《狗阵》、陆川导演的《749局
1、【“不寒而栗”的爱情: 北大自杀女生的聊天记录 】2、北京大学法学院大三学生包丽躺在医院重症监护室已经两个月了。自2019年10月9日服药自
于欣茹于蓉嘉于雅婷于非艳于冬青于培英于烁琳于爱琳于乐卉于楚婷于佳蕖于海英于觅凡于盼蕾于裕茹于瑞梅于改英于青阳于玲珊于瑞文
转自:证券日报本报记者刘琪2月15日,国家外汇管理局公布1月份银行结售汇和银行代客涉外收付款数据。数据显示,按美元计值,1月份,银行结汇17
狮子座你要看是哪年的。。然后在看那年七月初一的阳历是多少。。星座是按阳历算得是哪一年的,不一样的。巨蟹座
最近上海白玉兰奖的入围名单大家看了吗?电视剧《安家》、《庆余年》、《长安十二时辰》、《鬓边不是海棠红》等都入围了“最佳中国电视剧”。
1、地图:TheSunTemple(还是最左边的区域中的一张图)2、种子:43 45剩余两个3、刚传送到平台,来到边缘,四下搜索一下,就看到一个:4
st股票是指个股经过特殊处理,该股风险较高,存在退市的可能性,创业板st股其涨停限制和正常股票一样为20%,而对于其他板
浦发银行是上海浦东银行的简称,它是一家国有企业。1992年8月28日经中国人民银行批准成立,1993年1月9日正式开业。
2023珠海个人所得税专项附加扣除常见答疑汇总有多子女的父母,可以对不同的子女选择不同的扣除方式吗?可以。有多子女的父母,可以对不同的子女
现在很多年轻人装修不再只是看装修是否气派、华丽,会更多的关注实用性和功能性,我有一个做建筑的朋友买了一套房子,房子面积也就在58㎡左右
Copyright 2015-2022 世界酒业网 版权所有 备案号:琼ICP备2022009675号-1 联系邮箱:435 227 67@qq.com