一、es数据文件
我们将探讨由es系统各个部分写入的目录文件,分别从broker(master)和node(data)的结构文件进行介绍,并给其一个简短说明。
其实在Elasticsearch中生成的数据文件一般来说主要有三种,分别是state、index和translog,后两种想必大家也都知晓,那么state主要就是Gateway存储数据的文件。Gateway模块用于存储es集群的MetaData。MetaData每一次改变(比如增加删除索引等),都要通过Gateway模块进行持久化。当集群第一次启动的时候,这些信息就会从Gateway模块中读出并应用。
一般情况下,Gateway我们都设置为Local方式,即将数据存储在本地,那么本文也就主要针对这种方式来说。
1.1文件目录
es配置多个路径:
path.home
:用户的主目录运行es程序。默认是java系统属性user.dir
,这是程序所有者的默认目录。
path.conf
:一个包含配置文件的目录。
path.plugins
:es插件目录。
path.logs
:日志存储目录。
path.data
:包含存储通过es的数据路径的目录。
本次介绍的目录文件基本都在path.data目录中。
1.2broker文件
------- /opt/es/broker $ tree data
data
└── debug_es # 集群名称
└── nodes
└── 0 # 本地第0个broker服务
├── _state # 状态文件目录
│ └── global-96.st # 全局元数据文件,里面包含集群信息、集群元数据版本号的信息,对应代码ClusterState类
├── indices # 索引文件目录
│ └── twitter # 索引名称
│ └── _state # 状态文件目录
│ └── state-1.st # 索引的元数据文件,里面包含唯一标识、创建时间、settings、mappings,对应代码IndexMetaData类
└── node.lock # 节点索引文件,保证全局只有一个es在本目录下读写
更有趣的是global-96.st文件,这个global-
前缀和.st后缀表明这是一个元数据全局文件。正如你可能已经猜到,96前缀表示集群元数据版本,是一个严格递增的版本递增,每一次关闭集群都会递增。这个文件是二进制文件,当然你可以使用十六进制编辑器进行编辑,但我们建议你这么做,因为会很快导致数据丢失。
1.3node文件
-------- /opt/es/node $ tree data
data
└── debug_es # 集群名称
└── nodes
└── 0 # 本地第0个node服务
├── indices # 索引文件目录
│ └── twitter
│ └── 0 # shard0文件目录
│ ├── _state
│ │ └── state-1.st # 分片信息文件,里面包含版本号,是否主/副分片,对应代码ShardRouting类
│ ├── index # 真正索引和数据文件目录
│ │ ├── _0.cfe
│ │ ├── _0.cfs
│ │ ├── _0.si
│ │ ├── segments_7
│ │ └── write.lock
│ └── translog #translog目录
│ ├── translog-1.tlog
│ └── translog.ckp
└── node.lock # 节点索引文件,保证全局只有一个es在本目录下读写
1.4ClusterState类
UML类结构