节点

编辑

每次启动 Elasticsearch 实例时,您都在启动一个节点。连接的节点集合称为集群。如果您正在运行单个 Elasticsearch 节点,则您拥有一个包含一个节点的集群。

默认情况下,集群中的每个节点都可以处理HTTP 和传输流量。传输层专门用于节点之间的通信;HTTP 层供 REST 客户端使用。

所有节点都了解集群中的所有其他节点,并且可以将客户端请求转发到相应的节点。

Elasticsearch 节点的性能通常受底层存储性能的限制。请查看我们关于优化存储以提高索引搜索性能的建议。

节点角色

编辑

您可以通过在 elasticsearch.yml 中设置 node.roles 来定义节点的角色。如果设置 node.roles,则该节点仅分配您指定的角色。如果您不设置 node.roles,则该节点将被分配以下角色

  • master
  • data
  • data_content
  • data_hot
  • data_warm
  • data_cold
  • data_frozen
  • ingest
  • ml
  • remote_cluster_client
  • transform

如果设置了 node.roles,请确保指定集群所需的所有节点角色。每个集群都需要以下节点角色

  • master
  • data_contentdata_hot

    data

一些 Elastic Stack 功能还需要特定的节点角色

  • 跨集群搜索和跨集群复制需要 remote_cluster_client 角色。
  • Stack Monitoring 和摄取管道需要 ingest 角色。
  • Fleet、Elastic Security 应用程序和转换需要 transform 角色。使用这些功能的跨集群搜索也需要 remote_cluster_client 角色。
  • 机器学习功能,例如异常检测,需要 ml 角色。

随着集群的增长,特别是当您有大型机器学习作业或连续转换时,请考虑将专用的主节点与专用的数据节点、机器学习节点和转换节点分开。

主节点
具有 master 角色的节点,使其有资格被选为节点,控制集群。
数据节点
具有多个数据角色之一的节点。数据节点保存数据并执行与数据相关的操作,例如 CRUD、搜索和聚合。具有通用 data 角色的节点可以填充任何专门的数据节点角色。
摄取节点
具有 ingest 角色的节点。摄取节点能够将摄取管道应用于文档,以便在索引之前转换和丰富文档。在大量摄取负载的情况下,使用专用的摄取节点,并且不包括具有 masterdata 角色的节点中的 ingest 角色是有意义的。
远程资格节点
具有 remote_cluster_client 角色的节点,使其有资格充当远程客户端。
机器学习节点
具有 ml 角色的节点。如果要使用机器学习功能,则集群中必须至少有一个机器学习节点。有关更多信息,请参阅机器学习设置Elastic Stack 中的机器学习
转换节点
具有 transform 角色的节点。如果要使用转换,则集群中必须至少有一个转换节点。有关更多信息,请参阅转换设置转换数据

协调节点

诸如搜索请求或批量索引请求之类的请求可能涉及不同数据节点上保存的数据。例如,搜索请求分两个阶段执行,这两个阶段由接收客户端请求的节点(即协调节点)协调。

分散阶段,协调节点将请求转发到保存数据的数据节点。每个数据节点在本地执行请求并将其结果返回给协调节点。在收集阶段,协调节点将每个数据节点的结果减少为单个全局结果集。

每个节点都隐式地是一个协调节点。这意味着具有通过 node.roles 显式定义的空角色列表的节点将仅充当协调节点,而无法禁用此功能。因此,这样的节点需要有足够的内存和 CPU 来处理收集阶段。

主节点

编辑

主节点负责轻量级集群范围的操作,例如创建或删除索引、跟踪哪些节点是集群的一部分以及决定将哪些分片分配给哪些节点。拥有一个稳定的主节点对于集群健康至关重要。

任何不属于仅投票节点的主资格节点都可以通过主选举过程被选为成为主节点。

主节点必须具有 path.data 目录,其内容在重启后仍然存在,就像数据节点一样,因为这是存储集群元数据的地方。集群元数据描述了如何读取存储在数据节点上的数据,因此如果丢失了,则无法读取存储在数据节点上的数据。

专用主资格节点

编辑

对于集群的健康状况,选出的主节点拥有履行其职责所需的资源非常重要。如果选出的主节点因其他任务而过载,则集群将无法正常运行。避免主节点因其他任务而过载的最可靠方法是将所有主资格节点配置为专用主资格节点,这些节点仅具有 master 角色,从而使它们能够专注于管理集群。主资格节点仍然会像协调节点一样,将客户端的请求路由到集群中的其他节点,但您应该将专用主节点用于此目的。

如果其主资格节点具有其他角色和职责,则小型或负载较轻的集群可能会运行良好,但是一旦您的集群包含多个节点,通常就有必要使用专用主资格节点。

要创建专用主资格节点,请设置

node.roles: [ master ]

仅投票主资格节点

编辑

仅投票主资格节点是参与主选举的节点,但不会充当集群的选定主节点。特别是,仅投票节点可以在选举中充当平局决胜者。

使用术语“主资格”来描述仅投票节点似乎令人困惑,因为这样的节点实际上根本没有资格成为主节点。这种术语是历史遗留的不幸结果:主资格节点是那些参与选举并在集群状态发布期间执行某些任务的节点,而仅投票节点即使永远无法成为选定的主节点也具有相同的职责。

要将主资格节点配置为仅投票节点,请在角色列表中包括 mastervoting_only。例如,要创建仅投票数据节点

node.roles: [ data, master, voting_only ]

只有具有 master 角色的节点才能标记为具有 voting_only 角色。

高可用性 (HA) 集群至少需要三个主资格节点,其中至少有两个不是仅投票节点。即使其中一个节点出现故障,这样的集群也能够选举出一个主节点。

仅投票主资格节点也可以在您的集群中填充其他角色。例如,一个节点可以同时是数据节点和仅投票主资格节点。专用仅投票主资格节点是集群中不填充其他角色的仅投票主资格节点。要创建专用仅投票主资格节点,请设置

node.roles: [ master, voting_only ]

由于专用仅投票节点永远不会充当集群的选定主节点,因此它们可能需要比真正的主节点更少的堆空间和更弱的 CPU。但是,包括仅投票节点在内的所有主资格节点都处于发布集群状态更新的关键路径上。集群状态更新通常独立于性能关键型工作负载(例如索引或搜索),但它们参与管理活动,例如索引创建和滚动、映射更新以及故障后的恢复。这些活动的性能特征是每个主资格节点上存储速度的函数,以及选定的主节点与集群中其他节点之间网络互连的可靠性和延迟的函数。因此,您必须确保您的集群中节点可用的存储和网络足以满足您的性能目标。

数据节点

编辑

数据节点保存包含您已索引文档的分片。数据节点处理与数据相关的操作,例如 CRUD、搜索和聚合。这些操作是 I/O、内存和 CPU 密集型的。监视这些资源并在它们过载时添加更多数据节点非常重要。

拥有专用数据节点的主要好处是主角色和数据角色的分离。

在多层部署架构中,您可以使用专门的数据角色将数据节点分配给特定层:data_contentdata_hotdata_warmdata_colddata_frozen。一个节点可以属于多个层。

如果要将节点包含在所有层中,或者您的集群未使用多个层,则可以使用通用的 data 角色。

集群分片限制阻止每个节点创建超过 1000 个非冻结分片,以及每个专用冻结节点创建 3000 个冻结分片。请确保您的集群中每种类型的节点都有足够的数量来处理您所需的分片数量。

如果您使用专门的数据角色将节点分配给特定层,则也不应为其分配通用的 data 角色。通用的 data 角色优先于专门的数据角色。

通用数据节点

编辑

所有内容层级都包含通用数据节点。

要创建专用的通用数据节点,请设置

node.roles: [ data ]

内容数据节点

编辑

内容数据节点是内容层的一部分。存储在内容层中的数据通常是项目集合,例如产品目录或文章存档。与时间序列数据不同,内容的值随时间推移保持相对恒定,因此将其移动到具有不同性能特征的层级是不合理的。内容数据通常具有较长的数据保留要求,并且您希望能够快速检索项目,无论它们有多旧。

内容层节点通常针对查询性能进行优化——它们优先考虑处理能力而非 IO 吞吐量,以便它们可以处理复杂的搜索和聚合并快速返回结果。虽然它们也负责索引,但内容数据的摄取速率通常不像时间序列数据(如日志和指标)那么高。从弹性的角度来看,此层中的索引应配置为使用一个或多个副本。

内容层是必需的,并且通常部署在与热层相同的节点组中。系统索引和其他不属于数据流的索引会自动分配到内容层。

要创建专用的内容节点,请设置

node.roles: [ data_content ]

热数据节点

编辑

热数据节点是热层的一部分。热层是 Elasticsearch 时间序列数据的入口点,并保存您最近、最常搜索的时间序列数据。热层中的节点需要快速进行读写,这需要更多的硬件资源和更快的存储(SSD)。为了弹性,热层中的索引应配置为使用一个或多个副本。

热层是必需的。属于数据流的新索引会自动分配到热层。

要创建专用的热节点,请设置

node.roles: [ data_hot ]

温数据节点

编辑

温数据节点是温层的一部分。一旦时间序列数据的查询频率低于热层中最近索引的数据,就可以将其移动到温层。温层通常保存最近几周的数据。仍然允许更新,但可能不频繁。温层中的节点通常不需要像热层中的节点那么快。为了弹性,温层中的索引应配置为使用一个或多个副本。

要创建专用的温节点,请设置

node.roles: [ data_warm ]

冷数据节点

编辑

冷数据节点是冷层的一部分。当您不再需要定期搜索时间序列数据时,可以将其从温层移动到冷层。虽然仍然可以搜索,但此层通常针对较低的存储成本进行优化,而不是搜索速度。

为了更好地节省存储空间,您可以在冷层上保留完全挂载的索引,这些索引是可搜索快照。与常规索引不同,这些完全挂载的索引不需要副本即可实现可靠性。如果发生故障,它们可以从底层快照中恢复数据。这可能会将数据所需的本地存储空间减半。必须有一个快照存储库才能在冷层中使用完全挂载的索引。完全挂载的索引是只读的。

或者,您可以使用冷层来存储带有副本的常规索引,而不是使用可搜索快照。这使您可以将旧数据存储在更便宜的硬件上,但与温层相比,不会减少所需的磁盘空间。

要创建专用的冷节点,请设置

node.roles: [ data_cold ]

冻结数据节点

编辑

冻结数据节点是冻结层的一部分。一旦数据不再被查询,或者很少被查询,它可能会从冷层移动到冻结层,并在那里度过其剩余的生命周期。

冻结层需要一个快照存储库。冻结层使用部分挂载的索引来存储和加载快照存储库中的数据。这减少了本地存储和运营成本,同时仍然允许您搜索冻结的数据。由于 Elasticsearch 有时必须从快照存储库中获取冻结的数据,因此在冻结层上的搜索通常比在冷层上的搜索慢。

要创建专用的冻结节点,请设置

node.roles: [ data_frozen ]

摄取节点

编辑

摄取节点可以执行由一个或多个摄取处理器组成的预处理管道。根据摄取处理器执行的操作类型和所需的资源,拥有专用的摄取节点可能是有意义的,这些节点将仅执行此特定任务。

要创建专用的摄取节点,请设置

node.roles: [ ingest ]

仅协调节点

编辑

如果您取消处理主节点职责、保存数据和预处理文档的能力,那么您将只剩下一个协调节点,该节点只能路由请求、处理搜索减少阶段和分配批量索引。本质上,仅协调节点的行为类似于智能负载均衡器。

仅协调节点可以通过从数据节点和有资格成为主节点的节点卸载协调节点角色来使大型集群受益。它们加入集群并接收完整的集群状态,就像其他每个节点一样,并且它们使用集群状态将请求直接路由到适当的位置。

向集群添加过多的仅协调节点会增加整个集群的负担,因为选定的主节点必须等待每个节点确认集群状态更新!不应过分夸大仅协调节点的好处——数据节点可以愉快地承担相同的用途。

要创建专用的协调节点,请设置

node.roles: [ ]

有资格作为远程节点的节点

编辑

有资格作为远程节点的节点充当跨集群客户端并连接到远程集群。连接后,您可以使用跨集群搜索搜索远程集群。您还可以使用跨集群复制在集群之间同步数据。

node.roles: [ remote_cluster_client ]

机器学习节点

编辑

机器学习节点运行作业并处理机器学习 API 请求。有关更多信息,请参阅机器学习设置

要创建专用的机器学习节点,请设置

node.roles: [ ml, remote_cluster_client]

remote_cluster_client 角色是可选的,但强烈建议使用。否则,在机器学习作业或数据馈送中使用跨集群搜索时会失败。如果在异常检测作业中使用跨集群搜索,则所有有资格成为主节点的节点也需要 remote_cluster_client 角色。否则,数据馈送无法启动。请参阅有资格作为远程节点的节点

转换节点

编辑

转换节点运行转换并处理转换 API 请求。有关更多信息,请参阅转换设置

要创建专用的转换节点,请设置

node.roles: [ transform, remote_cluster_client ]

remote_cluster_client 角色是可选的,但强烈建议使用。否则,在转换中使用跨集群搜索时会失败。请参阅有资格作为远程节点的节点

更改节点的角色

编辑

每个数据节点在磁盘上维护以下数据

  • 分配给该节点的每个分片的分片数据,
  • 与分配给该节点的每个分片对应的索引元数据,以及
  • 集群范围的元数据,例如设置和索引模板。

同样,每个有资格成为主节点的节点在磁盘上维护以下数据

  • 集群中每个索引的索引元数据,以及
  • 集群范围的元数据,例如设置和索引模板。

每个节点在启动时都会检查其数据路径的内容。如果发现意外数据,则会拒绝启动。这是为了避免导入不需要的悬空索引,这可能会导致集群运行状况为红色。更准确地说,没有 data 角色的节点如果在启动时在磁盘上发现任何分片数据,则会拒绝启动,而没有 masterdata 角色的节点如果在启动时在磁盘上发现任何索引元数据,则会拒绝启动。

可以通过调整节点的 elasticsearch.yml 文件并重新启动它来更改节点的角色。这被称为重新调整节点。为了满足上述对意外数据的检查,您必须执行一些额外的步骤来准备一个在没有 datamaster 角色的情况下启动的节点以进行重新调整用途。

  • 如果要通过删除 data 角色来重新调整数据节点的用途,则应首先使用分配筛选器将所有分片数据安全地迁移到集群中的其他节点上。
  • 如果要重新调整节点的用途,使其既不具有 data 角色也不具有 master 角色,则最简单的方法是使用空数据路径和所需的角色启动一个全新的节点。您可能会发现最好先使用分配筛选器将分片数据迁移到集群中的其他位置。

如果无法执行这些额外的步骤,则可以使用elasticsearch-node repurpose工具删除任何阻止节点启动的多余数据。

节点数据路径设置

编辑

path.data

编辑

每个数据节点和有资格成为主节点的节点都需要访问一个数据目录,在该目录中存储分片以及索引和集群元数据。path.data 默认为 $ES_HOME/data,但可以在 elasticsearch.yml 配置文件中配置为绝对路径或相对于 $ES_HOME 的路径,如下所示

path.data:  /var/elasticsearch/data

与所有节点设置一样,它也可以在命令行中指定,如下所示

./bin/elasticsearch -Epath.data=/var/elasticsearch/data

path.data 目录的内容必须在重新启动时保持不变,因为这是存储数据的位置。Elasticsearch 要求文件系统的行为就像它由本地磁盘支持一样,但这意味着只要远程存储的行为与本地存储没有不同,它就可以在正确配置的远程块设备(例如,SAN)和远程文件系统(例如,NFS)上正常工作。您可以在同一文件系统上运行多个 Elasticsearch 节点,但每个 Elasticsearch 节点必须有自己的数据路径。

使用 .zip.tar.gz 发行版时,应将 path.data 设置配置为将数据目录放置在 Elasticsearch 主目录之外,以便可以删除主目录而不会删除您的数据!RPM 和 Debian 发行版已经为您完成了这项工作。

请勿修改数据目录中的任何内容,或运行任何可能干扰其内容的过程。如果 Elasticsearch 以外的任何程序修改了数据目录的内容,则 Elasticsearch 可能会失败,报告损坏或其他数据不一致问题,或者可能看起来工作正常,但实际上已悄悄丢失了部分数据。请勿尝试对数据目录进行文件系统备份;不支持恢复此类备份。请使用快照与还原进行安全备份。请勿对数据目录运行病毒扫描程序。病毒扫描程序可能会阻止 Elasticsearch 正常工作,并可能修改数据目录的内容。数据目录不包含任何可执行文件,因此病毒扫描只会发现误报。

其他节点设置

编辑

更多节点设置可以在配置 Elasticsearch重要的 Elasticsearch 配置中找到,包括