Elasticsearch 中的 `文档`,`索引`,`节点`,`分片`

对Elasticsearch中常用的文档索引节点分片做出一些介绍和解释。清楚一些入门的基础概念。

文档

  1. 可被搜索最小单元
  2. 理解成关系型数据库一条记录
  3. json对象组成

格式

名称 解释
_index 文档所属的索引名
_type 文档所属的类型名
_id 文档唯一ID
_source 文档原始的json数据
_all 整合所有字段内容到该字段
_version 文档的版本信息
_score 相关性打分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"_index" : "moves",
"_type" : "_doc",
"_id" : "253",
"_version" : 1,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"title" : "Interview with the Vampire: The Vampire Chronicles",
"year" : 1994,
"id" : "253",
"@version" : "1",
"genre" : [
"Drama",
"Horror"
]
}
}

索引

  1. 索引是文档的容器,是一类文档的集合
  2. index体现了逻辑空寂的概念,每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型
  3. shard 体现了物理空间的概念:索引中的数据分散在shard上

Mapping 定义文档字段的类型
Setting 定义不同的数据分布(分片)

RDBMS ES
table index(type)
Row Doucment
Column Field
Schema Mapping
SQL DSL

相关操作

//查看索引相关信息
GET index_name

//查看索引的文档总数
GET index_name/_count

//查看前10条文档,了解文档格式
POST index_name/_search

//_cat API

查看indices
GET /_cat/indices/kibana*?v&s=index

节点

Master-eligible 和 Master

  • 每个节点启动后,默认就是一个Master eligible 节点
    • 可以设置node.master:false 禁止
  • Master-eligible节点可以参加选主流程,成为Master
  • 当第一个节点启动时,它会将自己选举成Master节点
  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态休息
    • 集群中必要的信息
      • 所有节点信息
      • 所有索引和其他相关的Mapping/Setting
      • 切片的路由信息
    • 任意节点都能修改信息会导致数据的不一致性

Data Node

  • 可以保存数据的节点,负责保存分片数据。

Coordinating Node

  • 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起
  • 每个节点默认都起到了 Coordinating Node 职责

Hot & warm Node

  • 不同硬件配置的Data Node,用来实现 Hot & Warm 架构,降低集群的部署成本

Machine Learning Node

  • 负责排机器学习的job,用来异常检测

配置节点

  • 开发环境一个节点可以承担多个角色
  • 生成环境中,遵循单一职责原则
节点类型 配置参数 默认值
maste eliginle node.master true
data node.data true
ingest node.ingest true
Coordinating only 每个节点模式都是Coordinating
Machine Learning node.ml true (需要 enable x-pack)

分片

  • 主分片,用来决定数据水平扩展的问题。通过主分片,可以将数据分布到集群内所有节点上
    • 一个分片是一个运行Lucene的实例
    • 主分片数据索引创建时指定,后续不允许修改,除非Reindex
  • 副本,用来解决数据高可用的问题。分片是主分片的拷贝
    • 副本分片数,可以动态调整
    • 增加副本数,还可以再一定程度上提高服务的可用性(吞吐)

设定

  • 对于生成环境中分片的设定,需要提前做好容量规划
    • 分片数设置过小
      • 导致后续无法增加节点实现水平扩展
      • 单个分片的数据量太大,导致数据重复分配耗时
    • 分片数过大,7.0开始,默认主分片设置1
      • 影响搜索结果的相关性打分,影响统计结果的准确性
      • 单个节点上过多的分片,导致资源的浪费,影响性能

查看集群状态

1
GET /_cluster/health

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~