ElasticSearch 学习笔记 之基本概念

2020-10-16  本文已影响0人  华阳_3bcf

前言

ELK Stack 简介

ELK 是三个开源软件的缩写,分别为:Elasticsearch、Logstash 以及 Kibana,它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具,目前由于原本的 ELK Stack 成员中加入了 Beats 工具所以已改名为 Elastic Stack。

Logstash 已经逐渐被beats 替代了。按照官方说法:

Logstash adds powerful data parsing and transformation features, but usually isn’t required.

Elastic Stack 包含:

目前 Beats 包含六种工具:

是什么?

Elasticsearch is a real-time, distributed storage, search, and analytics engine

Elasticsearch 是一个实时分布式存储、搜索、分析的引擎。

介绍那儿有几个关键字:

ES基于Apache Lucene(TM)的开源搜索引擎,是Lucene的集群版本。

为什么需要 Elasticsearch?

相对于传统关系型数据库,Elasticsearch的强大之处就是可以模糊查询

主要表现在 :

Elasticsearch的术语

RDBMS(关系型数据库) ElasticSearch
Database Index
Row Document
Column Field
Schema Mapping
SQL DSL

相信大家看完上面的对比图,对Elasticsearch的一些术语就不难理解了。

一个Elasticsearch集群会有多个Elasticsearch节点,所谓节点实际上就是运行着Elasticsearch进程的机器。

在众多的节点中,其中会有一个Master Node,它主要负责维护索引元数据、负责切换主分片和副本分片身份等工作(后面会讲到分片的概念),如果主节点挂了,会选举出一个新的主节点。

Elasticsearch最外层的是Index(相当于数据库 表的概念);一个Index的数据我们可以分发到不同的Node上进行存储,这个操作就叫做分片

比如现在我集群里边有4个节点,我现在有一个Index,想将这个Index在4个节点上存储,那我们可以设置为4个分片。这4个分片的数据合起来就是Index的数据。

为什么要分片?原因也很简单:

现在问题来了,如果某个节点挂了,那部分数据就丢了吗?显然Elasticsearch也会想到这个问题,所以分片会有主分片和副本分片之分(为了实现高可用

数据写入的时候是写到主分片,副本分片会复制主分片的数据,读取的时候主分片和副本分片都可以读

Index需要分为多少个主分片和副本分片都是可以通过配置设置的

ES中节点的角色 Role

ES中节点分为四种类型:Node Roles

  1. 主节点 master节点

主要职责就是负责集群管理,如索引创建或删除,发现集群其它节点并确定那些分片分配到相应的节点,默认情况下任何一个节点都有可能被选举为master节点,但是索引数据何搜索查询等操作会占用大量CPU、内存和IO资源,为了保证集群的稳定,通常分离主节点和数据节点;

node.master: true
node.data: false
node.ingest: false

2)数据节点 data节点

数据节点主要是存储索引数据,主要对文档进行增删改查操作,数据节点对CPU、内存和IO要求较高;

node.master: false
node.data: true
node.ingest: false

3)负载均衡节点 client节点

当一个节点既不配置为主节点也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作;

node.master: false
node.data: false
node.ingest: false

4) 预处理节点 ingest节点

预处理节点在索引数据之前可以对数据做预处理,默认所有的节点都支持ingest操作,但是也可以专门设置一个Ingest节点;

node.master: false
node.data: false
node.ingest: true

Elasticsearch更新和删除

Elasticsearch的更新和删除操作流程:

前面提到了,每隔1s会生成一个segement 文件,那segement文件会越来越多越来越多。Elasticsearch会有一个merge任务,会将多个segement文件合并成一个segement文件。

在合并的过程中,会把带有delete状态的doc物理删除掉。

Elasticsearch查询

查询我们最简单的方式可以分为两种:

根据ID去查询具体的doc的流程是:

根据query去匹配doc的流程是:

因为segement文件是每隔一秒才生成一次的
Elasticsearch查询又分可以为三个阶段:

一般我们用得最多的就是QUERY_THEN_FETCH,第一种查询完就返回整个Doc内容(QUERY_AND_FETCH)只适合于只需要查一个分片的请求。

QUERY_THEN_FETCH总体的流程流程大概是:

Query Phase阶段时节点做的事:

Fetch Phase阶段时节点做的是:

主流程我相信大家也不会太难理解,说白了就是:由于Elasticsearch是分布式的,所以需要从各个节点都拉取对应的数据,然后最终统一合成给客户端

安装

测试环境:VirtualBox,ubuntu16 虚机

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch

当前安装的版本是7.9

refs

Linux 源码方式

从官网下载linux源码包 https://www.elastic.co/downloads/elasticsearch

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.9.2-linux-x86_64.tar.gz
cd elasticsearch-7.9.2
./bin/elasticsearch

配置

The config directory location defaults to /etc/elasticsearch.

Elasticsearch has three configuration files:

上一篇 下一篇

猜你喜欢

热点阅读