ElasticSearch(一)ElasticSearch入门
- June 26, 2021
你能get到的知识点?
- ES简介以及同类产品对比
- ES的基础概念
- ES head的安装
- ES的单节点安装与集群式安装
本文首发于CSDN,作者:lomtom
原文链接:https://blog.csdn.net/qq_41929184/article/details/116799994 🔗
个人网站:https://lomtom.top 🔗,个人公众号:博思奥园,同步更新。
你的支持就是我最大的动力。
ES系列:
- ElasticSearch(一) ElasticSearch入门
- ElasticSearch(二)在ElasticSearch 中使用中文分词器
- ElasticSearch(三)ElasticSearch索引操作
- ElasticSearch(四)ElasticSearch文档操作
- ElasticSearch(五)ElasticSearch字段类型
一、概述
什么是ElasticSearch?
ElasticSearch:高可用的分布式搜索引擎(一般简称为ES),可用于实时存储、检索数据,使用Restful API隐藏Lucene的复杂性,可以让全文搜索变得简单
-
功能及特点:
- 分布式的搜索引擎与数据分析(可拓展到上百台服务器)
- 全文检索、结构化检索(检索是使用倒排来实现的)
- 对海量数据进行实时处理(支持PB级别数据)
-
使用场景: 可用于大数据、数据清洗等等
-
目前使用:
- 维基百科:类似国内的百度百科,全文检索、高亮、搜索推荐
- Github:开源代码管理网站
- 电商网站
- 日志数据分析:logstash采集日志、ES进行复杂的数据分析,常常使用ELK或EFK来进行日志采集分析。
- 等等。。。
-
背景: 一个码农失业,给老婆写了一个菜谱的简单搜索引擎,找到工作后,将初版本的搜索引擎进一步迭代,就有了最开始的ElasticSearch。
同类对比:ES vs Solr
- es基本是开箱即用(解压就可以用) ,非常简单,Solr安装略微复杂- 丟丢!
- Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。
- Solr 支持更多格式的数据,比如SON. XML、 CSV ,而Elasticsearch仅支持json文件格式。
- Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能。高级功能多有第三方插件提供,例如图形化界面需要 kibana友好支撑
- Solr 查询快,但更新索引时慢(因为可能会导致IO阻塞)
- ES建立索引快, 即实时性查询快,用于facebook新浪等搜索。
- Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
- 插入数据时,Solr会有明显的搜索效率的降低,而ES不会。
- Solr比较成熟,有一一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用 成本较高。
- 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台服务器。
- 集群名:在
config/elasticsearch.yml
中配置,如果需要配置集群,所有的节点名字的集群名字必须一致
cluster.name: "ES-lomtom"`
- 如何查看节点状态:
GET /_cluster/health
在一个不包含任何索引的空集群中,它将会有一个类似于如下所示的返回内容:
{
"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的可视化。
安装:
我们通常可以通过两种方法来使用他:
-
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
-
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/ 🔗,出现如下信息即为成功,
{
"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、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、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、出现黄色警告
2、ES跨域问题:
可能会遇到的问题:在安装ES head和ES后,打开插件或者head地址,如果未出现相关节点信息可能是因为未配置跨域
打开 config/elasticsearch.yml 文件
http.cors.enabled: true
http.cors.allow-origin: "*"
启动: