正在加载

添加和移除 Elasticsearch 节点

自管理

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

如果您运行的是 Elasticsearch 的单个实例,则您拥有一个单节点集群。 所有主分片都驻留在单个节点上。无法分配任何副本分片,因此集群状态保持为黄色。 该集群功能齐全,但在发生故障时存在数据丢失的风险。

A cluster with one node and three primary shards

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

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

A cluster with three nodes
提示

请参阅以下页面,以了解有关如何在不同环境中向集群添加节点的更多信息

您可以在本地计算机上注册其他节点,以试验具有多个节点的 Elasticsearch 集群的行为方式。

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

提示

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

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

  1. 使用文本编辑器,更新elasticsearch.yml中的 cluster.name 以匹配集群中的其他节点。

    注意

    如果未更新此值,并且您尝试加入现有集群,则连接将失败,并显示以下错误

    handshake failed: remote cluster name [cluster-to-join] does not match local cluster name [current-cluster-name]
    
  2. 在 Elasticsearch 正在运行的单独终端中,导航到您安装 Elasticsearch 的目录,然后运行 elasticsearch-create-enrollment-token 工具,为您的新节点生成注册令牌。

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

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

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

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

    bin\elasticsearch --enrollment-token <enrollment-token>
    

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

    config\certs
    

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

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

提示

如果您使用RPMDebian 包安装了新的 Elasticsearch 节点,则可以将注册令牌传递给elasticsearch-reconfigure-node工具以简化配置过程。

随着节点的添加或移除,Elasticsearch 通过自动更新集群的投票配置来维持最佳的容错级别,该配置是主节点候选节点的集合,在做出诸如选举新主节点或提交新集群状态之类的决策时,会对其响应进行计数。

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

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

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

移除主节点候选节点时,重要的是不要一次移除太多。 例如,如果当前有七个主节点候选节点,并且您希望将其减少到三个,则不可能简单地一次停止四个节点:这样做只会留下三个节点,这少于投票配置的一半,这意味着集群无法采取任何进一步的措施。

更准确地说,如果您同时关闭一半或更多的主节点候选节点,则集群通常会变得不可用。 如果发生这种情况,您可以重新启动已移除的节点,使集群恢复联机。

只要集群中至少有三个主节点候选节点,通常最好一次移除一个节点,并留出足够的时间让集群自动调整投票配置并将容错级别调整为新的节点集。

如果只剩下两个主节点候选节点,则无法安全地移除任何一个节点,因为可靠地取得进展需要这两个节点。 要移除其中一个节点,您必须首先通知 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
© . All rights reserved.