使用 Debian 包安装 Elasticsearch

编辑

Elasticsearch 的 Debian 包可以从我们的网站下载或从我们的 APT 仓库下载。它可以用来在任何基于 Debian 的系统(如 Debian 和 Ubuntu)上安装 Elasticsearch。

此包包含免费和订阅功能。 开始 30 天试用以试用所有功能。

Elasticsearch 的最新稳定版本可以在下载 Elasticsearch页面找到。其他版本可以在过去的版本页面找到。

Elasticsearch 包含来自 JDK 维护者 (GPLv2+CE) 的捆绑版本的 OpenJDK。要使用您自己的 Java 版本,请参阅JVM 版本要求

导入 Elasticsearch PGP 密钥

编辑

我们使用 Elasticsearch 签名密钥(PGP 密钥 D88E42B4,可从 https://pgp.mit.edu 获取)对我们所有的软件包进行签名,其指纹为

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公共签名密钥

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

从 APT 仓库安装

编辑

在继续之前,您可能需要在 Debian 上安装 apt-transport-https

sudo apt-get install apt-transport-https

将仓库定义保存到 /etc/apt/sources.list.d/elastic-8.x.list

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

这些说明没有使用 add-apt-repository,原因如下

  1. add-apt-repository 会将条目添加到系统 /etc/apt/sources.list 文件,而不是添加到 /etc/apt/sources.list.d 中的每个仓库的独立文件中
  2. add-apt-repository 不是许多发行版的默认安装的一部分,需要一些非默认的依赖项。
  3. 旧版本的 add-apt-repository 始终会添加一个 deb-src 条目,这会导致错误,因为我们不提供源代码包。如果您添加了 deb-src 条目,您将看到如下错误,直到您删除 deb-src

    Unable to find expected entry 'main/source/Sources' in Release file
    (Wrong sources.list entry or malformed file)

您可以使用以下命令安装 Elasticsearch Debian 包

sudo apt-get update && sudo apt-get install elasticsearch

如果同一个 Elasticsearch 仓库存在两个条目,则在 apt-get update 期间会看到如下错误

Duplicate sources.list entry https://artifacts.elastic.co/packages/8.x/apt/ ...`

检查 /etc/apt/sources.list.d/elasticsearch-8.x.list 中是否有重复的条目,或在 /etc/apt/sources.list.d//etc/apt/sources.list 文件中查找重复的条目。

在基于 systemd 的发行版上,安装脚本将尝试设置内核参数(例如,vm.max_map_count);您可以通过屏蔽 systemd-sysctl.service 单元来跳过此步骤。

手动下载并安装 Debian 包

编辑

Elasticsearch v8.17.0 的 Debian 包可以从网站下载并按如下方式安装

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-amd64.deb.sha512
shasum -a 512 -c elasticsearch-8.17.0-amd64.deb.sha512 
sudo dpkg -i elasticsearch-8.17.0-amd64.deb

比较下载的 Debian 包的 SHA 值和发布的校验和,应该输出 elasticsearch-{version}-amd64.deb: OK

启用安全性启动 Elasticsearch

编辑

安装 Elasticsearch 时,默认情况下会启用并配置安全功能。当您安装 Elasticsearch 时,会自动进行以下安全配置

  • 启用身份验证和授权,并为 elastic 内置超级用户生成密码。
  • 为传输层和 HTTP 层生成 TLS 证书和密钥,并使用这些密钥和证书启用和配置 TLS。

密码以及证书和密钥将输出到您的终端。您可以使用 elasticsearch-reset-password 命令重置 elastic 用户的密码。

我们建议将 elastic 密码存储为 shell 中的环境变量。例如

export ELASTIC_PASSWORD="your_password"

重新配置节点以加入现有集群

编辑

当您安装 Elasticsearch 时,安装过程默认配置一个单节点集群。如果您希望节点加入现有集群,请在首次启动新节点之前在现有节点上生成注册令牌。

  1. 在现有集群中的任何节点上,生成节点注册令牌

    /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
  2. 复制注册令牌,该令牌将输出到您的终端。
  3. 在新 Elasticsearch 节点上,将注册令牌作为参数传递给 elasticsearch-reconfigure-node 工具

    /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <enrollment-token>

    Elasticsearch 现在已配置为加入现有集群。

  4. 使用 systemd 启动新节点.

启用系统索引的自动创建

编辑

某些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,无需执行其他步骤。但是,如果您已禁用 Elasticsearch 中的自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引

action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

如果您正在使用 LogstashBeats,那么您很可能需要在 action.auto_create_index 设置中添加其他索引名称,具体值将取决于您的本地配置。如果您不确定您的环境的正确值,您可以考虑将该值设置为 *,这将允许自动创建所有索引。

使用 systemd 运行 Elasticsearch

编辑

要配置 Elasticsearch 在系统启动时自动启动,请运行以下命令

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

可以按如下方式启动和停止 Elasticsearch

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令不提供有关 Elasticsearch 是否成功启动的反馈。相反,此信息将写入 /var/log/elasticsearch/ 中的日志文件。

如果您已使用密码保护了 Elasticsearch 密钥库,则需要使用本地文件和 systemd 环境变量向 systemd 提供密钥库密码。此本地文件在存在期间应受到保护,并且一旦 Elasticsearch 启动并运行,可以安全删除。

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

默认情况下,Elasticsearch 服务不会将信息记录到 systemd 日志中。要启用 journalctl 日志记录,必须从 elasticsearch.service 文件中的 ExecStart 命令行中删除 --quiet 选项。

启用 systemd 日志记录后,可以使用 journalctl 命令获取日志信息

要尾部查看日志

sudo journalctl -f

要列出 elasticsearch 服务的日志条目

sudo journalctl --unit elasticsearch

要列出 elasticsearch 服务从给定时间开始的日志条目

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

有关更多命令行选项,请查看 man journalctlhttps://www.freedesktop.org/software/systemd/man/journalctl.html

旧版本 systemd 的启动超时

默认情况下,Elasticsearch 将 TimeoutStartSec 参数设置为 systemd900s。如果您运行的是至少 238 版本的 systemd,则 Elasticsearch 可以自动延长启动超时,并且会重复执行此操作,直到启动完成(即使花费的时间超过 900 秒)。

238 之前的 systemd 版本不支持超时延长机制,如果 Elasticsearch 未在配置的超时时间内完全启动,则会终止 Elasticsearch 进程。如果发生这种情况,Elasticsearch 将在其日志中报告它在启动后不久正常关闭

[2022-01-31T01:22:31,077][INFO ][o.e.n.Node               ] [instance-0000000123] starting ...
...
[2022-01-31T01:37:15,077][INFO ][o.e.n.Node               ] [instance-0000000123] stopping ...

但是 systemd 日志会报告启动超时

Jan 31 01:22:30 debian systemd[1]: Starting Elasticsearch...
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Start operation timed out. Terminating.
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Main process exited, code=killed, status=15/TERM
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Failed with result 'timeout'.
Jan 31 01:37:15 debian systemd[1]: Failed to start Elasticsearch.

为避免这种情况,请将您的 systemd 升级到至少 238 版本。您还可以通过延长 TimeoutStartSec 参数来暂时解决此问题。

检查 Elasticsearch 是否正在运行

编辑

您可以通过向 localhost 上的端口 9200 发送 HTTPS 请求来测试您的 Elasticsearch 节点是否正在运行

curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://127.0.0.1:9200 

请确保在调用中使用 https,否则请求将失败。

--cacert
HTTP 层生成的 http_ca.crt 证书的路径。

该调用会返回如下响应

{
  "name" : "Cp8oag6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  "version" : {
    "number" : "8.17.0",
    "build_type" : "tar",
    "build_hash" : "f27399d",
    "build_flavor" : "default",
    "build_date" : "2016-03-30T09:51:41.449Z",
    "build_snapshot" : false,
    "lucene_version" : "9.12.0",
    "minimum_wire_compatibility_version" : "1.2.3",
    "minimum_index_compatibility_version" : "1.2.3"
  },
  "tagline" : "You Know, for Search"
}

配置 Elasticsearch

编辑

/etc/elasticsearch 目录包含 Elasticsearch 的默认运行时配置。在软件包安装时,此目录及其包含的所有文件的所有权都设置为 root:elasticsearch

setgid 标志将组权限应用于 /etc/elasticsearch 目录,以确保 Elasticsearch 可以读取任何包含的文件和子目录。所有文件和子目录都继承 root:elasticsearch 所有权。从此目录或任何子目录运行命令(例如 elasticsearch-keystore 工具)需要 root:elasticsearch 权限。

Elasticsearch 默认从 /etc/elasticsearch/elasticsearch.yml 文件加载其配置。此配置文件的格式在 配置 Elasticsearch 中进行了解释。

Debian 包还有一个系统配置文件 (/etc/default/elasticsearch),允许您设置以下参数

ES_JAVA_HOME

设置要使用的自定义 Java 路径。

ES_PATH_CONF

配置文件目录(需要包含 elasticsearch.ymljvm.optionslog4j2.properties 文件);默认为 /etc/elasticsearch

ES_JAVA_OPTS

您可能想要应用的任何其他 JVM 系统属性。

RESTART_ON_UPGRADE

配置软件包升级时的重启,默认为 false。这意味着您必须在手动安装软件包后重启 Elasticsearch 实例。这样做的原因是确保集群中的升级不会导致持续的分片重新分配,从而导致高网络流量并降低集群的响应时间。

使用 systemd 的发行版要求通过 systemd 而不是通过 /etc/sysconfig/elasticsearch 文件配置系统资源限制。有关更多信息,请参阅 Systemd 配置

将客户端连接到 Elasticsearch

编辑

当您首次启动 Elasticsearch 时,会自动为 HTTP 层配置 TLS。CA 证书将被生成并存储在磁盘上的以下位置

/etc/elasticsearch/certs/http_ca.crt

此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,如 Elasticsearch 客户端、Beats、独立 Elastic Agent 和 Logstash,都必须验证它们是否信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agent 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。

如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将 CA 证书复制到您的机器并配置您的客户端以使用它。

使用 CA 指纹
编辑

复制 Elasticsearch 启动时输出到终端的指纹值,并配置您的客户端以使用此指纹在连接到 Elasticsearch 时建立信任。

如果自动配置过程已经完成,您仍然可以通过运行以下命令来获取安全证书的指纹。路径指向 HTTP 层的自动生成的 CA 证书。

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。 issuer 应该是 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
使用 CA 证书
编辑

如果您的库不支持验证指纹的方法,则自动生成的 CA 证书将在每个 Elasticsearch 节点的以下目录中创建

/etc/elasticsearch/certs/http_ca.crt

http_ca.crt 文件复制到您的机器上,并配置您的客户端以使用此证书在连接到 Elasticsearch 时建立信任。

Debian 包的目录布局

编辑

Debian 包将配置文件、日志和数据目录放置在基于 Debian 的系统的适当位置

类型 描述 默认位置 设置

home

Elasticsearch 主目录或 $ES_HOME

/usr/share/elasticsearch

bin

二进制脚本,包括用于启动节点的 elasticsearch 和用于安装插件的 elasticsearch-plugin

/usr/share/elasticsearch/bin

conf

配置文件,包括 elasticsearch.yml

/etc/elasticsearch

ES_PATH_CONF

conf

环境变量,包括堆大小、文件描述符。

/etc/default/elasticsearch

conf

为传输层和 HTTP 层生成的 TLS 密钥和证书。

/etc/elasticsearch/certs

data

分配在节点上的每个索引/分片的数据文件的位置。

/var/lib/elasticsearch

path.data

jdk

用于运行 Elasticsearch 的捆绑 Java 开发工具包。可以通过在 /etc/default/elasticsearch 中设置 ES_JAVA_HOME 环境变量来覆盖。

/usr/share/elasticsearch/jdk

logs

日志文件位置。

/var/log/elasticsearch

path.logs

plugins

插件文件位置。每个插件都将包含在子目录中。

/usr/share/elasticsearch/plugins

repo

共享文件系统存储库位置。可以保存多个位置。文件系统存储库可以放置在此处指定的任何目录的任何子目录中。

未配置

path.repo

安全证书和密钥

编辑

安装 Elasticsearch 时,将在 Elasticsearch 配置目录中生成以下证书和密钥,这些证书和密钥用于将 Kibana 实例连接到您受保护的 Elasticsearch 集群以及加密节点间通信。此处列出这些文件以供参考。

http_ca.crt
用于签署此 Elasticsearch 集群 HTTP 层证书的 CA 证书。
http.p12
包含此节点 HTTP 层的密钥和证书的密钥库。
transport.p12
包含集群中所有节点的传输层的密钥和证书的密钥库。

http.p12transport.p12 是受密码保护的 PKCS#12 密钥库。 Elasticsearch 将这些密钥库的密码存储为安全设置。要检索密码以便您可以检查或更改密钥库内容,请使用 bin/elasticsearch-keystore 工具。

使用以下命令检索 http.p12 的密码

bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

使用以下命令检索 transport.p12 的密码

bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

下一步

编辑

现在您已经设置了一个测试 Elasticsearch 环境。在您开始使用 Elasticsearch 进行认真开发或投入生产之前,您必须进行一些额外的设置