文章目录
1、开发环境操作系统
1.1 选择 Windows、Mac or Linux
首先明确一点:我们的首要目的是要快速上手使用 Elasticsearch(以下简称 ES),安装和部署 ES 并非重点,企业中真正需要你去安装的可能性或者机会非常小。大家可以想一想,对于刚入职的你来说,公司内部一般来说都已经有了一套完整的技术架构,让你亲自动手搭建除非是公司架构重构或者你作为公司技术团队的核心或者运维。
所以关于 ES 的安装,我们在基础篇不多做介绍,如果的确有需要,我会在进阶篇和运维篇,分别讲解基于 CentOS、K8S 搭建 ES 集群、部署 ELK 等从零到一完整详细讲解。建议大家跟随课程大纲学习,效率更高。
结论:建议选择 Windows 或者 MacOS,不推荐 Linux 图形化界面学习(极客除外)。当然这并非绝对,如果你钟爱 Linux 图形化界面,并非不可以。但须知道,服务器上使用 Linux 非图形界面,基于 Linux 的开发和生产环境的部署方式大相径庭,在开发环境中学习到的 Linux 安装部署完全不适用于生产环境(生产环境的安装部署在运维篇讲解)。
1.2 选择虚拟机还是本地安装
基础篇内容关于 ES 安装部署限于 Elasticsearch 的自动发现和基本配置,集群配置相关内容在进阶篇 - Elastic 分布式原理中讲解,因此为了更高效的学习,建议基于 OS 本地多节点的部署方式部署集群,或者单节点模式启动均可。
2、学习 ES 8 Java 版本如何选择
2.1 ES 与 JDK 兼容性
以下位 Elasticsearch 各个版本和不同 Java 版本的兼容性列表
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 |
结论:
- ES 7.x 及之前版本,选择 Java 8
- Java 9、Java 10、Java 12 和 Java 13 均为短期版本,不推荐使用
- 对于
ES 8.x
,支持 Java 17 和 Java 18,推荐版本:- 对于
ES 8.0
:Java 版本仅支持 Java 17,别无选择 - 对于
ES 8.1及以上版本
:支持 Java 17 以及 Java 18,建议 Java 17,因为对应版本的 Logstash 不支持 Java 18。
- 对于
- M1(Arm) 系列 Mac 用户建议选择 ES 7.8.x 以上版本,因为考虑到 ELK 不同产品自身兼容性,7.8.x 以上版本原生支持 Arm 原生 JDK
2.2 Java 下载
● 各大版本 jdk 国内镜像:https://www.injdk.cn/
● ARM JDK:https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk
● 程序员大礼包:https://www.programmer-box.com/?ref=jdk_1.8
2.3 不同系统下 Java 环境的安装
此处略过安装过程,如果无安装 jdk 基础,可自行百度
另外,从 7.x 开始,以后的版本 ES 均自带 jdk,所以可即使不安装 jdk 也可正常运行 ES。
3、下载和安装 ES
3.1 SDK 下载地址
- 官方下载: https://www.elastic.co/cn/downloads/past-releases#elasticsearch
- 开源社区下载站:http://www.elastic.org.cn/download
3.2 Elasticsearch 目录结构
4、单节点模式下启动 ES 服务
4.1 创建账号并赋予权限
ES 不允许使用 root 账号启动服务,如果你当前账号是 root,则需要创建一个专有账户(以下命令均在 root 账户下执行,windows 系统在 power shell 下执行)。如果你的账号不是 root 账号,此步骤可以跳过
4.1.1 创建 elastic 账号
useradd elastic
4.1.2 设置 elastic 账号的密码:
passwd elastic
4.1.3 为账号赋予目录权限
chown -R elastic:elastic {{espath}}
4.2 启动命令
4.3 启动日志
ES 在 7.x 版本时,控制台输出 started 时代表服务启动成功,和 7.x 版本不同,
ES 8.x 启动之后会输出以下信息,此时服务已经启动成功了。
首次启动 Elasticsearch 时,会自动进行以下安全配置:
- 为传输层和 HTTP 层生成 TLS 证书和密钥。
- TLS 配置设置被写入 elasticsearch.yml
- 为 elastic 用户生成密码。
- 为 Kibana 生成一个注册令牌。
红框 1:ES 为我们生成的 elastic 账户的默认密码,重要,需要复制记下来
红框 2:CA 证书的密钥信息,暂时先不管
红框 3:ES 为 Kibana 生成的访问令牌,Kibana 访问 ES 服务需要用到。(有效期为 30 分钟)
红框 4:ES 位其他节点加入集群生成的访问令牌,当前集群中需要加入新节点时,需要携带此令牌(有效期为 30 分钟)
然后您可以启动 Kibana 并输入有效期为 30 分钟的注册令牌。此令牌自动应用 Elasticsearch 集群中的安全设置,使用内置 kibana 服务帐户向 Elasticsearch 进行身份验证,并将安全配置写入 kibana.yml
4.4 修改默认密码
在 ES 8.x 版本以后,elasticsearch-setup-passwords 设置密码的工具已经被弃用删除,此命令为 7.x 之前第一次生成密码时使用,8.x 在第一次启动的时候会自动生密码。
注意:上述(4.3 截图)内容仅在第一次启动时显示,如果需要修改账户密码,需进行以下操作
bin/elasticsearch-reset-password
[-a, --auto] [-b, --batch] [-E <KeyValuePair]
[-f, --force] [-h, --help] [-i, --interactive]
[-s, --silent] [-u, --username] [--url] [-v, --verbose]
使用此命令重置本地领域中的任何用户或任何内置用户的密码。默认情况下,系统会为您生成一个强密码。要显式设置密码,请使用 以交互模式运行该工具 - i。该命令在 文件领域中生成(并随后删除)一个临时用户,以运行更改用户密码的请求。
-a, --auto
将指定用户的密码重置为自动生成的强密码。(默认)
-b, --batch
运行重置密码过程而不提示用户进行验证。
-E <KeyValuePair>
配置标准 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
手工指定elastic
的新密码
bin/elasticsearch-reset-password --username elastic -i
指定服务地址和账户名
bin/elasticsearch-reset-password --url "https://172.0.0.3:9200" --username elastic -i
4.5 验证服务启动
4.5.1 访问服务
在 7.x 的版本是通过如下地址访问 ES 服务:http://localhost:9200/
但是在 8.x 的版本访问会看到如下页面:
4.5.2 原因解释
这是正常现象,因为 Elastic 8 默认开启了 SSL,将默认配置项由 true 改为 false 即可
4.5.3 推荐做法
关闭 SSL 虽然可以访问服务了,但这本质上是在规避问题而非解决问题,更推荐的做法是使用 https 协议进行访问:
https://localhost:9200/
,此时如果你的浏览器版本是比较新的版本会出现以下弹窗提示,即:
4.5.4 解决方案
在 chrome 该页面上,直接键盘敲入 thisisunsafe 这 11 个字符(鼠标点击当前页面任意位置,让页面处于最上层即可输入,输入时是没有任何提示也不显示任何字符的,直接输入即可按回车即可),然后你会看到如下提示:
4.5.5 输入账号密码验证
此时输入账号,也就是在 2.5.4 的启动日志中,红框一内的内容,确定即可访问 ES 服务,至此,单节点 ES 服务启动成功。
总结
ES 8 默认启动Security
,这对新手学习很不友好,实际上违背了 Elastic 官方设置开发模式
的初衷,安全固然重要,但是没必要把门槛设置这么高,建议官方在后续更新中,把Security
在开发模式
中默认关闭,在生产模式
下,默认开启。这样更加合理。
推荐阅读
- ES 8.x 集群环境搭建