Rocky Linux 9安装配置Elasticsearch完全指南:从零开始的详细教程

引言

Elasticsearch是一个用于实时分布式搜索和数据分析的平台。由于其用户友好性、强大功能和可扩展性,它成为了一个热门选择。

本文将指导您安装Elasticsearch 8.x,根据您的用例进行配置,保护您的安装,并开始使用Elasticsearch服务器。

先决条件

在跟随本教程之前,您将需要:

  • 一台配置了非root sudo用户的Rocky Linux 9服务器,具有2GB RAM和2个CPU。您可以通过遵循《Rocky Linux 9初始服务器设置》来实现这一点。

由于Elasticsearch的默认分配约为1GB的RAM,因此其要求相对较高。因此,在内存受限的环境中,您可能需要启用交换内存。您的Elasticsearch服务器所需的CPU、RAM和存储空间取决于您生成的记录数量。

第一步 – 安装和配置Elasticsearch

在安装Elasticsearch之前,您需要确保已经安装了一个可用的文本编辑器。Rocky Linux 9自带的默认文本编辑器是vi。vi是一个非常强大的文本编辑器,但对于缺乏使用经验的用户来说可能有些晦涩。您可能希望安装一个更友好的编辑器,如nano,以便在您的Rocky Linux 9服务器上编辑配置文件。

  1. sudo dnf install nano -y

现在可以开始安装Elasticsearch了。Elasticsearch的组件在Rocky的默认软件包仓库中不可用。它们可以从Elasticsearch项目维护的仓库中获取。

为了保护您的系统免受软件包伪装的威胁,所有的软件包均使用Elasticsearch签名密钥进行签名。使用该密钥进行身份验证的软件包将被您的软件包管理器视为可信任的。在此步骤中,您将导入Elasticsearch的公共GPG密钥,并添加弹性软件包源列表以安装Elasticsearch。

首先,使用rpm软件包工具从elastic.co导入密钥。

  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下来,使用nano或您喜欢的文本编辑器,在/etc/yum.repos.d/目录中创建一个名为elasticsearch.repo的文件,以便您的软件包管理器可以连接到Elasticsearch仓库。

  1. sudo nano /etc/yum.repos.d/elasticsearch.repo
/etc/yum.repos.d/elasticsearch.repo的中文释义可以是:弹性搜索的代码仓库
[elasticsearch]
name=Elasticsearch 8.x软件包的仓库
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

文件中的 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 部分指示您的软件包管理器使用您下载的密钥来验证 Elasticsearch 软件包的存储库和文件信息。

保存并关闭文件。如果您使用nano,您可以通过按下Ctrl+X,然后在提示时按下Y,最后按下Enter来保存并退出。

最后,使用dnf包管理器安装Elasticsearch。

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch

当提示安装时,请按下 y 键以确认安装。

Elasticsearch安装输出的部分内容应包括安全自动配置信息,最重要的是自动生成的Elasticsearch管理员密码。

输出--------------------------- 安全自动配置信息 ------------------------------ 身份验证和授权已启用。 传输层和HTTP层的TLS已启用并配置。 为elastic内置超级用户生成的密码是:CH77_qG8ji8QCxwUCr3w

在本教程中请记下此密码,稍后将需要用它来创建其他Elasticsearch用户,也需要用它来配置已安装完毕的Elasticsearch。

第二步——配置Elasticsearch

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

打开Elasticsearch的配置文件,使用nano或您最喜欢的文本编辑器。

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

注意:

提示:Elasticsearch的配置文件采用YAML格式,这意味着您需要保持缩进语法。在编辑该文件时,请确保不要添加额外的空格。

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

Elasticsearch在9200端口监听来自任何地方的流量。这在Elasticsearch 8.x版本中不再是一个问题,因为Elasticsearch现在默认需要身份验证。然而,您很可能需要限制外部访问到您的Elasticsearch实例,以防止外部人员通过其REST API读取您的数据或关闭您的Elasticsearch集群。为了限制访问,找到指定network.host的行,通过删除行首的#号来取消注释,并将其值替换为localhost,使其类似于以下内容:

/etc/elasticsearch/elasticsearch.yml 的本地化中文翻译如下:
/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- 网络 -----------------------------------
#
# 将绑定地址设置为特定IP(IPv4或IPv6):
#
network.host: localhost
. . .

指定localhost允许Elasticsearch监听所有接口和绑定的IP。如果您想要它只监听特定的接口,可以在localhost的位置指定其IP。保存并关闭elasticsearch.yml。如果您正在使用nano,可以使用Ctrl+X保存并退出,然后按提示,输入Y,然后按Enter。

以下是使用Elasticsearch时可以开始的最低配置。现在,您可以首次启动Elasticsearch。

使用systemctl启动Elasticsearch服务。稍等片刻让Elasticsearch启动完毕,否则可能会出现无法连接的错误。

  1. sudo systemctl start elasticsearch

接下来,运行以下命令使Elasticsearch能够在服务器启动时自动启动:

  1. sudo systemctl enable elasticsearch

启动Elasticsearch后,让我们继续下一步来讨论安全性。

第三步 – 保护 Elasticsearch

可以通过访问HTTP API来控制Elasticsearch。这并不一定是一个安全风险,因为您已经配置Elasticsearch仅监听本地,并且Elasticsearch 8+默认设置了管理员密码。

如果您需要允许对HTTP API的远程访问,您可以使用firewalld来限制网络暴露。如果您按照先决条件Rocky Linux 9教程中的步骤设置了初始服务器设置,则该防火墙应该已经启用。Elasticsearch运行在端口9200上,因此如果您需要选择外部访问,您可以创建一个防火墙配置文件来打开或限制端口9200。

如果你想要投资于额外的保护措施,Elasticsearch提供了商业版的Shield插件供购买。

第四步——测试Elasticsearch

到目前为止,Elasticsearch应该在9200端口上运行。你可以使用curl向localhost:9200发送标准的HTTP GET请求来测试它。从Elasticsearch 8.x开始,默认情况下,Elasticsearch API要求进行HTTPS身份验证,因此你可以通过使用–cacert参数来包含提供的证书在请求中。最后,使用-u elastic参数来指定默认管理员用户名elastic。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

安装后会提示您输入您收到的管理员密码。身份验证后,您应该收到以下响应:

输出{ "name" : "elasticrocky", "cluster_name" : "elasticsearch", "cluster_uuid" : "_hb4dLuuR-ipiloXHT_AMw", "version" : { "number" : "8.5.3", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e", "build_date" : "2022-12-05T18:22:22.226119656Z", "build_snapshot" : false, "lucene_version" : "9.4.2", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

如果您收到类似于上述的响应,那么Elasticsearch正在正常工作。如果没有收到这样的响应,请确保您已正确按照安装说明操作,并给Elasticsearch足够的时间来完全启动。

为了对Elasticsearch进行更全面的检查,请尝试查询_nodes端点,并在查询的末尾添加?pretty以获取易于阅读的文本格式化结果。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_nodes?pretty
[次要标签 输出]
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "7TgeSgV2Tma0quqd6Mw6hQ" : {
…

通过这种方式,你可以验证节点、集群、应用程序路径、模块等的所有当前设置。

第五步 — 使用Elasticsearch

为了开始使用Elasticsearch,让我们首先添加一些数据。Elasticsearch使用RESTful API,它响应常见的CRUD命令:创建、读取、更新和删除。要向API发送数据,您将再次使用curl,但这次您将使用PUT请求而不是GET请求,通过在命令行中使用-X PUT和-d包含一些JSON格式的数据。

你可以这样添加你的第一条记录。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["red"]}'

你应该收到以下回复:

输出{ "_index" : "test", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

使用cURL,您向Elasticsearch服务器发送了一个HTTP PUT请求。请求的URI是/test/_doc/1,并带有多个参数。

  • test是Elasticsearch中数据的索引。
  • _doc是类型。
  • 1是上述索引和类型下条目的ID。

你可以通过 HTTP GET 请求来检索这个第一个条目。

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X GET "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json'

这应该是最终的输出结果。

输出{ "_index" : "test", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "counter" : 1, "tags" : [ "red" ] } }

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

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["blue"]}'

Elasticsearch 在成功修改之后应该得到确认。

{ "_index" : "test", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

在上面的例子中,我们将第一条记录的消息修改为”你好,大家!”。通过这样做,版本号已自动增加到2。

你可能已经注意到了以上请求中的额外参数pretty。它可以添加格式化格式,使得你可以将每个数据字段写在新的一行上。没有pretty参数,Elasticsearch的输出将没有换行或缩进。这对于API(应用程序接口)通信来说没问题,但在命令行输出中很难阅读。

你现在已经在Elasticsearch中添加并查询了数据。要了解其他操作,请查阅API文档。

结论

你现在已经安装、配置并开始使用Elasticsearch。为了进一步探索Elasticsearch的功能,请参考官方的Elasticsearch文档。

bannerAds