在您的集群中添加和删除节点

edit

在您的集群中添加和删除节点

edit

当您启动一个Elasticsearch实例时,您正在启动一个节点。Elasticsearch 集群是一组具有相同cluster.name属性的节点。当节点加入或离开集群时,集群会自动重新组织自己,以均匀地分布数据到可用节点上。

如果你正在运行一个单实例的 Elasticsearch,你有一个单节点的集群。 所有主分片都位于这个单个节点上。无法分配副本分片,因此集群状态保持黄色。集群完全功能正常,但在发生故障时存在数据丢失的风险。

A cluster with one node and three primary shards

您可以通过向集群添加节点来增加其容量和可靠性。默认情况下,一个节点既是数据节点,也有资格被选为控制集群的主节点。您还可以为新节点配置特定用途,例如处理摄取请求。有关更多信息,请参阅节点

当您向集群添加更多节点时,它会自动分配副本分片。 当所有主分片和副本分片都处于活动状态时,集群状态将变为 绿色。

A cluster with three nodes

在现有集群中注册节点

edit

您可以在本地机器上注册额外的节点,以实验多节点Elasticsearch集群的行为。

要将节点添加到在多台机器上运行的集群中,您还必须设置 discovery.seed_hosts,以便新节点可以发现 集群的其余部分。

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

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

此外,只有位于同一主机上的节点可以在无需额外配置的情况下加入集群。如果您希望来自其他主机的节点加入您的集群,您需要将transport.host设置为支持的值(例如取消注释建议的0.0.0.0值),或绑定到其他主机可以访问的接口的IP地址。更多信息请参阅传输设置

要在集群中注册新节点,请在集群中的任何现有节点上使用elasticsearch-create-enrollment-token工具创建一个注册令牌。然后,您可以使用--enrollment-token参数启动一个新节点,使其加入现有集群。

  1. 在运行 Elasticsearch 的终端之外,导航到您安装 Elasticsearch 的目录,并运行 elasticsearch-create-enrollment-token 工具以生成新节点的注册令牌。

    bin\elasticsearch-create-enrollment-token -s node

    复制注册令牌,您将使用该令牌在您的 Elasticsearch 集群中注册新节点。

  2. 从您的新节点的安装目录中,启动 Elasticsearch 并使用 --enrollment-token 参数传递注册令牌。

    bin\elasticsearch --enrollment-token 

    Elasticsearch 会自动在以下目录中生成证书和密钥:

    config\certs
  3. 重复上一步,以注册您想要加入的任何新节点。

有关发现和分片分配的更多信息,请参阅 发现和集群形成集群级别的分片分配和路由设置

有资格成为主节点的节点

edit

当节点被添加或移除时,Elasticsearch通过自动更新集群的投票配置来维持最佳的容错水平,该配置是用于在做出决策(如选举新主节点或提交新的集群状态)时计数的主节点集合。

建议在一个集群中拥有少量且固定的主节点候选节点,并通过仅添加和移除非主节点候选节点来扩展和缩减集群。然而,在某些情况下,可能需要向集群中添加或移除一些主节点候选节点。

添加主节点

edit

如果您希望向集群中添加一些节点,只需配置新节点以找到现有集群并启动它们。如果合适,Elasticsearch会将新节点添加到投票配置中。

在主节点选举期间或加入现有已形成的集群时,节点会向主节点发送加入请求,以便正式加入集群。

移除符合主节点资格的节点

edit

在移除主节点时,重要的是不要一次性移除太多。例如,如果当前有七个主节点,而您希望将其减少到三个,那么不能简单地一次性停止四个节点:这样做将只剩下三个节点,这少于投票配置的一半,这意味着集群无法采取进一步的行动。

更准确地说,如果你同时关闭一半或更多的主节点,集群通常会变得不可用。如果发生这种情况,你可以通过重新启动被移除的节点来使集群重新上线。

只要集群中至少有三个符合主节点资格的节点,通常最好一次移除一个节点,给集群足够的时间来自动调整投票配置并适应新的节点集的容错级别。

如果只剩下两个主节点,则不能安全地移除任何一个节点,因为两者都是可靠地进行操作所必需的。要移除其中一个节点,您必须首先通知 Elasticsearch,它不应再成为投票配置的一部分,而应将投票权交给另一个节点。然后,您可以将排除的节点下线,而不会阻止另一个节点进行操作。添加到投票配置排除列表中的节点仍然可以正常工作,但 Elasticsearch 会尝试将其从投票配置中移除,因此不再需要其投票。重要的是,Elasticsearch 永远不会自动将投票排除列表中的节点移回投票配置中。一旦排除的节点成功地自动重新配置出投票配置,就可以安全地关闭它,而不会影响集群的主节点级别的可用性。可以使用 投票配置排除 API 将节点添加到投票配置排除列表中。例如:

# Add node to voting configuration exclusions list and wait for the system
# to auto-reconfigure the node out of the voting configuration up to the
# default timeout of 30 seconds
POST /_cluster/voting_config_exclusions?node_names=node_name

# Add node to voting configuration exclusions list and wait for
# auto-reconfiguration up to one minute
POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m

应通过名称使用?node_names查询参数,或通过其持久节点ID使用?node_ids查询参数,指定要添加到排除列表的节点。如果对投票配置排除API的调用失败,您可以安全地重试。只有成功的响应才能保证节点实际上已从投票配置中移除,并且不会被重新纳入。如果选定的主节点被排除在投票配置之外,那么如果有其他符合主节点资格的节点仍在投票配置中,它将放弃主节点资格给该节点。

尽管投票配置排除API在将双节点集群缩减为单节点集群时最为有用,但它也可以用于同时移除多个符合主节点资格的节点。将多个节点添加到排除列表中,系统会尝试自动重新配置这些节点,使其从投票配置中移除,从而允许在保持集群可用的情况下安全地关闭它们。在上述示例中,将一个拥有七个主节点的集群缩减为仅拥有三个主节点,您可以将四个节点添加到排除列表中,等待确认,然后同时关闭它们。

投票排除仅在短时间内从集群中移除至少一半的主节点时才需要。移除非主节点或移除少于一半的主节点时不需要投票排除。

为节点添加排除项会在投票配置排除列表中为此节点创建一个条目,系统会自动尝试重新配置投票配置以移除该节点,并防止其在移除后返回投票配置。当前的排除列表存储在集群状态中,可以通过以下方式进行检查:

GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions

此列表的大小受 cluster.max_voting_config_exclusions 设置的限制,默认值为 10。请参阅 发现和集群形成设置。由于投票配置排除是持久且数量有限的,因此必须进行清理。通常在执行某些集群维护时会添加排除项,并且在维护完成后应清理排除项。在正常操作中,集群不应有投票配置排除。

如果一个节点因为要永久关闭而从投票配置中被排除,那么在它关闭并从集群中移除后,可以移除其排除状态。如果排除是由于错误创建的,或者只是暂时需要,也可以通过指定?wait_for_removal=false来清除排除状态。

# Wait for all the nodes with voting configuration exclusions to be removed from
# the cluster and then remove all the exclusions, allowing any node to return to
# the voting configuration in the future.
DELETE /_cluster/voting_config_exclusions

# Immediately remove all the voting configuration exclusions, allowing any node
# to return to the voting configuration in the future.
DELETE /_cluster/voting_config_exclusions?wait_for_removal=false