ElasticSearch学习记录

一、简介

  ElasticSearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。

  Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

  设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

 

二、概念

  1、节点[Node]:单个 Elastic 实例称为一个节点 //分为 Master Node,Data Node,Coordinating Node

  2、集群[Cluster]:一组节点构成一个集群

  3、索引[Index]:含有相同属性的文档集合。// 倒排索引(Inverted Index)

  4、分片[Shard]:每个索引都有多个分片,每个分片都是 Lucene 索引 //一个索引分成了几份 ,Elasticsearch 跨这些分片分配数据和请求,还会跨数据节点分配分片。

  5、备份[Replicas]:拷贝一份分片就完成分片的备份 //即,一个分片的副本,用于容错

  6、分段[Segment]:Shard的最小存储组成部分。

  7、文档[Document]:可以被索引的基础数据单位,是存储在ES中的一个JSON格式的字符串。

  8、类型[Type]:索引可以定义一个或多个类型,文档必须属于一个类型

  9、分词器[Analyzer]:分词组件

  10、词条[Term]:索引词,指拆分出来的单个词,是一个能被索引的精确值。

 

  recovery:代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

  river:代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有  couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

  gateway:代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,

  当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。

  es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

  discovery.zen:代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

  Transport:代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

 

Master Node: 负责集群中的元数据管理,索引的创建、删除、分片分配等,不负责检索与聚合。

Data Node:数据存储节点,主要保存分片数据,如分片的CRUD、搜索、聚合。所以数据节点的负载一般较高,比较消耗CPU、IO、内存等,建议采用高配置的硬件。

Coordinating Node:协调节点,查询时的主搜索节点A(不一定是主节点),其余节点做分查询,最后做聚合。

 

 

三、集群图例

elasticsearch-head

 

四、架构分层

 

五、底层

  1、倒排索引

  倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。

  由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。

  带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

  2、分片原理

  分片路由算法:hash 取模

shard = hash(routing) % number_of_primary_shards

  routing值是一个任意字符串,它默认是_id但也可以自定义。

  这个routing字符串通过哈希函数生成一个数字,然后除以主切片的数量得到一个余数(remainder),

  余数的范围永远是0到number_of_primary_shards - 1,这个数字就是特定文档所在的分片。

  这也解释了为什么主分片的数量只能在创建索引时定义且不能修改:如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档也就永远找不到了。

 

  设置分片数量和副本数量

// 创建指定分片数量、副本数量的索引
PUT /job_idx_shard_temp
{
"mappings":{
"properties":{
"id":{"type":"long","store":true},
//......
 
}
},
"settings":{
"number_of_shards":3,
"number_of_replicas":2
}
}
 
// 查看分片、主分片、副本分片
GET /_cat/indices?v

 

 

  3、集群Master选举

  基于 Bully 算法(霸道算法)实现。

  

  4、脑裂(split brain)

  脑裂问题,就是同一个集群中的不同节点,对于集群的状态,有了不一样的理解,同时存在多个 Leader。

 

  5、去中心化

  一个 es 集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。

  es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,

  因为从外部来看 es 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个 es 集群通信是等价的。

 

 

基础资料:

ELK官网:https://www.elastic.co/

ELK官网文档:https://www.elastic.co/guide/index.html

ELK中文手册:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

ELK中文社区:https://elasticsearch.cn/

ELK-API :https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html

 

Elasticsearch - 百度百科

Elasticsearch-零基础学习

全文搜索引擎 Elasticsearch 入门教程

Elasticsearch 基础入门

es系列:集群分布式架构及原理

Elasticsearch倒排索引结构

elasticsearch 分片(Shards)的理解

Elasticsearch分片原理

分布式搜索引擎Elasticsearch的架构分析

 

分布式基础-谁来当老大(Bully算法)

Elasticsearch选举原理之Bully算法

Elasticsearch的选举机制

elasticsearch的master选举机制

Elasticsearch脑裂问题详细分析以及解决方案

 

Elasticsearch入门系列~通过Java一系列操作Elasticsearch

Elasticsearch Java API四种实现方式

ElasticSearch大数据分布式弹性搜索引擎使用

 

ELK日志分析平台搭建全过程

ELK 日志监控平台环境搭建及使用说明

 

查询语法

Lucene查询语法详解

ElasticSearch 基本查询语法

Elasticsearch几种查询语法

elasticsearch 基础 —— Query String

elasticsearch-查询基础篇

ElasticSearch入门3: 高级查询

19 个很有用的 ElasticSearch 查询语句 篇一

ElasticSearch常用查询语法

elasticsearch基本操作之--使用QueryBuilders进行查询

Elasticsearch java api 常用查询方法QueryBuilder构造举例

ElasticSearch AggregationBuilders java api常用聚会查询

ElasticSearch里面如何分组后根据sum值排序

es java 聚合方法——单字段分组后求和

Elasticsearch java API (17)Aggregations 聚合 函数

Elasticsearch 统计代码例子

Elasticsearch——分页查询From&Size VS scroll

ElasticSearch - 解决ES的深分页问题 (游标 scroll)

Elasticsearch 查询in 和 not in 的实现方式

Elasticsearch 统计代码例子

elasticsearch系列四:搜索详解(搜索API、Query DSL)

elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)

随笔分类 - 搜索引擎

Elasticsearch 清空type下所有documents

 

工具

一文上手 Elasticsearch常用可视化管理工具

严选 | Elasticsearch史上最全最常用工具清单

windows下安装ElasticSearch的Head插件

elasticsearch 安装部署以及插件head安装,和使用教程

elasticsearch-head的使用

地址:https://github.com/mobz/elasticsearch-head

git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open http://localhost:9100/

 

集群搭建

手把手教你搭建一个Elasticsearch集群

搭建 ElasticSearch 伪集群

 

架构

Elasticsearch-零基础学习

Elasticsearch 分片分配探秘 

Elasticsearch 分片分配探秘-infoq

 

高可用

腾讯云Elasticsearch集群多可用区容灾实现原理及最佳实践

Elasticsearch 多种跨机房灾备方案对比与实战解读

ES集群如何做到高可用

Elasticsearch 跨机房灾备建设

珍藏版ES多活三套方案

ES异地双活方案

posted @ 2017-08-21 18:33  风过无痕521  阅读(173)  评论(0编辑  收藏  举报