首先明确一点:我们的首要目的是要快速上手使用Elasticsearch(以下简称ES),安装和部署ES并非重点,企业中真正需要你去安装的可能性或者机会非常小。大家可以想一想,对于刚入职的你来说,公司内部一般来说都已经有了一套完整的技术架构,让你亲自动手搭建除非是公司架构重构或者你作为公司技术团队的核心或者运维。
所以关于ES的安装,我们在基础篇不多做介绍,如果的确有需要,我会在进阶篇和运维篇,分别讲解基于CentOS、K8S搭建ES集群、部署ELK等从零到一完整详细讲解。建议大家跟随课程大纲学习,效率更高。
**结论:**建议选择Windows或者MacOS,不推荐Linux图形化界面学习(极客除外)。当然这并非绝对,如果你钟爱Linux图形化界面,并非不可以。但须知道,服务器上使用Linux非图形界面,基于Linux的开发和生产环境的部署方式大相径庭,在开发环境中学习到的Linux安装部署完全不适用于生产环境(生产环境的安装部署在运维篇讲解)。
基础篇内容关于ES安装部署限于Elasticsearch的自动发现和基本配置,集群配置相关内容在进阶篇-Elastic分布式原理中讲解,因此为了更高效的学习,建议基于OS本地多节点的部署方式部署集群,或者单节点模式启动均可。
Oracle/OpenJDK**/AdoptOpenJDK 1.8.0 | Oracle/OpenJDK** 9 | Oracle/OpenJDK** 10 | Oracle/OpenJDK** 11 | AdoptOpenJDK 11 | Oracle/OpenJDK** 12 | Oracle/OpenJDK**/AdoptOpenJDK 13 | Oracle/OpenJDK**/AdoptOpenJDK 14 | Oracle/OpenJDK**/AdoptOpenJDK 15 | Oracle/OpenJDK**/AdoptOpenJDK/Temurin 16 | Oracle/OpenJDK**/Temurin 17 | Oracle/OpenJDK**/Temurin 18 | Oracle/OpenJDK**/Temurin 19 | IBM J9 (any version) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Elasticsearch 5.0.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.1.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.2.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.3.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.4.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.5.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 5.6.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.0.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.1.x | ✔ | X | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.2.x | ✔ | ✔ | X | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.3.x | ✔ | X | ✔ | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.4.x | ✔ | X | ✔ | X | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.5.x | ✔ | X | X | ✔ | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.6.x | ✔ | X | X | ✔ | X | X | X | X | X | X | X | X | X | X |
Elasticsearch 6.7.x | ✔ | X | X | ✔ | X | ✔ | X | X | X | X | X | X | X | X |
Elasticsearch 6.8.x | ✔ | X | X | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | X | X |
Elasticsearch 7.0.x | ✔ | X | X | ✔ | X | ✔ | X | X | X | X | X | X | X | X |
Elasticsearch 7.1.x | ✔ | X | X | ✔ | X | ✔ | X | X | X | X | X | X | X | X |
Elasticsearch 7.2.x | ✔ | X | X | ✔ | X | ✔ | X | X | X | X | X | X | X | X |
Elasticsearch 7.3.x | ✔ | X | X | ✔ | X | ✔ | X | X | X | X | X | X | X | X |
Elasticsearch 7.4.x | ✔ | X | X | ✔ | ✔ | X | ✔ | X | X | X | X | X | X | X |
Elasticsearch 7.5.x | ✔ | X | X | ✔ | ✔ | X | ✔ | X | X | X | X | X | X | X |
Elasticsearch 7.6.x | ✔ | X | X | ✔ | ✔ | X | ✔ | X | X | X | X | X | X | X |
Elasticsearch 7.7.x | ✔ | X | X | ✔ | ✔ | X | X | ✔ | X | X | X | X | X | X |
Elasticsearch 7.8.x | ✔ | X | X | ✔ | ✔ | X | X | ✔ | X | X | X | X | X | X |
Elasticsearch 7.9.x | ✔ | X | X | ✔ | ✔ | X | X | ✔ | ✔ | X | X | X | X | X |
Elasticsearch 7.10.x | ✔ | X | X | ✔ | ✔ | X | X | ✔ | ✔ | X | X | X | X | X |
Elasticsearch 7.11.x | ✔ | X | X | ✔ | ✔ | X | X | X | ✔ | X | X | X | X | X |
Elasticsearch 7.12.x | ✔ | X | X | ✔ | ✔ | X | X | X | ✔ | ✔ | X | X | X | X |
Elasticsearch 7.13.x | ✔ | X | X | ✔ | ✔ | X | X | X | X | ✔ | X | X | X | X |
Elasticsearch 7.14.x | ✔ | X | X | ✔ | ✔ | X | X | X | X | ✔ | X | X | X | X |
Elasticsearch 7.15.x | ✔ | X | X | ✔ | ✔ | X | X | X | X | ✔ | ✔ | X | X | X |
Elasticsearch 7.16.x | ✔ | X | X | ✔ | ✔ | X | X | X | X | X | ✔ | X | X | X |
Elasticsearch 7.17.x | ✔ | X | X | ✔ | ✔ | X | X | X | X | X | ✔ | ✔ | ✔ | X |
Elasticsearch 8.0.x | X | X | X | X | X | X | X | X | X | X | ✔ | X | X | X |
Elasticsearch 8.1.x | X | X | X | X | X | X | X | X | X | X | ✔ | ✔ | X | X |
Elasticsearch 8.2.x | X | X | X | X | X | X | X | X | X | X | ✔ | ✔ | X | X |
Elasticsearch 8.3.x | X | X | X | X | X | X | X | X | X | X | ✔ | ✔ | X | X |
Elasticsearch 8.4.x | X | X | X | X | X | X | X | X | X | X | ✔ | ✔ | X | X |
Elasticsearch 8.5.x | X | X | X | X | X | X | X | X | X | X | ✔ | ✔ | ✔ | X |
Java 9、Java 10、Java 12 和 Java 13 均为短期版本。不建议使用。有关 JVM 支持,参考 Oracle 的时间表,网址为:http://www.oracle.com/technetwork/java/eol-135779.html
Elastic 支持部分 OpenJDK 派生的分发版:
结论:
JDK兼容性:https://www.elastic.co/cn/support/matrix#matrix_jvm
操作系统兼容性:https://www.elastic.co/cn/support/matrix
自身兼容性:https://www.elastic.co/cn/support/matrix#matrix_compatibility
此处略过安装过程,如果无安装jdk基础,可自行百度
另外,从7.x开始,以后的版本ES均自带jdk,所以可即使不安装jdk也可正常运行ES。
安装教程:Win、Mac 双系统 Elasticsearch离线文档(支持选择版本)安装部署教程
Zeal(文档查看工具):
Elastic开源社区星球下载链接:
Zeal官网下载链接(速度较慢):https://zealdocs.org/
8.3 版本文档集:
目录名称 | 描述 |
---|---|
bin | 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等。 |
config | 配置文件目录,如elasticsearch配置、角色配置、jvm配置等。 |
lib | elasticsearch所依赖的java库。 |
data | 默认的数据存放目录,包含节点、分片、索引、文档的所有数据,生产环境要求必须修改。 |
logs | 默认的日志文件存储路径,生产环境务必修改。 |
modules | 包含所有的Elasticsearch模块,如Cluster、Discovery、Indices等。 |
plugins | 已经安装的插件的目录。 |
jdk/jdk.app | 7.x 以后特有,自带的 java 环境,8.x版本自带 jdk 17 |
discovery.type=single-node
。此项配置为指定节点为单节点发现以绕过引导检查。注意
ES 8 默认启动Security
,这对新手学习很不友好,实际上违背了Elastic官方设置开发模式的初衷,安全固然重要,但是没必要把门槛设置这么高,建议官方在后续更新中,把Security
在开发模式中默认关闭,在生产模式下,默认开启。这样更加合理。
本章内容基于默认开启Security
进行单机和集群环境部署,在基础学习过程中,本不应该把经历花费在集群安全这件事情上,固然它很重要,但它本身属于运维范畴,而且对于初学者来说学习难度较大,有些本末倒置。对于刚接触ES的同学来说,更重要的应该是学习如何去快速上手和使用ES,让其为自身和公司带来价值。在基础篇中,本课程将不涉及深层次原理和ES运维知识。与ES集群相关的配置,将限于基本配置和原理范围。建议学习者根据自己的的情况选择是否学习本章(服务安装和启动)以及下一章(基于Security构建本地集群)的内容。
本课程将在高手篇:底层原理与源码
中讲解ES的分布式原理、高可用性原理等进阶知识,将在运维篇:ES运维及安全
详细讲解ES集群的高级用法及详细的集群安全配置教程,基于上述原因,建议初学者跳过第7节内容**。**
ES不允许使用root
账号启动服务,如果你当前账号是root
,则需要创建一个专有账户(以下命令均在root账户下执行,windows系统在power shell下执行)。如果你的账号不是root
账号,此步骤可以跳过
useradd elastic
passwd elastic
chown -R elastic:elastic {{espath}}
Windows | MacOS | Linux | |
---|---|---|---|
命令行 | # cd elasticsearch\bin # .\elasticsearch -d | # cd elasticsearch/bin # ./elasticsearch -d | # cd elasticsearch/bin # ./elasticsearch -d |
图形界面 | 在bin目录下双击elasticsearch.bat | 在bin目录下双击elasticsearch | — |
Shell | start \bin\elasticsearch.bat | open bin/elasticsearch | — |
ES在 7.x 版本时,控制台输出 started 时代表服务启动成功,和 7.x 版本不同,
ES 8.x 启动之后会输出以下信息,此时服务已经启动成功了。
首次启动 Elasticsearch 时,会自动进行以下安全配置:
红框1:ES为我们生成的elastic
账户的默认密码,重要,需要复制记下来
红框2:CA证书的密钥信息,暂时先不管
红框3:ES为Kibana生成的访问令牌,Kibana访问ES服务需要用到。(有效期为 30 分钟)
红框4:ES位其他节点加入集群生成的访问令牌,当前集群中需要加入新节点时,需要携带此令牌(有效期为 30 分钟)
然后您可以启动 Kibana 并输入有效期为 30 分钟的注册令牌。此令牌自动应用 Elasticsearch 集群中的安全设置,使用内置kibana服务帐户向 Elasticsearch 进行身份验证,并将安全配置写入kibana.yml
在 ES 8.x版本以后,elasticsearch-setup-passwords设置密码的工具已经被弃用删除,此命令为7.x之前第一次生成密码时使用,8.x在第一次启动的时候会自动生密码。
注意:上述(2.5.3截图)内容仅在第一次启动时显示,如果需要修改账户密码,需进行以下操作
bin/elasticsearch-reset-password[-a, --auto] [-b, --batch] [-E
使用此命令重置本地领域中的任何用户或任何内置用户的密码。默认情况下,系统会为您生成一个强密码。要显式设置密码,请使用 以交互模式运行该工具-i。该命令在 文件领域中生成(并随后删除)一个临时用户,以运行更改用户密码的请求。
-a, --auto
将指定用户的密码重置为自动生成的强密码。(默认)
-b, --batch
运行重置密码过程而不提示用户进行验证。
-E
配置标准 Elasticsearch 或 X-Pack 设置。
-f, --force
强制命令针对不健康的集群运行。
-h, --help
返回所有命令参数。
-i, --interactive
提示输入指定用户的密码。使用此选项显式设置密码。
-s --silent
在控制台中显示最小输出。
-u, --username
本机领域用户或内置用户的用户名。
–url
指定工具用于向 Elasticsearch 提交 API 请求的基本 URL(本地节点的主机名和端口)。默认值由 elasticsearch.yml文件中的设置确定。如果xpack.security.http.ssl.enabled设置为true,则必须指定 HTTPS URL。
-v --verbose
在控制台中显示详细输出。
比如:
为elastic
账号自动生成新密码,输出至控制台
bin/elasticsearch-reset-password -u elastic
手工指定user1
的新密码
bin/elasticsearch-reset-password --username elastic -i
指定服务地址和账户名
bin/elasticsearch-reset-password --url "https://172.0.0.3:9200" --username elastic -i
访问服务
在7.x的版本是通过如下地址访问ES服务:http://localhost:9200/
但是在 8.x 的版本访问会看到如下页面:
原因解释
这是正常现象,因为 Elastic 8 默认开启了 SSL,将默认配置项由true
改为false
即可
推荐做法
关闭SSL虽然可以访问服务了,但这本质上是在规避问题而非解决问题,更推荐的做法是使用https
协议进行访问:
https://localhost:9200/
,此时如果你的浏览器版本是比较新的版本会出现以下弹窗提示,即:
解决办法:
在chrome该页面上,直接键盘敲入thisisunsafe
这11个字符(鼠标点击当前页面任意位置,让页面处于最上层即可输入,输入时是没有任何提示也不显示任何字符的,直接输入即可按回车即可),然后你会看到如下提示。
输入账号密码验证:
此时输入账号,也就是在 2.5.4 的启动日志中,红框一内的内容,确定即可访问ES服务,至此,单节点ES服务启动成功。
向集群中加入新节点
默认情况下,要集群中添加新节点,需要通过令牌来完成节点之间的通信,在第一个节点启动的时候,控制台会输出令牌信息(2.5.3 启动日志中的红框4中的Token),注意启动的时候
bin/elasticsearch --enrollment-token //启动的时候替换,不要待带括号 比如:
bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjEuMCIsImFkciI6WyIxOTIuMTY4LjMuMTAwOjkyMDEiXSwiZmdyIjoiMWJkMTE0OWMzMTJjYzc5MGU1ZWU1YTgzZjlhZWRjMmU2MDkyN2Y2MWVkZDA0ZWU0YTAxZTk2MTVlYzJkODhlYiIsImtleSI6Ilo3elc0bjhCVk1ESEdsMmFzdDVNOkZTWVhrMHV3UjgyUzNlTFFERFlkdncifQ==
如下图为一个基于ES 8.x 的三节点集群:
直接启动Kibana服务,控制台显示以下信息
然后我们访问控制台输出的Kibana的服务地址,在页面提示中输入 7.2.2 红框三中的访问令牌,确定即可。
本小节将讲解基于关闭Security
的前提下,构建Elasticsearch的基本环境,包括单节点环境和基于自动发现的基本集群环境。并且会收录若干集群使用的基本技巧,这对新手来说可以很大程度上提高学习效率,十分友好。
Security
前面内容已经多次阐述,ES 8 默认是开启Security
的,我们现在需要修改器配置文件使其关闭Security
。打开 Config 目录,修改 elasticsearch.yml 文件,删除文件内所有内容,配置以下信息:
xpack.security.enabled: false
此时,配置文件中仅一行代码:
ES不允许使用root
账号启动服务,如果你当前账号是root
,则需要创建一个ES的专用账户,此步骤课参考 7.1 小节操作。如果当前账户不是root
账户,此步骤忽略即可。
Windows | MacOS | Linux | |
---|---|---|---|
命令行 | # cd elasticsearch\bin # .\elasticsearch -d | # cd elasticsearch/bin # ./elasticsearch -d | # cd elasticsearch/bin # ./elasticsearch -d |
图形界面 | 在bin目录下双击elasticsearch.bat | 在bin目录下双击elasticsearch | — |
Shell | start \bin\elasticsearch.bat | open bin/elasticsearch | — |
服务正常启动,没有报信息会输出elected-as-master
,此时集群已经启动成功,访问http://127.0.0.1:9200
或者http://localhost:9200
即可,注意如果在地址栏手工输入http://
,默认可能使用https
。
看到以下界面,即代表服务启动成功。
在基础篇,不建议基于Linux、docker或K8S部署远程集群,同时在基础篇也不会涉及这些内容的讲解,如需查看基于生产环境的集群部署方案,请移步运维篇
。
那么推荐初学者基于本地多节点的方式部署,采用自动发现机制来部署集群,也就是不需要配置任何 Discover 模块的配置,也就是说任何和集群配置相关的配置项均保持注释状态,仅仅修改一下集群、节点名称即可。或者不做任何配置亦可。
操作系统 | 命令 |
---|---|
LinuxMacOS | 节点1:./elasticsearch -E path.data=data1 -E path.logs=log1 -E node.name=node1 -E cluster.name=elastic.org.cn节点2:./elasticsearch -E path.data=data2 -E path.logs=log2 -E node.name=node2 -E cluster.name=elastic.org.cn节点N:… … |
Windows | 节点1:.\elasticsearch.bat -E path.data=data1 -E path.logs=log1 -E node.name=node1 -E cluster.name=elastic.org.cn节点2:.\elasticsearch.bat -E path.data=data2 -E path.logs=log2 -E node.name=node1 -E cluster.name=elastic.org.cn节点N:… … |
操作系统 | 脚本 |
---|---|
MacOS | open /node1/bin/elasticsearch open /node2/bin/elasticsearch open /node3/bin/elasticsearch |
windows | start D:\node1\bin\elasticsearch.bat start D:\node2\bin\elasticsearch.bat start D:\node3\bin\elasticsearch.bat |
示例**:**下图中包含一个3节点集群,每个节点都是独立的SDK文件
**验证服务状态:**浏览器执行 http://localhost:9200/_cat/nodes
(注意,这里和单节点启动方式不同)
优点:配置简单,一劳永逸
缺点:占用较多磁盘空间,因为每个节点都有一套独立的SDK文件,大约几百MB。
插件名称 | 插件图标 | 功能介绍 | 下载地址 |
---|---|---|---|
Elasticsearch Head | ![]() | 方便查看集群节点数据方便管理和索引、分片支持同时连接多集群 | Chrome下载|Github下载|安装教程 |
Elasticsearch Tools | ![]() | 方便查看节点资源占用可执行查询语句 | Chrome下载 |
Elasticvue | ![]() | 功能强大对国人友好 | Chrome下载|Edge下载 |