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

这篇文章的早期版本是由_ Toli撰写的。

介绍

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 在重定向时在新位置提出请求。

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

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

1echo "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 源:

1sudo apt update

然后用这个命令安装 Elasticsearch:

1sudo apt install elasticsearch

Elasticsearch 已安装并准备好配置。

步骤 2 – 配置 Elasticsearch

要配置 Elasticsearch,我们将编辑其主要配置文件 elasticsearch.yml,其中存储了其配置选项的大部分。

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

1sudo nano /etc/elasticsearch/elasticsearch.yml

<$>[注] 注: Elasticsearch 的配置文件是 YAML 格式,这意味着我们需要保持入口格式。

elasticsearch.yml文件为您的集群、节点、路径、内存、网络、发现和网关提供了配置选项. 这些选项大多都已预先配置在文件中,但您可以根据需要进行更改。

Elasticsearch 在端口9200上听取来自任何地方的流量。您将想要限制对您的 Elasticsearch 实例的外部访问,以防止外部人员阅读您的数据或通过其 [REST API] 关闭您的 Elasticsearch 集群(https://en.wikipedia.org/wiki/Representational_state_transfer)。

1[label /etc/elasticsearch/elasticsearch.yml]
2. . .
3# ---------------------------------- Network -----------------------------------
4#
5# Set the bind address to a specific IP (IPv4 or IPv6):
6#
7network.host: localhost
8. . .

我们已经指定了localhost,以便Elasticsearch在所有界面和绑定IP上倾听。如果您希望它只在特定界面上倾听,您可以指定其IP代替localhost。保存并关闭elasticsearch.yml

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

使用systemctl启动 Elasticsearch 服务. 给 Elasticsearch 几分钟启动,否则可能会出现无法连接的错误。

1sudo systemctl start elasticsearch

接下来,运行以下命令,以允许 Elasticsearch 每次启动服务器时启动:

1sudo systemctl enable elasticsearch

随着Elasticsearch在启动时启用,让我们继续讨论安全的下一步。

步骤 3 – 确保 Elasticsearch

默认情况下,Elasticsearch 可以由任何可以访问 HTTP API 的用户控制,这并不总是是一种安全风险,因为Elasticsearch 仅在环绕接口(即127.0.0.1)上倾听,而这些接口只能在本地访问。

如果您需要允许远程访问 HTTP API,您可以使用 Ubuntu 的默认防火墙 UFW 限制网络曝光,如果您遵循 Ubuntu 20.04 初始服务器设置 教程中的步骤,此防火墙应该已经启用。

现在我们将配置防火墙以允许访问可信远程主机的默认 Elasticsearch HTTP API 端口(TCP 9200),通常是您在单一服务器设置中使用的服务器,例如198.51.100.0

1sudo ufw allow from 198.51.100.0 to any port 9200

一旦完成,您可以使用以下命令启用 UFW:

1sudo ufw enable

最后,用以下命令检查 UFW 的状态:

1sudo ufw status

如果您正确指定了规则,您应该收到这样的输出:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
69200 ALLOW 198.51.100.0
722 ALLOW Anywhere
822 (v6)                    ALLOW Anywhere (v6)

UFW 现在应该启用并设置以保护 Elasticsearch 端口 9200。

如果您想投资额外的保护,Elasticsearch 可购买商用 Shield 插件

步骤 4 – 测试 Elasticsearch

到目前为止,Elasticsearch应该在端口9200上运行,您可以使用cURL和GET请求来测试它。

1curl -X GET 'http://localhost:9200'

你应该得到以下答案:

 1[secondary_label Output]
 2{
 3  "name" : "elasticsearch-ubuntu20-04",
 4  "cluster_name" : "elasticsearch",
 5  "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
 6  "version" : {
 7    "number" : "7.6.2",
 8    "build_flavor" : "default",
 9    "build_type" : "deb",
10    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
11    "build_date" : "2020-03-26T06:34:37.794943Z",
12    "build_snapshot" : false,
13    "lucene_version" : "8.4.0",
14    "minimum_wire_compatibility_version" : "6.8.0",
15    "minimum_index_compatibility_version" : "6.0.0-beta1"
16  },
17  "tagline" : "You Know, for Search"
18}

如果您收到类似上述的响应,则 Elasticsearch 正在正常工作. 如果没有,请确保您遵循正确的安装说明,并允许 Elasticsearch 完全启动一段时间。

要对 Elasticsearch 进行更彻底的检查,请执行以下命令:

1curl -XGET 'http://localhost:9200/_nodes?pretty'

在上面的命令的输出中,您可以验证节点,集群,应用路径,模块等的所有当前设置。

第5步:使用Elasticsearch

要开始使用 Elasticsearch,让我们先添加一些数据。Elasticsearch 使用 RESTful API,该 API 响应常见的 CRUD 命令: create, read, update,和 delete。

你可以这样添加你的第一个入口:

1curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' '{ "message": "Hello World!" }'

你应该得到以下答案:

1[secondary_label Output]
2{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

使用cURL,我们将 HTTP POST 请求发送到 Elasticsearch 服务器,请求的 URI 是 /tutorial/helloworld/1,有几个参数:

  • tutorial 是 Elasticsearch 中的数据索引
  • helloworld 是类型
  • 1 是我们在上面的索引和类型下输入的 ID

您可以通过 HTTP GET 请求获取此第一个条目。

1curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' '{ "message": "Hello World!" }'

这应该是产生的结果:

1[secondary_label Output]
2{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

若要修改现有条目,您可以使用 HTTP PUT 请求。

1curl -X PUT -H "Content-Type: application/json"  'localhost:9200/tutorial/helloworld/1?pretty' '
2{
3  "message": "Hello, People!"
4}'

Elasticsearch 应该承认这样的成功修改:

 1[secondary_label Output]
 2{
 3  "_index" : "tutorial",
 4  "_type" : "helloworld",
 5  "_id" : "1",
 6  "_version" : 2,
 7  "result" : "updated",
 8  "_shards" : {
 9    "total" : 2,
10    "successful" : 1,
11    "failed" : 0
12  },
13  "_seq_no" : 1,
14  "_primary_term" : 1
15}

在上面的示例中,我们将第一个条目的消息更改为你好,人们!这样,版本号被自动增加到2

您可能在上述请求中注意到额外的参数 pretty. 它允许人类可读的格式,以便您可以将每个数据字段写在一个新的行上. 您还可以通过输入以下命令在获取数据时假设您的结果,以获得更可读的输出:

1curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

现在,答案将被格式化,以便人类分析:

 1[secondary_label Output]
 2{
 3  "_index" : "tutorial",
 4  "_type" : "helloworld",
 5  "_id" : "1",
 6  "_version" : 2,
 7  "_seq_no" : 1,
 8  "_primary_term" : 1,
 9  "found" : true,
10  "_source" : {
11    "message" : "Hello, People!"
12  }
13}
14
15}

现在我们已在 Elasticsearch 中添加和查询数据. 若要了解其他操作,请查看 API 文档

结论

您已安装、配置并开始使用 Elasticsearch. 若要进一步探索 Elasticsearch 的功能,请参阅官方 Elasticsearch 文档

Published At
Categories with 技术
comments powered by Disqus