使用ES,通常会遇到这个概念, 索引,文档,节点,分片,副本。
索引和文档,是偏向开发人员视角,逻辑概念
节点,分片,副本等,运维人员可能会偏重点,偏向物理概念。
1- 文档(document):是ES 所有可搜索数据的最小单位,它会被序列化成JSON格式(可以包含 不同的类型的字段),保存到ES中。每个文档都有一个UID,可以自己定义,也可以交给系统生成。
1.1- 文档的组成
元数据:用于标注 文档的相关信息
字段: 类似于 关系型数据库的字段,支持数据/嵌套,类型可以自定义也可以交给系统自动推算
2- 索引(index):是文档的容器,是一类 文档的结合。索引体现了 逻辑空间的概念,它有自己的定义(mapping和setting),
mapping定义了包含文档的字段和字段类型。setting定义不同数据的分布,有多少分片,有多少副本,怎么分布。
3- 类比关系型数据库
关系型数据库和 ES 的概念类比
Elasticsearch | 关系型数据库 |
index | table |
document | row |
field | colum |
mapping | schema |
3- 节点:是ES 的实例,本质上是一个java 进程。每个节点在启动后,会分配一个UID,保存在 data 目录下。每个节点都保存了集群的状态信息
3.1- Master角色节点:只有Master节点能够修改集群状态信息(包括 所有节点的信息,所有的索引mapping和setting信息,分片的路由信息),具体负责集群相关的操作,例如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定将哪些分片分配给哪些节点。集群必须有这个角色节点
3.2- Client角色节点:负责处理路由请求,处理搜索,分发索引操作,集群必须有这个角色节点
3.3- Data角色节点:负责保存数据。集群必须有这个角色节点
3.4- Coordinating功能节点: 负责接收client的请求,将请求分发到合适的节点,最后把结果汇聚到一起。每个节点默认都是Coordinating节点
3.5- Ingest功能节点:负责 预处理文档的职责。功能强大灵活。集群不一定需要这个角色。
4- 分片:是个物理概念,存储数据。分为主分片和副本。每个分片都是一个Lucene索引,它用于水平分割扩展数据
4.1- 主分片:用于解决水平扩展的问题,通过它可以将数据分布到集群的所有节点上。它是在创建index时指定的,后续不允许修改
4.2- 副本:用于数据高可用,是主分片的拷贝。副本数可以动态修改