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. modelform+代码发布系统前奏

    目录 注意点 form.html 添加编辑页面 ModelForm 添加 编辑 删除 代码优化 优化1 优化2 优化3 注意点 <form class="form-horizontal ...

  2. JS入门系列(1)-原型-函数原型

    实例1: 首先定义一个Persion类或者说是函数 var p1 = Persion();:表示,作为普通函数调用 var p2 = new Persion();:表示,作为构造器调用 创建函数之后, ...

  3. Python Requests-学习笔记(11)-请求与响应对象

    任何时候调用requests.*()你都在做两件主要的事情.其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源.其二,一旦 requests 得到一个从 服务器返 ...

  4. Powershell追踪路由

    一般情况下,我们可以通过Cmdlet命令来实现路由追踪 我们是否能尝试通过Powershell完成此功能呢? 脚本具体如下,可以直接粘贴 function GetTraceRoute($hostnam ...

  5. 正则表达式(JS表格简要总结)

    1. JS中正则表达式定义 JavaScript 中的正则表达式用 RegExp 对象表示. JS中定义正则表达式的两种方法: 方法 示例 RegExp 对象 var pattern = new Re ...

  6. vue 全局自定义组件

    1.vue文件 <template> <div style="position: absolute;bottom: 10px;text-align: center;widt ...

  7. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  8. 当文件目录变得杂乱不堪怎么办,python帮你轻松搞定

    这几天和几个小伙伴,在一起合做一个ppt. 做ppt之前有原版的ppt,和一个word大纲,在制作过程中,又不断添加图片.视频等素材,最终,整个目录变得杂乱不堪(见下图-处理之前) 那我想,可不可以做 ...

  9. [书籍精读]《React Native精解与实战》精读笔记分享

    写在前面 书籍介绍:本书由架构师撰写,包含ReactNative框架底层原理,以及与iOS.Android混合开发案例,精选了大量实例代码,方便读者快速学习.主要内容分为两大部分,第1部分" ...

  10. Python3使用 pytesseract 进行图片识别

    一.安装Tesseract-OCR软件 参考我的前一篇文章:Windows安装Tesseract-OCR 4.00并配置环境变量 二.Python中使用 需要使用 pytesseract 库,官方使用 ...