一、环境
此次笔记使用的运行环境以及软件版本
系统:WIN10
JDK版本:1.8
Elasticsearch版本:7.15.2
elasticsearch-head版本:最新
IK分词器版本:7.15.2
Kibana版本:7.15.2
二、Elasticsearch基本知识
2.1 介绍
ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
2.2 使用场景
(1)监听网站Nginx的日志时时同步到ES,通过Kibana来分型日志是否存在问题,服务器层面的监控;
(2)监听Mysql日志,对日志进行监控检测,对于业务来说可以进行一些辅助分析;
(3)用户行为数据埋点收集,提供大数据分析数据支持;
(4)使用ES来构建网站的全文检索引擎;
2.3 Elasticsearch 特点
(1)分布式的实时文件存储,每个字段都被索引并可被搜索;
(2)分布式的实时分析搜索引擎;
(3)可弹性扩展到上百台服务器规模,处理PB级结构化或非结构化数据;
(4)开箱即用(安装即可使用),它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。只需很少的学习既可在生产环境中使用。
2.4 ElasticSearch核心概念:倒排索引
关系型数据库 拿着文档找单词 elasticSearch 拿着单词找文档
elasticSearch中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型可以包含多个文档(行),每个文档可以包含多个字段(列)
es是面向文档的,一切都是json。
关系型数据库和elasticSearch对比
关系型数据库 | elasticSearch |
---|---|
数据库(database) | 索引 indices |
表(table) | 类型 types |
行(row) | 文档 documents |
字段(columns) | fields |
2.5 ElasticSearch基本概念
(1) Cluster
集群是一个或多个节点的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。群集由唯一的名称标识,默认情况下为"elasticsearch"。此名称很重要,因为如果节点设置为按名称加入群集,则该节点只能是群集的一部分。
确保不要在不同的环境中重用相同的群集名称,否则很可能会导致节点加入错误的群集。例如,您可以使用logging-dev,logging-stage以及logging-prod用于开发,预发和生产环境。
如果群集中只有一个节点,那么它是完全正常的。此外,您还可以拥有多个独立的集群,每个集群都有自己唯一的集群名称。
(2) Node
节点是作为集群一部分的单个服务器,存储数据并参与集群的索引和搜索功能。就像集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不需要默认值,可以定义所需的任何节点名称。此名称对于管理目的非常重要,您可以在其中识别网络中哪些服务器与Elasticsearch集群中的哪些节点相对应。
可以将节点配置为按集群名称加入特定群集。默认情况下,每个节点都设置为加入一个名为cluster的集群elasticsearch,这意味着如果您在网络上启动了许多节点并且假设它们可以相互发现,它们将自动形成并加入一个名为elasticsearch的集群。
在单个集群中,可以拥有任意数量的节点。此外,如果网络上当前没有其他Elasticsearch节点正在运行,则默认情况下启动单个节点将形成一个名为elasticsearch的新单节点集群。
ElasticSearch本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 ElasticSearch实例。单个 ElasticSearch实例称为一个节点(node)。一组节点构成一个集群(cluster)。
(3)Index
索引是具有某些类似特征的文档集合。
例如,可以给客户数据建立一个索引,给产品目录建立另一个索引或给订单数据的建立一个索引。
索引有一个名称标识(必须全部小写),此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引所用。
在单个群集中,您可以根据需要定义任意数量的索引。
ElasticSearch会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。所以,ElasticSearch数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。通过下面命令可以访问当前节点的所有 Index
curl -X GET 'http://localhost:9200/_cat/indices?v'
(4)Type
Type是一个逻辑意义上的分类或者叫分区,允许在同一索引中建立多个type。本质是相当于一个过滤条件,高版本将会废弃type概念。
Document 可以分组,比如 weather
这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
不同的 Type 应该有相似的结构(schema),举例来说, id
字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如 products
和 logs
)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。
下面的命令可以列出每个 Index 所包含的 Type。
curl 'localhost:9200/_mapping?pretty=true'
注意:Elastic 6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。
(5)Document
Document是可以编制索引的基本信息单元。例如,您可以为单个客户提供文档,为单个产品提供另一个文档,为单个订单提供另一个文档。该文档以JSON(JavaScript Object Notation)表示,JSON是一种普遍存在的互联网数据交换格式。
在索引/类型中,可以根据需要存储任意数量的文档。
值得注意的是,尽管文档实际上驻留在索引中,但实际上必须将文档分配给索引中的一个类型(type)中。
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。
Document 使用 JSON 格式表示,如下所示:
{ "id": "000001", "name": "joshua317", "age": 28 }
(6)分片(Shards)
索引可能存储大量可能超过单个节点硬件限制的数据。例如,占用1TB磁盘空间的十亿个文档的单个索引可能不适合单个节点的磁盘,或者可能太慢而无法单独从单个节点提供搜索请求。
为了解决这个问题,Elasticsearch提供了将索引细分为多个称为分片的功能。创建索引时,只需定义所需的分片数即可。每个分片本身都是一个功能齐全且独立的"索引",可以托管在集群中的任何节点上。
分片很重要,主要有两个原因:
-
它允许集群进行水平扩展;
-
它允许集群跨分片(可能在多个节点上)分布和并行化操作,从而提高性能和吞吐量。 分片的分布方式以及如何将其文档聚合回搜索请求的机制完全由Elasticsearch管理,对用户而言是透明的。
(7)副本(Replicas)
副本主要是针对主分片(Shards)的复制,Elasticsearch中主分片可以拥有0个或多个的副本。
副本分片的主要目的就是为了故障转移。
分片副本很重要,主要有两个原因:
-
它在分片或节点发生故障时提供高可用性。因此,副本分片永远不会在与其复制的主分片相同的节点;
-
副本分片也可以接受搜索的请求,可以并行搜索,从而提高系统的吞吐量。
每个Elasticsearch分片都是Lucene索引。单个Lucene索引中可以包含最大数量的文档。截止LUCENE-5843,限制是2,147,483,519(= Integer.MAX_VALUE - 128)文档。您可以使用_cat/shardsAPI 监控分片大小。
三、Elasticsearch-7.15.2安装
3.1 下载安装包
访问地址:Download Elasticsearch | Elastic
下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-windows-x86_64.zip
3.2 解压运行
解压到自己的安装目录
目录文件作用: bin :脚本文件,包括 ES 启动 & 安装插件等等 config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等 JDK : 内置的 JDK,JAVA_VERSION="13.0.2" lib : 类库 logs : 日志文件 modules : ES 所有模块,包括 X-pack 等 plugins : ES 已经安装的插件。默认没有插件 data : ES 启动的时候,会有该目录,用来存储文档数据。该目录可以设置
运行,直接双击bin目录下面的 elasticsearch.bat
文件
注意:会出现下面的告警信息,主要说的是本机安装的jdk1.8版本不满足需要,Elasticsearch7.x所需要的jdk版本是java11,可以忽略这个告警,当然也可以根据需要调整到java11的版本。
"warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" Future versions of Elasticsearch will require Java 11; your Java version from [C:\MyProgram\Java\jdk1.8.0_281\jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set. Future versions of Elasticsearch will require Java 11; your Java version from [C:\MyProgram\Java\jdk1.8.0_281\jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set. Warning: with JDK 8 on Windows, Elasticsearch may be unable to derive correct ergonomic settings due to a JDK issue (JDK-8074459). Please use a newer version of Java. Warning: MaxDirectMemorySize may have been miscalculated due to JDK-8074459. Please use a newer version of Java or set MaxDirectMemorySize explicitly.
在elasticsearch7.x之后的版本, 已经集成了自带的jdk, 在根目录下的jdk文件夹中 这里需要修改elasticsearch-env.bat启动文件的配置内容, 设置系统使用elasticsearch自带的jdk版本 在 bin/elasticsearch-env.bat
文件中找到关于JAVA_HOME的配置, 注释掉if...else判断的东西, 替换为如下三行代码
把下面的代码
# now set the path to java if [ ! -z "$ES_JAVA_HOME" ]; then JAVA="$ES_JAVA_HOME/bin/java" JAVA_TYPE="ES_JAVA_HOME" elif [ ! -z "$JAVA_HOME" ]; then # fallback to JAVA_HOME echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2 JAVA="$JAVA_HOME/bin/java" JAVA_TYPE="JAVA_HOME" else # use the bundled JDK (default) if [ "$(uname -s)" = "Darwin" ]; then # macOS has a different structure JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java" else JAVA="$ES_HOME/jdk/bin/java" fi JAVA_TYPE="bundled JDK" fi
改为:
set JAVA="%ES_HOME%\jdk\bin\java.exe" set JAVA_HOME="%ES_HOME%\jdk" set JAVA_TYPE=bundled jdk
然后重新启动。
启动成功后,会出现下面的信息
简单访问下
四、elasticsearch-head插件安装
为了便于管理ES,可使用head插件,这是最初级的管理工具,在浏览器中显示ES集群,索引等信息,十分简便好用。
安装elasticsearch-head需要安装node和grunt
4.1 node下载并安装
node访问地址:
node下载地址:
https://nodejs.org/dist/v16.13.0/node-v16.13.0-x64.msi
直接双击进行安装,安装完成后,可以通过 node -v
查看
)
4.2 elasticsearch-head下载并安装
访问地址:
GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster
下载地址:
https://github.com/mobz/elasticsearch-head/archive/refs/heads/master.zip
解压 elasticsearch-head-master到 elasticsearch的安装目录
4.3 安装grunt
grunt 是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动。
在命令行下执行 npm install -g grunt-cli
4.4 安装依赖
在elasticsearch-head-master目录下执行 npm install
安装依赖
4.5 修改elasticsearch-head-master配置
修改服务器监听地址,配置文件: Gruntfile.js
connect: { server: { options: { port: 9100, base: '.', keepalive: true, hostname: '*' } } }
4.6 修改elasticsearch配置,重新启动
修改elasticsearch安装目录下的配置文件 config/elasticsearch.yml
# 设成0.0.0.0让任何人都可以访问,线上服务不要这样设置。 network.host: 0.0.0.0 http.port: 9200 # 解决elasticsearch-head 集群健康值: 未连接问题, 配置解决跨域, 否则es-head连接会跨域 http.cors.enabled: true http.cors.allow-origin: "*" node.name: node-1 cluster.initial_master_nodes: ["node-1"]
注意:
(1)elasticsearch.yml文件的编码是utf-8
(2)如果出现下面报错信息
node validation exception [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
这个问题是由于配置的问题导致的, 修改配置文件即可解决,在elasticsearch.yml中配置node节点
node.name: node-1 cluster.initial_master_nodes: ["node-1"]
修改完配置后,重启elasticsearch服务
4.7 启动运行elasticsearch-head服务
在elasticsearch-head-master目录下执行 grunt server
命令
如果在PowerShell下以管理员的身份下执行 grunt server
下面错误
PS C:\MyProgram\elasticsearch-7.15.2-windows\elasticsearch-head-master> grunt --version grunt : 无法加载文件 C:\Users\joshua317\AppData\Roaming\npm\grunt.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + grunt --version + ~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
需要执行下面命令,然后选择Y
set-ExecutionPolicy RemoteSigned
关闭PowerShel ,然后执行 get-ExecutionPolicy
,发现变成了RemoteSigned,就成功了
然后重新执行 grunt server
命令即可
4.8 访问elasticsearch-head服务
如果出现集群健康值:未连接,请查看Elasticsearch配置是否正确,Elasticsearch服务是否启动
五、IK分词器安装
在Elasticsearch中,使用较多的中文分词器是 elasticsearch-analysis-ik,这个是 es 的一个第三方插件,代码托管在 GitHub 上:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.
注意:Elasticsearch的版本7.15.2,所以需要对应的ik分词器插件版本应该也是7.15.2 ,也就是说IK分词器的版本要选择和Elasticsearch版本号一样
(1)安装方式一
直接进入进入Elasticsearch安装目录的的bin目录下,打开命令行窗口执行命令即可。
.\elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip
(2)安装方式二
直接将elasticsearch-analysis-ik-7.15.2.zip文件拷贝到Elasticsearch安装目录的plugins目录下解压后并将elasticsearch-analysis-ik-7.15.2解压后的文件夹重命名为ik
重新运行bin/elasticsearch.bat重启,ik安装完成。
不知道如何验证是否安装成功,可以先使用帮助命令 elasticsearch-plugin -h
查看可用的命令
C:\MyProgram\elasticsearch-7.15.2-windows\bin> ./elasticsearch-plugin -h A tool for managing installed elasticsearch plugins Commands -------- list - Lists installed elasticsearch plugins install - Install a plugin remove - removes plugins from Elasticsearch Non-option arguments: command Option Description ------ ----------- -E <KeyValuePair> Configure a setting -h, --help Show help -s, --silent Show minimal output -v, --verbose Show verbose output
所以我们可以使用 elasticsearch-plugin list
查看已安装得插件。
C:\MyProgram\elasticsearch-7.15.2-windows\bin> ./elasticsearch-plugin list
ik
六、Kibana安装
Kibana 是一个 Elastic 公司推出的一个针对 es 的分析以及数据可视化平台,可以搜索、查看存放在 es 中的数据。
访问地址:Download Kibana Free | Get Started Now | Elastic
下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.15.2-windows-x86_64.zip
解压kibana-7.15.2-windows-x86_64.zip到目标路径修改kibana-7.15.2-windows-x86_64\config路径下的kibana.yml
server.port: 5601 elasticsearch.hosts: ["http://localhost:9200"]
启动Kibana
注意需要先启动elasticsearch.bat,再启动kibana.bat
直接通过链接访问:http://localhost:5601/
进入到开发者工具,http://127.0.0.1:5601/app/dev_tools#/console
禁用Kibana安全提示(Elasticsearch built-in security features are not enabled)
Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.15/security-minimal-setup.html to enable security.
在 elasticsearch.yml
配置禁用安全选项 xpack.security.enabled
,之后重启ElasticSearch即可:
xpack.security.enabled: false
YAML
Copy
最后,报错不要慌,在安装或者运行过程中,遇到异常或者报错,查看Elasticsearch安装目录下的logs目录里面的文件