ElasticSearch(一) ElasticSearch入门

ElasticSearch(一) ElasticSearch入门

你能get到的知识点?

  1. ES简介以及同类产品对比
  2. ES的基础概念
  3. ES head的安装
  4. ES的单节点安装与集群式安装

本文首发于CSDN,作者:lomtom

原文链接:https://blog.csdn.net/qq_41929184/article/details/116799994

个人网站:https://lomtom.top,个人公众号:博思奥园,同步更新。

你的支持就是我最大的动力。

ES系列:

  1. ElasticSearch(一) ElasticSearch入门
  2. ElasticSearch(二)在ElasticSearch 中使用中文分词器
  3. ElasticSearch(三)ElasticSearch索引操作
  4. ElasticSearch(四)ElasticSearch文档操作
  5. ElasticSearch(五)ElasticSearch字段类型

一、概述

什么是ElasticSearch?

ElasticSearch:高可用分布式搜索引擎(一般简称为ES),可用于实时存储、检索数据,使用Restful API隐藏Lucene的复杂性,可以让全文搜索变得简单

  1. 功能及特点:

    1. 分布式的搜索引擎与数据分析(可拓展到上百台服务器)
    2. 全文检索、结构化检索(检索是使用倒排来实现的)
    3. 对海量数据进行实时处理(支持PB级别数据)
  2. 使用场景: 可用于大数据、数据清洗等等

  3. 目前使用:

    1. 维基百科:类似国内的百度百科,全文检索、高亮、搜索推荐
    2. Github:开源代码管理网站
    3. 电商网站
    4. 日志数据分析:logstash采集日志、ES进行复杂的数据分析,常常使用ELK或EFK来进行日志采集分析。
    5. 等等。。。
    
  4. 背景: 一个码农失业,给老婆写了一个菜谱的简单搜索引擎,找到工作后,将初版本的搜索引擎进一步迭代,就有了最开始的ElasticSearch。

同类对比:ES vs Solr

  1. es基本是开箱即用(解压就可以用) ,非常简单,Solr安装略微复杂- 丟丢!
  2. Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。
  3. Solr 支持更多格式的数据,比如SON. XML、 CSV ,而Elasticsearch仅支持json文件格式。
  4. Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能。高级功能多有第三方插件提供,例如图形化界面需要
    kibana友好支撑
  5. Solr 查询快,但更新索引时慢(因为可能会导致IO阻塞)
    • ES建立索引快, 即实时性查询快,用于facebook新浪等搜索。
    • Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
    • 插入数据时,Solr会有明显的搜索效率的降低,而ES不会。
  6. Solr比较成熟,有一一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用
    成本较高。
  7. ES在未来成为趋势

二、入门

ES基本概念

(1)Near Realtime(NRT):近实时,两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级

(2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常
(3)Node:节点,集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群

(4)Index:索引,包含一堆有相似结构的文档数据,类似于数据库中的一个表,例如一个用户表。
(5)Type:类型,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document。在7.X版本被弃用,使用_doc代替。

​ 在7.X前把index比作数据库名,把type比作表名更加合适,但是在7.X后,type被ES弃用,所以将index比作表,而type就没有啥实际意义,只是迭代的遗留产物,官方在后续版本将彻底弃用type。

(6)Document:文档,es中的最小数据单元,类似于数据库中表的一行数据。例如用户表中的某一行数据。

(7)shard:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个shard都是一个lucene index。
(8)replica:任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。

  1. 集群名:在config/elasticsearch.yml中配置,如果需要配置集群,所有的节点名字的集群名字必须一致
1
cluster.name: "ES-lomtom"`
  1. 如何查看节点状态:
1
GET /_cluster/health

在一个不包含任何索引的空集群中,它将会有一个类似于如下所示的返回内容:

1
2
3
4
5
6
7
8
9
10
11
12
{
"cluster_name": "elasticsearch",
"status": "green",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}

status 字段是我们最关心的。

status 字段指示着当前集群在总体上是否工作正常。它的三种颜色含义如下:

– 绿色(green):健康状态,所有的主分片和副本分片都正常运行。
– 黄色(yellow):警告状态,所有的主分片都正常运行,但不是所有的副本分片都正常运行。
– 红色(red):错误状态,有主分片没能正常运行。

三、安装

以前我有一篇文章专门介绍怎么使用docker去安装ES,感兴趣的看一下:传送门

1 ElasticSearch Head

ElasticSearch Head可用于ES的可视化。

安装:

我们通常可以通过两种方法来使用他:

  1. 浏览器插件:谷歌应用商店:https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/related?utm_source=chrome-ntp-icon

  2. ES head的源码:https://github.com/mobz/elasticsearch-head/releases

    ​ 简单的几部就可以使用ES head:(前提是有node环境,并且安装npm)

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

2 单节点安装

1、docker安装:见我另一篇文章https://blog.csdn.net/qq_41929184/article/details/105033771
2、压缩包安装:Elasticsearch官网:https://www.elastic.co/cn/elasticsearch/

Support Matrix:
https://www.elastic.co/cn/support/matrix

启动:
1、直接下载:进入到 bin 目录下,直接执行 elasticsearch 启动即可。
2、docker下载:启动容器即可启动ElasticSearch

验证:
进入http://localhost:9200/,出现如下信息即为成功,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "0f061808e3b2",
"cluster_name": "docker-cluster",
"cluster_uuid": "hSWrz40ASFqFjLrRGvmAoA",
"version": {
"number": "7.5.2",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "8bec50e1e0ad29dad5653712cf3bb580cd1afcdf",
"build_date": "2020-01-15T12:11:52.313576Z",
"build_snapshot": false,
"lucene_version": "8.3.0",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

ES的目录以及含义:

目录 含义
modules 依赖模块目录
lib 第三方依赖库
logs 输出日志目录
plugins 插件目录
bin 可执行文件目录
config 配置文件目录
data 数据存储目录

3 分布式(集群)安装

  • 一主二从
  • master 的端口是 9200,slave 端口分别是 9201 和 9202

1、如果是docker安装,只需要注意端口映射,以及配置的ip即可,

1
2
3
4
5
6
7
8
1、master
docker run -d --name elaseticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" [镜像id]

2、salve1
docker run -d --name elaseticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" [镜像id]

3、slave2
docker run -d --name elaseticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" [镜像id]

2、如果是压缩包,解压后修改相应的config/elasticsearch.yml即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1、master
cluster.name: "ES-lomtom"
node.name: "master"
http.cors.enabled: true
http.cors.allow-origin: "*"

node.master: true
network.host: localhost

2、slave1
cluster.name: "ES-lomtom"
node.name: "slave1"
http.cors.enabled: true
http.cors.allow-origin: "*"

network.host: localhost
http.port: 9201
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

3、slave2
cluster.name: "ES-lomtom"
node.name: "slave2"
http.cors.enabled: true
http.cors.allow-origin: "*"

network.host: localhost
http.port: 9202
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

然后启动三台机器,使用head插件进行查看

4 可视化工具kibana

常常我们需要一个图表式的可视化,kibana就是一个不错的选择。

1、docker安装:见我另一篇文章
2、压缩包安装:https://www.elastic.co/cn/downloads/kibana

四、你可能会遇到的问题:

1、出现黄色警告

黄色(yellow)的详细解释

2、ES跨域问题:

可能会遇到的问题:在安装ES head和ES后,打开插件或者head地址,如果未出现相关节点信息可能是因为未配置跨域

打开 config/elasticsearch.yml 文件

1
2
http.cors.enabled: true
http.cors.allow-origin: "*"

启动:

ElasticSearch(一) ElasticSearch入门

https://lomtom.cn/51622.html

作者

lomtom

发布于

2021-06-26

更新于

2021-12-10

许可协议