[ES]elasticsearch章4 ES的META们
在介绍Meta更新流程前,我们先介绍一下ES中Meta的组成、存储方式和恢复方式。
1. Meta:ClusterState、MetaData、IndexMetaData
Meta是用来描述数据的数据。在ES中,Index的mapping结构、配置、持久化状态等就属于meta数据,集群的一些配置信息也属于meta。这类meta数据非常重要,假如记录某个index的meta数据丢失了,那么集群就认为这个index不再存在了。ES中的meta数据只能由master进行更新,master相当于是集群的大脑。
ClusterState
集群中的每个节点都会在内存中维护一个当前的ClusterState,表示当前集群的各种状态。ClusterState中包含一个MetaData的结构,MetaData中存储的内容更符合meta的特征,而且需要持久化的信息都在MetaData中,此外的一些变量可以认为是一些临时状态,是集群运行中动态构建出来的。
ClusterState内容包括:
long version: 当前版本号,每次更新加1
String stateUUID:该state对应的唯一id
RoutingTable routingTable:所有index的路由表
DiscoveryNodes nodes:当前集群节点
MetaData metaData:集群的meta数据
ClusterBlocks blocks:用于屏蔽某些操作
ImmutableOpenMap<String, Custom> customs: 自定义配置
ClusterName clusterName:集群名
MetaData
上面提到,MetaData更符合meta的特征,而且需要持久化,那么我们看下这个MetaData中主要包含哪些东西:
MetaData中需要持久化的包括:
String clusterUUID:集群的唯一id。
long version:当前版本号,每次更新加1
Settings persistentSettings:持久化的集群设置
ImmutableOpenMap<String, IndexMetaData> indices: 所有Index的Meta
ImmutableOpenMap<String, IndexTemplateMetaData> templates:所有模版的Meta
ImmutableOpenMap<String, Custom> customs: 自定义配置
我们看到,MetaData主要是集群的一些配置,集群所有Index的Meta,所有Template的Meta。下面我们再分析一下IndexMetaData,后面还会讲到,虽然IndexMetaData也是MetaData的一部分,但是存储上却是分开存储的。
IndexMetaData
IndexMetaData指具体某个Index的Meta,比如这个Index的shard数,replica数,mappings等。
IndexMetaData中需要持久化的包括:
long version:当前版本号,每次更新加1。
int routingNumShards: 用于routing的shard数, 只能是该Index的numberOfShards的倍数,用于split。
State state: Index的状态, 是个enum,值是OPEN或CLOSE。
Settings settings:numbersOfShards,numbersOfRepilicas等配置。
ImmutableOpenMap<String, MappingMetaData> mappings:Index的mapping
ImmutableOpenMap<String, Custom> customs:自定义配置。
ImmutableOpenMap<String, AliasMetaData> aliases: 别名
long[] primaryTerms:primaryTerm在每次Shard切换Primary时加1,用于保序。
ImmutableOpenIntMap<Set<String>> inSyncAllocationIds:处于InSync状态的AllocationId,用于保证数据一致性,下一篇文章会介绍。
2. Meta的存储
首先,在启动ES的一个节点时,会配置一个data目录,例如下面这个目录。该节点只有一个单shard的Index。
$tree
.
`-- nodes
`-- 0
|-- _state
| |-- global-1.st
| `-- node-0.st
|-- indices
| `-- 2Scrm6nuQOOxUN2ewtrNJw
| |-- 0
| | |-- _state
| | | `-- state-0.st
| | |-- index
| | | |-- segments_1
| | | `-- write.lock
| | `-- translog
| | |-- translog-1.tlog
| | `-- translog.ckp
| `-- _state
| `-- state-2.st
`-- node.lock
我们看到,ES进程会把Meta和Data都写入这个目录中,其中目录名为_state的代表该目录存储的是meta文件,根据文件层级的不同,共有3种meta的存储:
- nodes/0/_state/:
这层目录在节点级别,该目录下的global-1.st文件存储的是上文介绍的MetaData中除去IndexMetaData的部分,即一些集群级别的配置和templates。node-0.st中存储的是NodeId。
- nodes/0/indices/2Scrm6nuQOOxUN2ewtrNJw/_state/:
这层目录在index级别,2Scrm6nuQOOxUN2ewtrNJw是IndexId,该目录下的state-2.st文件存储的是上文介绍的IndexMetaData。
- nodes/0/indices/2Scrm6nuQOOxUN2ewtrNJw/0/_state/:
这层目录在shard级别,该目录下的state-0.st存储的是ShardStateMetaData,包含是否是primary和allocationId等信息。ShardStateMetaData是在IndexShard模块中管理,与其他Meta关联不大,本文不做过多介绍。
可以看到,集群相关的MetaData和Index的MetaData是在不同的目录中存储的。另外,集群相关的Meta会在所有的MasterNode和DataNode上存储,而Index的Meta会在所有的MasterNode和存储了该Index数据的DataNode上存储。
这里有个问题是,MetaData是由Master管理的,为什么DataNode上也要保存MetaData呢?主要原因是考虑到数据的安全性,很多用户没有考虑Master节点的高可用和数据高可靠,在部署ES集群时只配置了一个MasterNode,如果这个节点不可用,就会出现Meta丢失,后果非常严重。
3. Meta的恢复
假设ES集群重启了,那么所有进程都没有了之前的Meta信息,需要有一个角色来恢复Meta,这个角色就是Master。所以ES集群需要先进行Master选举,选出Master后,才会进行故障恢复。
当Master选举出来后,Master进程还会等待一些条件,比如集群当前的节点数大于某个数目等,这是避免有些DataNode还没有连上来,造成不必要的数据恢复等。
当Master进程决定进行恢复Meta时,它会向集群中的MasterNode和DataNode请求其机器上的MetaData。对于集群的Meta,选择其中version最大的版本。对于每个Index的Meta,也选择其中最大的版本。然后将集群的Meta和每个Index的Meta再组合起来,构成当前的最新Meta。
[ES]elasticsearch章4 ES的META们的更多相关文章
- [ES]elasticsearch章5 ES的分词(二)
Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...
- [ES]elasticsearch章5 ES的分词(一)
初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 1.为什么明明有包含搜索关键词的文档,但结果里面就没有相关文档呢? 2.我存进去的文档到底被分成哪些词(ter ...
- [ES]elasticsearch章3 ES写入过程解析
Elasticsearch的写 Elasticsearch采用多Shard方式,通过配置routing规则将数据分成多个数据子集,每个数据子集提供独立的索引和搜索功能.当写入文档的时候,根据routi ...
- [ES]elasticsearch章2 ES查询过程解析
es服务端是准确知道每个document分布在哪个shard上: search一个比较复杂的执行模式,因为我们不知道那些document会被匹配到,任何一个shard上都有可能,所以一个search请 ...
- [ES]elasticsearch章1 ES各角色的分工
es集群里的master node.data node和client node到底是怎么个意思,分别有何特点? master节点 主要功能是维护元数据,管理集群各个节点的状态,数据的导入和查询都不会走 ...
- ElasticSearch(简称ES)
Windows下安装ElasticSearch ElasticSearch(简称ES)是一个基于Lucene的分布式全文搜索服务器,和SQL Server的全文索引(Fulltext Index) ...
- Elasticsearch前沿:ES 5.x改进详解与ES6展望
转:http://www.dataguru.cn/article-11094-1.html 曾勇(Medcl),Elastic 工程师与布道师,2015 年加入 Elastic 公司.加入 Elast ...
- 【Elasticsearch】【WEB】java web服务连接es elasticsearch始终报错,无法正常连接使用的错误解决历程
前情提要: web服务往华为云上迁移 ================内网的好环境,相关配置=================== 1.web服务关于ES的集群配置如下: elasticAddress ...
- ElasticSearch入门篇Ⅰ --- ES核心知识概括
C01.什么是Elasticsearch 1.什么是搜索 垂直搜索(站内搜索) 互联网的搜索:电商网站,招聘网站,各种app IT系统的搜索:OA软件,办公自动化软件,会议管理,员工管理,后台管理系 ...
随机推荐
- pandas 常用清洗数据(三)排序,去重
1.排序 DataFrame 按照Index排序 Series.order()进行排序,而DataFrame则用sort或者sort_index或者sort_values 2.去重, dt = dt. ...
- 测试工具之appcrawler的使用
appcrawler 标签(空格分隔): appcrawler appcrawler 简介 一个基于自动遍历的app爬虫工具. 支持android和iOS, 支持真机和模拟器. 最大的特点是灵活性. ...
- SAP字段带空格,导致日期转换失败,提示not a vaild month
执行此节点会报以下错误,ORA-01843,no a valid month,提示月份转换异常 尝试增加条件也仍然提示错误:and VBEP.EDATU<>'00000000' and V ...
- 【Nodejs】Node.js(Express)の環境構築
[Express]の環境 参考URL:http://expressjs.com/en/starter/generator.html ①Node.jsの準備 (参考URL:https://www.cnb ...
- NAT和Proxy的区别
在internet共享上网技术上,一般有两种方式,一种是proxy代理型,一种是NAT网关型,关于两者的区别与原理,身边很多人都不是很明白,下面我来讲讲我的理解,如有不对的,欢迎指正. 1.先说应用例 ...
- 关于 jenkins-cli.jar
1.页面 jenkins-cli.jar 位置 首页-系统管理-Jenkins CLI 2.点击下载jenkins-cli.jar 或者 wget http://IP:8080/jenkins/jnl ...
- 【收藏】UI自动化测试基本规则与设计模式
总体规则 所有模块设计均遵循page object结构 用例层:测试人员编写测试用例代码的地方,可以调用page层和封装层. page层:一个页面一个类,包含该页面的业务逻辑封装以及部分控件定义. 封 ...
- java编程 求和
用java编程,实现字符串强制类型转化成整数型,用到Integer.parseInt(),可以把字符串强制转换成整数 结果截图
- 微信小程序开发小技巧——单击事件传参、动态修改样式、轮播样式修改等
一. 脚本部分: 1. 表达式无效的处理: 如果你发现自己编写的表达式无效或者数据不展示,那么请先检查你的表达式是否有添加{{}},小程序中全部都要添加的,只要是在模板中调用js中的数据 2. 获取元 ...
- ATM取款机系统代码及此次作业感受
本次乃我们软件工程专业开学第一个小测试,本来以为是和之前2016级相同的或者类似得软件,所以之前学了好久的那个程序完全失去了它的作用,当然了老师也从来没有按套路出过牌,所以这个下马威我觉得作用起到了. ...