节点编辑

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

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

所有节点都知道集群中的所有其他节点,并且可以将客户端请求转发到适当的节点。

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角色。
  • 堆栈监控和摄取管道需要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配置中找到,包括