Elasticsearch自顶向下的架构体系

文档,索引
文档(Document)
Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
文档会被序列化成JSON格式,保持在Elasticsearch中
每一个文档都有一个UniqueID
Document使用json格式表示,下面是一个例子
{"id": "1","user": "张三","title": "工程师","desc": "数据库管理"}
文档的元数据
元数据,用于标注稳定的相关信息
_index -文档所属的索引名
_type -文档所属的类型名
_source-文档的原始Json数据
_version-文档的版本信息
_score-相关性打分
索引(Index)
Index- 索引是文档的容器,是一类文档的结合
Index体现了逻辑空间的概念:每一个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型
Shard体现了物理空间的概念:索引中的数据分散在Shard上
索引的Mapping与Settings
Mapping定义文档字段的类型
Setting定义不同的数据分布
Type
在7.0之前,一个index可以设置多个Types
6.0开始,Type已经被Deprecated。7.0开始一个索引只能创建一个Type -"_doc"
Mapping
就是对索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。不过ES的mapping比数据库灵活很多,它可以动态识别字段。一般不需要指定mapping都可以,因为ES会自动根据数据格式识别它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。
数据类型
在为Index创建Mapping的时候,可以通过字段的type属性来来指定其类型。在ES中字段类型很关键在索引的时候,如果字段第一次出现,会自动识别某个类型那么如果一个字段已经存在了,并且设置为某个类型。再来一条数据,字段的数据不与当前的类型相符,就会出现字段冲突的问题。如果自动映射无法满足需求(如:定义使用其它分词器、是否分词、是否存储等),就需要使用者自己来设置映射类型
常用的类型
text ,以前叫string。最常用的类型。默认使用standard分词器
keyword, 以前也叫string, 只不过这种string类型的数据不分词。
Numeric 注意numeric并不是一个类型,它包括多种类型。
long
integer
short
byte
double
float
date 日期类型,可以使用format参数格式化
boolean 布尔类型
true、1、on 等都可以表示为真
false、0、off 等都可以表示为假
集群/节点/分片/副本

分布式系统的可用性与扩展性
存储的水平扩容 请求量提升/数据的不断增长(将数据分布到所用节点上)
服务可用性-允许有节点停止服务
数据可用性-部分节点丢失,不会丢失数据
高可用
可扩展性
集群
Green-主分片与副本都正常分配
Yellow-主分片全部正常分配,有副本分片未能正常分配
Red-有主分片未能分配(例如 当服务器的磁盘容量超过85%时,去创建了一个新的索引)
多台Es服务器的结合的统称叫ES集群
集群的健康状态
节点

节点是一个Elasticsearch的实例,本质上就是一个JAVA进程
每一个节点都有名字,通过配置文件配置,或者启动时候指定
每一个节点在启动之后,会分配一个UID,保存在data目录下
Master-eligible nodes 和Master Node(主节点)
集群状态(cluster state)维护了一个集群中必要的信息所有节点的信息/所有的索引和其相关的Mapping与Setting信息/分片的路由信息
任意节点都能修改信息会导致数据的不一致性
每个节点启动后,默认就是一个Master eligible节点(可以设置node.master:false禁止)
Master-eligible节点可以参加选主流出,成为Master节点
每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息
DataNode(数据节点)
可以保存数据的节点。负责保存分片数据。在数据扩展上起到了至关重要的作用
Coordination Node(协调节点)
负责接收Client的请求,将请求分发到合适的节点,最终把结果汇集到一起
每个节点默认都起到了Coordination Node的职责
Hot&Warm Node
不同硬件配置的Data Node,用来实现Hot&Warm架构,降低集群部署的成本
Machine Learning Node
负责跑机器学习的Job,用来做异常检测
Ingest Node(client node代理节点)
Ingest Node 可以看作是数据前置处理转换的节点,支持 pipeline管道 设置,可以使用 ingest 对数据进行过滤、转换等操作,类似于 logstash 中 filter 的作用。
Tribe Node
5.3开始使用Cross Cluster Search)TribeNode 连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理
节点角色划分及资源使用情况
角色 | 描述 | 存储 | 内存 | 计算 | 网络 |
数据节点 | 存储和检索数据 | 极高 | 高 | 高 | 中 |
主节点 | 管理集群状态 | 低 | 低 | 低 | 低 |
Ingest 节点 | 转换输入数据 | 低 | 中 | 高 | 中 |
机器学习节点 | 机器学习 | 低 | 极高 | 极高 | 中 |
协调节点 | 请求转发和合并检索结果 | 低 | 中 | 中 | 中 |
分片(Primary Shard & Replica Shard)
副本分片数提高了数据冗余量
主分片挂掉以后能够自动由副本分片升为主分片
备份分片还能够降低主分片的查询压力(会消耗更多的系统性能)
影响搜索结构的相关性打分,影响统计结果的准确性
单个节点上过多的分片,会导致资源浪费,同时也会影响性能
导致后续无法增加节点实现水平扩展
单个分片的数据量太大,导致数据重新分配耗时
将数据切分放在每个分片中,分片又被放到集群中的节点上。
每个分片都是独立的lucene实例
分片数设置过小
分片数设置过大
分片为主分片和备份分片
REST API
Elasticsearch提供了一个非常全面和强大的REST API,使用它与集群进行交互
检查群集,节点和索引运行状况,状态和统计信息
管理您的群集,节点和索引数据和元数据
对索引执行CRUD(创建,读取,更新和删除)和搜索操作
执行高级搜索操作,例如分页,排序,过滤,脚本编写,聚合等

原文出处:https://www.cnblogs.com/Onlywjy/p/12194626.html




