Elasticsearch是一个近实时的分布式搜索引起,其底层基于开源全文搜索库Lucene;Elasticsearch对Lucene进行分装,对外提供REST API 的操作接口。基于 ES,可以快速的搭建全文搜索引擎;除了搜索功能, ES还可以对数据进行分析:如日志分析、指标分析,同时还提供了机器学习功能。同时Elasticsearch有一个完整的生态圈,Elastic提供了数据可视化组件:kibana,数据抓取组件:logstash,filebeat。

ES相关概念

1.ES集群

  Elasticsearch是一个分布式系统,具有高可用性及可扩展性,当集群中有节点停止或丢失时不会影响集群的服务以及数据的丢失;同时当访问量或数据量增加时可用采用横向扩展的方式,增加节点,将请求或数据分散到集群的各个节点上。不同的集群通过不同的名字来区分,集群默认的名字为“elasticsearch“,如果节点的集群名称一样,则这些节点组成为一个集群。

  集群名的设置方式:

  1).es配置文件中设置cluster.name:elasticsearch集群名

  2).节点启动命令中指定集群名:-E cluster.name:elasticsearch集群名

2.ES节点

一个节点是一个ElasticSearch的实例,本质上是一个Java进程。

ES节点类型列表:

节点类型

节点作用

节点配置参数

默认值

Master Node

处理创建、删除索引等操作,决定分片被分配到哪个节点,负责索引的创建删除,维护并更新集群状态。

node.master

true

Data Node

可以保存数据的节点,处理与数据相关的操作,如索引的CRUD、搜索和聚合,数据节点的操作属于I/O、内存和CPU密集型操作。

node.data

true

Ingest Node

提取节点,具有数据预处理的能力,可拦截Index或Bulk Api的请求,可对数据进行转换,并重新返回Index或Bulk Api,默认配置下,所有节点都是Ingest Node。

node.ingest

true

Coordinating Node

协调节点,负责接受客户端的请求,并将请求分发到合适的节点,并将各节点返回的数据汇聚到一起。每个节点都默认是Coordinating Node。

设置master、data、ingest全为false

Maching Learning Node

机器学习节点,用于运行作业和处理机器学习API请求。

node.ml

true,需要enablex-pack

默认情况下一个节点承担了所有的节点角色。但是在生产环境中,建议根据数据量,写入及查询的吞吐量,选择合适的部署方式,最好将节点设置为单一角色。

单一角色节点配置方式:

节点类型

单一角色配置

机器配置

Master Node

node.master: true

node.data: false

node.ingest: false

低配置CPU、RAM、磁盘

Data Node

node.master: false

node.data: true

node.ingest: false

高配置CPU、RAM、磁盘

Ingest Node

node.master: false

node.data: false

node.ingest: true

低配置CPU、中等配置RAM、低配置磁盘

Coordinating Node

node.master: false

node.data: false

node.ingest: false

中高配置CPU、中高配置RAM、低配置磁盘

Master eligible Node(主节点候选节点)选主过程:

  Master eligible Node互ping对方,节点Id小的会被选举为Master节点,其他节点加入集群时,不会承担Master节点的角色;当集群中选举出的Master节点丢失,会重新进行选举。

选主过程脑裂问题:

  脑裂问题是分布式系统集群环境中必然会遇到的问题,会引起集群存在多个主节点,如当出现网络问题,一个节点和其他节点无法连接时,会发生脑裂问题。

  

  避免发送脑裂问题的方法:

    1.限定集群节点的选举条件,设置quorum(仲裁),只有在Master eligible节点数大于quorum时,才能进行选举。

      设置discovery.zen.minimum_master_nodes(默认为1):官方的推荐值是(N/2)+1,其中N是master eligible节点的数量。

    2.设置discovery.zen.ping_timeout(默认值为3秒):默认情况下,如果master节点在3秒之内没有应答,则认为该节点宕掉,增加等待节点响应的时间,一定程度上会减少误判,降低脑裂          发生的概率。

3.ES文档

  文档是ES的最小单位,通常用JSON方式的数据结构表示,类似于数据库中的一条记录。文档具有以下特征:

  1.自我包含,一篇文档同时包含字段和它们的取值。

  2.层次型结构,文档中可以包含新的文档。

  3.灵活的结构,不依赖于预先定义的模式,文档是无模式的,并非所有的文档都需要拥有相同的字段。

  文档的元数据:_index:文档所属的索引名;_type:文档所属的类型名;_id文档的唯一id,_source:文档的原始json数据,_version文档的版本信 息,_score:文档的相关性打分。

4.ES类型

  类型是文档的逻辑容器,类似于数据库中的表,类型在 Elasticsearch中表示一类相似的文档,每个类型中字段的定义称为映射。ES7.x已经将类型移除,7.x中一个索引只能有一个类型,默认为_doc。

5.ES映射

  mapping映射, 就像数据库中的 schema ,定义索引中字段的名称,定义字段的数据类型(如 string, integer 或 date),设置字段倒排索引的相关配置。当 Elasticsearch 遇到文档中以前未遇到的字段,会使用dynamic mapping 来确定字段的数据类型,并自动把新的字段添加到类型映射。在实际生产中一般或禁用dynamic mapping,避免过多的字段导致cluster state占用过多,同时禁止自动创建索引的功能,创建索引时必须提供Mapping信息或者通过Index Template创建。

6.ES索引

  索引是映射类型的容器,类似于数据库。

7.ES分片

  一个分片是一个运行的Lucene的实例,是一个包含倒排索引的文件目录。一个ES索引由一个或多个主分片以及零个或多个副本分片组成,主分片数在索引创建是指定,后续不允许修改;副本分片主要用于解决数据高可用的问题,是主分片的拷贝,一定程度上提高服务的可读性。

  分片的设定:生产环境中主分片数的设定,需要提前做好容量规划,因为主分片的数量是不可修改的。

  分片数设置过小:无法通过增加节点实现水平扩展,单个分片的数据量太大,导致数据重新分片耗时;分片数设置过大:影响搜索结果的相关性打分,浪费资源,同时影响性能。

【Elasticsearch学习】之基础概念的更多相关文章

  1. Elasticsearch教程之基础概念

    基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 1.接近实时(NRT)        Elasticsearch是一个接近实时的搜索平台.这意味 ...

  2. lua学习之基础概念篇

    基础概念 程序块 (chunk) 定义 lua 中的每一个源代码文件或在交互模式(Cmd)中输入的一行代码都称之为程序块 一个程序块就是一连串语句或者命令 lua 中连续的语句不需要分隔符,但为了可读 ...

  3. Java基础学习之基础概念与环境搭建(1)

    1.Java基础概念 1.1.Java语言的特点 Java语言是简单易学的 Java语言是面向对象(封装.继承和多态) Java语言是平台无关的(一次编译,到处运行) Java语言是可靠的.安全的(异 ...

  4. ELK & ElasticSearch 5.1 基础概念及配置文件详解【转】

    转自:https://blog.csdn.net/zxf_668899/article/details/54582849 配置文件 基本概念 接近实时NRT 集群cluster 索引index 文档d ...

  5. elasticsearch的分布式基础概念(1)

    Elasticsearch对复杂分布式机制的透明隐藏特性 Elasticsearch是一套分布式的系统,分布式是为了应对大数据量 隐藏了复杂的分布式机制 分片机制(随随便便就将一些document插入 ...

  6. 读《深入理解Elasticsearch》点滴-基础概念

    Lucene的概念 document:以json的形式体现,搜索和搜索的主要载体 field:document的一个部分 term(词项):代表文本中的一个词 token(词条):term在field ...

  7. Kubernetes学习之基础概念

    本文章目录 kubernetes特性 kubernetes集群架构与组件 一.kubernetes集群架构 二.集群组件 三.ubernetes集群术语 深入理解Pod对象 一.Pod容器分类 基础容 ...

  8. MongoDB学习笔记-基础概念

    mongodb中基本的概念 文档.集合.数据库 与关系数据库的概念对比更容易理解

  9. docker学习(1)--基础概念

    转载请注明源文章出处:http://www.cnblogs.com/lighten/p/6841677.html 1.前言 docker的官网:这里.下一段摘自官网描述. docker是世界领先的软件 ...

  10. Elasticsearch 学习之 Marvel概念

    概要 含义如下: 搜索速率:对于单个索引,它是每秒查找次数*分片数.对于多个索引,它是每个索引的搜索速率的总和. 搜索延迟:每个分片中的平均延迟. 索引速率:对于单个索引,它是每秒索引的数量*分片数量 ...

随机推荐

  1. Python 0(安装及初步使用+学习资源推荐)

    不足之处,还请见谅,请指出不足.本人发布过的文章,会不断更改,力求减少错误信息. Python安装请借鉴网址https://www.runoob.com/python/python-install.h ...

  2. 360众测考试 Drupal 漏洞 CVE-2018-7600 远程代码执行-复现

    0x00 前言 昨天360众测遇到的一个题 今天自己搭环境复现一下,希望对大家有帮助 0x01 漏洞简介 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业 ...

  3. 008-进制-C语言笔记

    008-进制-C语言笔记 学习目标 1.[掌握]include预处理指令 2.[掌握]多文件开发 3.[了解]认识进制 4.[掌握]进制之间的互相转换 5.[掌握]原码,反码,补码 6.[掌握]位运算 ...

  4. AJ学IOS(01) UI之Hello World与加法计算器

    不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀 ...

  5. 关于gpu版本的tensorflow+anaconda+jupyter的一些安装问题(持续更新)

    关于anaconda安装,虽然清华镜像站资源很丰富,但是不知道是网络还是运气的问题,用这个路径安装的时候总是出现文件丢失.具体表现可能是anaconda prompt 找不到,conda命令无效等问题 ...

  6. Plant 矩阵快速幂,,,,有点忘了

    题目链接:https://codeforces.com/contest/185/problem/A 题目大意就是求n次以后  方向朝上的三角形的个数 以前写过这个题,但是忘了怎么做的了,,,又退了一遍 ...

  7. mybatis一级缓存让我憔悴

    Mybatis对缓存提供支持,是默认开启一级缓存. 来一段代码,这边使用的是mybatis-plus框架,通过构建 QueryWrapper 查询类来实现的. @Transactional publi ...

  8. @SessionAttributes 的使用

    @SessionAttributes 注解只用作用在 类 上,作用是将指定的 Model 的键值对保存在 session 中.可以让其他请求共用 session 中的键值对. 指定保存的属性名 作用是 ...

  9. 全网最全最细的jmeter接口测试教程以及接口测试流程详解

    一.Jmeter简介 ​ Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试. Jmeter具备高移植性,可以实现跨平台运行. Jmeter可以实 ...

  10. testNG groups 分组测试

    testNG的分组通过xml文件<groups>标签和@Test(group="组名")来实现分组 xml中关于分组的详细介绍,通过groups 定义一个组,通过< ...