正在加载

使用 Debian 包安装 Elasticsearch

自管理

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

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

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

注意

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

在安装 Elasticsearch 之前,请执行以下操作

  • 查看 受支持的操作系统 并准备好虚拟或物理主机,您可以在其中安装 Elasticsearch。

    Elasticsearch 在列出的平台上进行了测试,但它也可能在其他平台上工作。

  • 使用 重要的系统配置 指南配置您的操作系统。

我们使用 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

您有几个选项可以安装 Elasticsearch Debian 包

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

    sudo apt-get install apt-transport-https
    
  2. 将仓库定义保存到 /etc/apt/sources.list.d/elastic-9.x.list

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

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

这些说明未使用 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 仓库存在两个条目,您将在 apt-get update 期间看到如下错误

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

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

注意

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

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

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-amd64.deb.sha512
shasum -a 512 -c elasticsearch-9.0.0-amd64.deb.sha512
sudo dpkg -i elasticsearch-9.0.0-amd64.deb
  1. 比较下载的 Debian 包的 SHA 和发布的校验和,它应该输出 elasticsearch-<version>-amd64.deb: OK

当 Elasticsearch 首次启动时,安全自动配置过程会将 HTTP 层绑定到 0.0.0.0,但仅将传输层绑定到 localhost。 这种预期行为确保您可以默认启动启用了安全性的单节点集群,而无需任何其他配置。

在注册新节点之前,通常需要在生产集群中执行其他操作,例如绑定到 localhost 以外的地址或满足引导检查。 在此期间,自动生成的注册令牌可能会过期,这就是为什么不自动生成注册令牌的原因。

只有同一主机上的节点才能在没有其他配置的情况下加入集群。 如果您希望来自另一台主机的节点加入您的集群,您需要使您的实例可访问。

如果您正在运行单节点集群,请跳到下一步。

有关集群形成过程的更多信息,请参阅 发现和集群形成

更新此第一个节点上的 Elasticsearch 配置,以便其他主机能够通过编辑 elasticsearch.yml 中的设置来连接到它

  1. 在文本编辑器中打开 elasticsearch.yml

  2. 在多节点 Elasticsearch 集群中,所有 Elasticsearch 实例都需要具有相同的名称。

    在配置文件中,取消注释行 #cluster.name: my-application,并为 Elasticsearch 实例指定您想要的任何名称

    cluster.name: elasticsearch-demo
    
  3. 默认情况下,Elasticsearch 在 localhost 上运行。 为了使其他节点上的 Elasticsearch 实例能够加入集群,您需要将 Elasticsearch 设置为在可路由的外部 IP 地址上运行。

    取消注释行 #network.host: 192.168.0.1,并将默认地址替换为 0.0.0.00.0.0.0 设置使 Elasticsearch 能够侦听所有可用网络接口上的连接。 在生产环境中,您可能需要 使用不同的值,例如静态 IP 地址或对 主机的网络接口 的引用。

    network.host: 0.0.0.0
    
  4. 需要启用 Elasticsearch 以侦听来自其他外部主机的连接。

    取消注释行 #transport.host: 0.0.0.00.0.0.0 设置使 Elasticsearch 能够侦听所有可用网络接口上的连接。 在生产环境中,您可能需要 使用不同的值,例如静态 IP 地址或对 主机的网络接口 的引用。

    transport.host: 0.0.0.0
    
    提示

    您可以在 Elasticsearch 网络设置参考中找到有关 network.hosttransport.host 设置的详细信息。

  5. 保存您的更改并关闭编辑器。

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

提示

在注册新节点之前,请确保新节点能够访问集群中的第一个节点。 您可以通过对第一个节点运行 curl 命令来对此进行测试。

如果无法访问第一个节点,请在继续操作之前修改您的网络配置。

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

    /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
    

    注册令牌的有效期为 30 分钟。 您应该为您添加的每个新节点创建一个新的注册令牌。

  2. 复制注册令牌,该令牌将输出到您的终端。

  3. 在新 Elasticsearch 节点上,将注册令牌作为参数传递给 elasticsearch-reconfigure-node 工具

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

    使用 yes (y) 回答 Do you want to continue 提示。 将重新配置新的 Elasticsearch 节点。

  4. 在文本编辑器中打开新 Elasticsearch 实例的 elasticsearch.yml 文件。

    elasticsearch-reconfigure-node 工具已更新了多个设置。 例如

    • transport.host: 0.0.0.0 设置已经取消注释。
    • discovery_seed.hosts 设置具有迄今为止添加到集群中的其他 Elasticsearch 节点的 IP 地址和端口。 当您将每个新 Elasticsearch 节点添加到集群时,discovery_seed.hosts 设置将包含一个 IP 地址和端口号数组,用于连接到先前添加到集群的每个 Elasticsearch 节点。
  5. 在配置文件中,取消注释行 #cluster.name: my-application 并将其设置为与您为第一个 Elasticsearch 节点指定的名称匹配

    cluster.name: elasticsearch-demo
    
  6. 与第一个 Elasticsearch 节点一样,您需要将 Elasticsearch 设置为在可路由的外部 IP 地址上运行。

    取消注释行 #network.host: 192.168.0.1,并将默认地址替换为 0.0.0.00.0.0.0 设置使 Elasticsearch 能够侦听所有可用网络接口上的连接。 在生产环境中,您可能需要 使用不同的值,例如静态 IP 地址或对 主机的网络接口 的引用。

    network.host: 0.0.0.0
    
  7. 保存您的更改并关闭编辑器。

您可以为要添加到集群的每个其他 Elasticsearch 节点重复这些步骤。

警告

如果您正在设置多节点集群,那么一旦您向集群添加第二个节点,您就需要更新第一个节点的配置文件,否则它将无法重新启动。

提示

仅当您之前更改过 action.auto_create_index 的默认值时,才需要此部分。

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

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

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

要配置 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.md 了解更多命令行选项。

旧版本 systemd 启动超时

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

早于 238 的 systemd 版本不支持超时延长机制,如果在配置的超时时间内未完全启动,则会终止 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 时,它会自动执行以下安全设置

然后,您可以启动 Kibana 并输入注册令牌,该令牌有效期为 30 分钟。 此令牌会自动应用来自您的 Elasticsearch 集群的安全设置,使用内置的 kibana 服务帐户向 Elasticsearch 进行身份验证,并将安全配置写入 kibana.yml

注意

在某些情况下,由于节点启动过程检测到该节点已是集群的一部分,或者安全已配置或已明确禁用,因此无法自动配置安全。

由于 Elasticsearch 使用 systemd 运行,而不是在终端中运行,因此当 Elasticsearch 首次启动时,不会输出 elastic 超级用户密码。 使用 elasticsearch-reset-password 工具为用户设置密码。 这只需要为集群执行一次,并且可以在第一个节点启动后立即完成。

bin/elasticsearch-reset-password -u elastic

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

export  ELASTIC_PASSWORD="your_password"

如果您已使用密码保护了 Elasticsearch 密钥库,系统将提示您输入密钥库的密码。 有关更多详细信息,请参阅 安全设置

要了解如何重置此密码,请参阅 在自管理集群中为本地和内置用户设置密码

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

curl --cacert /etc/elasticsearch/certs/http_ca.crt
-u elastic:$ELASTIC_PASSWORD https://localhost:9200
  1. --cacert:HTTP 层生成的 http_ca.crt 证书的路径。
  2. $ELASTIC_PASSWORD 替换为 elastic 超级用户密码。 确保在您的调用中使用 https,否则请求将失败。

该调用返回如下响应

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

如果您正在部署多节点集群,那么 elasticsearch-reconfigure-node 工具会将所有现有节点添加到每个新注册节点的 discovery.seed_hosts 设置中。 但是,您需要返回到集群中的所有节点并对其进行编辑,以便集群中的每个节点都可以按预期重新启动并重新加入集群。

注意

由于集群中的初始节点引导为单节点集群,因此它不会配置 discovery.seed_hosts。 此设置对于多节点集群是强制性的,必须手动添加到第一个节点。

在集群中的每个节点上执行以下步骤

  1. 在文本编辑器中打开 elasticsearch.yml
  2. 注释掉或删除 cluster.initial_master_nodes 设置(如果存在)。
  3. 更新 discovery.seed_hosts 值,使其包含集群中每个符合主节点资格的 Elasticsearch 节点的 IP 地址和端口。 在集群中的第一个节点中,您需要手动添加 discovery.seed_hosts 设置。
  4. (可选)重新启动 Elasticsearch 服务以验证您的配置更改。

如果您不执行这些步骤,那么一个或多个节点将在重新启动时未能通过 发现配置引导检查

有关更多信息,请参阅 发现和集群形成

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

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

默认情况下,Elasticsearch 从 /etc/elasticsearch/elasticsearch.yml 文件加载其配置。 配置 Elasticsearch 中解释了此配置文件的格式。

Debian 软件包还有一个系统配置文件 (/etc/sysconfig/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 时,会自动为 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 证书复制到您的机器上,并配置您的客户端以使用它。

复制 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 证书会在每个 Elasticsearch 节点上的以下目录中创建:

/etc/elasticsearch/certs/http_ca.crt

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

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 投入生产环境之前,您必须进行一些额外的设置。

您还可以执行以下操作:

© . All rights reserved.