如何在 Ubuntu 20.04 上安装和配置 Elasticsearch

介绍

Elasticsearch是一个实时分布式搜索和分析数据的平台。由于其可用性、强大的功能和可扩展性,它是一种流行的选择。

本文将指导您安装 Elasticsearch、为您的用例配置它、保护您的安装以及开始使用您的 Elasticsearch 服务器。

先决条件

在学习本教程之前,您需要:

在本教程中,我们将使用运行 Elasticsearch 所需的最少 CPU 和 RAM。请注意,您的 Elasticsearch 服务器所需的 CPU、RAM 和存储量取决于您期望的日志量。

步骤 1 — 安装和配置 Elasticsearch

Elasticsearch 组件在 Ubuntu 的默认包存储库中不可用。但是,它们可以在添加 Elastic 的包源列表后与 APT 一起安装。

所有包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受包欺骗。已使用密钥进行身份验证的包将被您的包管理器视为信任。在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 包源列表以安装 Elasticsearch。

首先,使用 cURL(用于通过 URL 传输数据的命令行工具)将 Elasticsearch 公共 GPG 密钥导入 APT。请注意,我们使用参数 -fsSL 来消除所有进度和可能的错误(服务器故障除外),并允许 cURL 在重定向时在新位置发出请求。将 cURL 命令的输出通过管道传送到 apt-key 程序,该程序将公共 GPG 密钥添加到 APT。

  • curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

接下来,将 Elastic 源列表添加到sources.list.d目录中,APT 将在其中搜索新源:

  • echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

接下来,更新您的软件包列表,以便 APT 读取新的 Elastic 源代码:

  • sudo apt update

然后使用以下命令安装 Elasticsearch:

  • sudo apt install elasticsearch

Elasticsearch 现在已安装并准备好进行配置。

第 2 步 – 配置 Elasticsearch

要配置 Elasticsearch,我们将编辑其主要配置文件elasticsearch.yml,其中存储了大部分配置选项。该文件位于/etc/elasticsearch目录中。

使用您喜欢的文本编辑器来编辑 Elasticsearch 的配置文件。在这里,我们将使用nano

  • sudo nano /etc/elasticsearch/elasticsearch.yml

注意: Elasticsearch 的配置文件是 YAML 格式,这意味着我们需要维护缩进格式。请确保在编辑此文件时不要添加任何额外的空格。

elasticsearch.yml文件为您的集群、节点、路径、内存、网络、发现和网关提供配置选项。大多数这些选项都在文件中预先配置,但您可以根据需要更改它们。为了演示单服务器配置,我们将只调整网络主机的设置。

Elasticsearch 侦听来自 port 上任何地方的流量9200您需要限制外部访问您的 Elasticsearch 实例,以防止外部人员通过其REST API读取您的数据或关闭您的 Elasticsearch 集群要限制访问并因此提高安全性,请找到指定 的行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,然后YENTER

这些是您可以开始使用 Elasticsearch 的最低设置。现在您可以第一次启动 Elasticsearch。

启动 Elasticsearch 服务systemctl给 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 限制网络暴露。如果您按照Ubuntu 20.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

如果您正确指定了规则,您应该会收到如下输出:

Output
Status: 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" : "elasticsearch-ubuntu20-04", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "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命令:Ç reate,– [R EAD,ù PDATE,和d elete。为了使用它,我们将再次使用 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' -d '{ "message": "Hello World!" }'

这应该是结果输出:

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 文档

觉得文章有用?

点个广告表达一下你的爱意吧 !😁