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. 010-字符串-C语言笔记

    010-字符串-C语言笔记 学习目标 1.[掌握]二维数组的声明和初始化 2.[掌握]遍历二维数组 3.[掌握]二维数组在内存中的存储 4.[掌握]二维数组与函数 5.[掌握]字符串 一.二维数组的声 ...

  2. python填写问卷星,疫情上报

    #!!!注意:修改main里的url为真实的url,按需修改 50行 set_data中的submitdata # 61行 ip 修改为 真ip # submittype可能有错误,在151行 # 提 ...

  3. LIMS产品 - Labvantage技术版本

    最新版本的Labvantage8使用Java版本为Java7(Java8使用最广泛,最新版本为Java12),中间件使用JBoss(国内小型信息化系统(LIMS.QMS等)java体系一般使用Tomc ...

  4. FormCloseQuery

    FormCloseQuery是一个事件回调函数,Close是一个功能函数.而FormCloseQuery与窗口的close有什么不同,通过跟踪Call stack发生在调用Close()函数关闭窗口时 ...

  5. IP连接数据库语句

    select  *  from [19.200.108.2].[jsoctnetv6.0].[CardInfo] where ICNO='32719'

  6. Git敏捷开发--rebase命令

    git rebase是git下比较常用的命令,以下记录自己遇到较多的使用场景. 合并分支 在多人协作的项目中,拉分支是很常见的事情,经常需要同步自己的分支与远端master分支一致,有两种方式: gi ...

  7. SSH、SCP命令及使用说明

    SSH篇 1.ssh介绍 SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露 ...

  8. JavaScript思维导图很全(W3C上的!!!!很重要快来看!)

  9. idea 激活方法

    转载自: https://www.jianshu.com/p/7d60ea5e51e9

  10. 攻防世界Web新手解析

    攻防世界入门的题目 view source 禁用右键,F12审查元素 get post hackbar进行post robots 直接访问robots.txt,发现f1ag_1s_h3re.ph文件, ...