如何在Ubuntu22.04上安装和配置Elasticsearch
本文的先前版本由 托里.
介绍
Elasticsearch 是一个实时分布式搜索和分析数据的平台。 由于其可用性、强大的功能和可扩展性,它是一个受欢迎的选择。
本文将指导您安装 Elasticsearch、为您的用例配置它、保护您的安装,并开始使用您的 Elasticsearch 服务器。
先决条件
在学习本教程之前,您需要:
- 具有 2GB RAM 和 2 个 CPU 的 Ubuntu 22.04 服务器,由非 root sudo 用户设置。 您可以按照 Initial Server Setup with Ubuntu 22.04 来实现这一点
在本教程中,我们将使用运行 Elasticsearch 所需的最少 CPU 和 RAM。 请注意,您的 Elasticsearch 服务器所需的 CPU、RAM 和存储量取决于您期望的日志量。
如果您希望在浏览器中使用终端来学习本教程,请单击 Launch an Interactive Terminal! 按钮开始使用。 您将能够直接在浏览器中试验和运行所有命令。
启动交互式终端!
第 1 步 — 安装和配置 Elasticsearch
Elasticsearch 组件在 Ubuntu 的默认软件包存储库中不可用。 但是,它们可以在添加 Elastic 的包源列表后与 APT 一起安装。
所有软件包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受软件包欺骗。 已使用密钥进行身份验证的包将被您的包管理器视为信任。 在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Elasticsearch。
首先,使用 cURL(用于通过 URL 传输数据的命令行工具)将 Elasticsearch 公钥 GPG 密钥导入 APT。 请注意,我们使用参数 -fsSL 来消除所有进度和可能的错误(服务器故障除外),并允许 cURL 在重定向时在新位置发出请求。 将输出传送到 gpg --dearmor
命令,该命令将密钥转换为 apt 可用于验证下载包的格式。
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
接下来,将 Elastic 源列表添加到 sources.list.d
目录,其中 apt
将搜索新的源:
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
文件的 [signed-by=/usr/share/keyrings/elastic.gpg]
部分指示 apt 使用您下载的密钥来验证 Elasticsearch 包的存储库和文件信息。
接下来,更新您的软件包列表,以便 APT 读取新的 Elastic 源:
sudo apt update
然后使用以下命令安装 Elasticsearch:
sudo apt install elasticsearch
提示确认安装时按Y
。 如果系统提示您重新启动任何服务,请按 ENTER
接受默认设置并继续。 Elasticsearch 现在已安装并准备好进行配置。
第 2 步 — 配置 Elasticsearch
要配置 Elasticsearch,我们将编辑它的主配置文件 elasticsearch.yml
,其中存储了它的大部分配置选项。 该文件位于 /etc/elasticsearch
目录中。
使用您喜欢的文本编辑器来编辑 Elasticsearch 的配置文件。 在这里,我们将使用 nano
:
sudo nano /etc/elasticsearch/elasticsearch.yml
注意: Elasticsearch的配置文件是YAML格式,也就是说我们需要维护缩进格式。 确保在编辑此文件时不要添加任何额外的空格。
elasticsearch.yml
文件为您的集群、节点、路径、内存、网络、发现和网关提供配置选项。 大多数这些选项都在文件中预先配置,但您可以根据需要更改它们。 为了演示单服务器配置,我们将仅调整网络主机的设置。
Elasticsearch 在端口 9200
上侦听来自各处的流量。 您需要限制对 Elasticsearch 实例的外部访问,以防止外部人员通过其 [REST API] 读取您的数据或关闭您的 Elasticsearch 集群(https://en.wikipedia.org/wiki/Representational_state_transfer )。 要限制访问并因此提高安全性,请找到指定 network.host
的行,取消注释,然后将其值替换为 localhost
,如下所示:
/etc/elasticsearch/elasticsearch.yml
. . . # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: localhost . . .
我们指定了 localhost
以便 Elasticsearch 监听所有接口和绑定 IP。 如果您希望它仅在特定接口上侦听,则可以指定其 IP 代替 localhost
。 保存并关闭 elasticsearch.yml
。 如果您使用的是 nano
,您可以按 CTRL+X
,然后按 Y
,然后按 ENTER
。
这些是您可以开始使用 Elasticsearch 的最低设置。 现在您可以第一次启动 Elasticsearch。
使用 systemctl
启动 Elasticsearch 服务。 给 Elasticsearch 一点启动时间。 否则,您可能会收到有关无法连接的错误。
sudo systemctl start elasticsearch
接下来,运行以下命令以使 Elasticsearch 在每次服务器启动时启动:
sudo systemctl enable elasticsearch
在启动时启用 Elasticsearch,让我们继续下一步讨论安全性。
第 3 步 — 保护 Elasticsearch
默认情况下,任何可以访问 HTTP API 的人都可以控制 Elasticsearch。 这并不总是存在安全风险,因为 Elasticsearch 只监听环回接口(即 127.0.0.1
),只能在本地访问。 因此,不可能进行公共访问,只要所有服务器用户都受信任,安全性就不是主要问题。
如果您需要允许远程访问 HTTP API,您可以使用 Ubuntu 的默认防火墙 UFW 限制网络暴露。 如果您按照先决条件 Initial Server Setup with Ubuntu 22.04 教程中的步骤操作,则应该已经启用此防火墙。
我们现在将配置防火墙以允许访问受信任远程主机的默认 Elasticsearch HTTP API 端口 (TCP 9200),通常是您在单服务器设置中使用的服务器,例如 198.51.100.0
。 要允许访问,请键入以下命令:
sudo ufw allow from 198.51.100.0 to any port 9200
完成后,您可以使用以下命令启用 UFW:
sudo ufw enable
最后,使用以下命令检查 UFW 的状态:
sudo ufw status
如果您正确指定了规则,您应该会收到如下输出:
OutputStatus: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)
现在应该启用并设置 UFW 以保护 Elasticsearch 端口 9200。
如果您想投资额外的保护,Elasticsearch 提供商业 Shield 插件 供购买。
第 4 步 — 测试 Elasticsearch
现在,Elasticsearch 应该在 9200 端口上运行。 您可以使用 cURL 和 GET 请求对其进行测试。
curl -X GET 'http://localhost:9200'
您应该收到以下响应:
Output{ "name" : "elastic-22", "cluster_name" : "elasticsearch", "cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
如果您收到与上述类似的响应,则说明 Elasticsearch 工作正常。 如果没有,请确保您已正确遵循安装说明,并且您已留出一些时间让 Elasticsearch 完全启动。
要对 Elasticsearch 执行更彻底的检查,请执行以下命令:
curl -XGET 'http://localhost:9200/_nodes?pretty'
在上述命令的输出中,您可以验证节点、集群、应用程序路径、模块等的所有当前设置。
第 5 步 — 使用 Elasticsearch
要开始使用 Elasticsearch,我们首先添加一些数据。 Elasticsearch 使用 RESTful API,它响应常见的 CRUD 命令:create、read、update 和 delete . 为了使用它,我们将再次使用 cURL 命令。
您可以像这样添加您的第一个条目:
curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该收到以下响应:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
使用 cURL,我们向 Elasticsearch 服务器发送了一个 HTTP POST 请求。 请求的 URI 是 /tutorial/helloworld/1
,带有几个参数:
tutorial
是 Elasticsearch 中数据的索引。helloworld
是类型。1
是我们在上述索引和类型下的条目的ID。
您可以使用 HTTP GET 请求检索第一个条目。
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1'
这应该是结果输出:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
要修改现有条目,您可以使用 HTTP PUT 请求。
curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d ' { "message": "Hello, People!" }'
Elasticsearch 应该像这样确认成功的修改:
Output{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
在上面的示例中,我们将第一个条目的 message
修改为“Hello, People!”。 至此,版本号自动增加到2
。
您可能已经注意到上述请求中的额外参数 pretty
。 它启用了人类可读的格式,以便您可以将每个数据字段写入新行。 您还可以通过输入以下命令在检索数据时“美化”您的结果以获得更易读的输出:
curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'
现在响应将被格式化以供人类解析:
Output{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }
我们现在已经在 Elasticsearch 中添加和查询了数据。 要了解其他操作,请查看 API 文档。
结论
您现在已经安装、配置并开始使用 Elasticsearch。 进一步探索Elasticsearch的功能,请参考官方Elasticsearch文档。