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

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

在这里插入图片描述

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

当集群中有更多节点时,会自动分配replica shard。当所有主分片和复制分片都处于活动状态时,集群状态变为绿色。

A cluster with three nodes

可以在本地机器上运行多个节点,以试验由多个节点组成的Elasticsearch集群的行为。要将一个节点添加到本地机器上运行的集群中:

  1. 建立一个新的Elasticsearch实例。
  2. 使用elasticsearch.yml中的cluster.name设置来指定集群的名称。例如,要向logging-prod集群添加一个节点,将cluster.name: "logging-prod"行添加到elasticsearch.yml
  3. 启动 Elasticsearch。 节点自动发现并加入指定的集群。

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

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

master-eligible nodes

当添加或删除节点时,Elasticsearch通过自动更新集群的*“投票配置”*来保持最佳容错级别,它是master-eligible nodes的集合,在做出选择新主节点或提交新集群状态等决策时,计算它们的响应。

建议在集群中拥有少量且固定数量的master-eligible nodes,并通过仅添加和删除 master-ineligible nodes来扩展和缩小集群。 然而,在某些情况下,可能需要在集群中添加或删除一master-eligible nodes。

添加master-eligible节点

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

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

删除master-eligible节点

删除master-eligible节点时,不要同时删除太多节点,这一点很重要。 例如,如果当前有七个master-eligible节点,而希望将其减少到三个,则不可能简单地一次停止四个节点:这样做只会留下三个节点,不到一半 投票配置,这意味着集群不能采取任何进一步的行动。

更准确地说,如果同时关闭一半或更多master-eligible节点,则集群通常将变得不可用。 如果发生这种情况,可以通过再次启动已删除的节点来使集群重新联机。

只要集群中至少有三个master-eligible节点,作为一般规则,最好一次删除一个节点,让集群有足够的时间自动调整投票配置,并使容错级别适应新的节点集。

如果只剩下两个master-eligible节点,那么这两个节点都不能安全地移除,因为两者都需要可靠地取得进展。要删除这些节点之一,必须首先通知 Elasticsearch 它不应成为投票配置的一部分,而应将投票权赋予另一个节点。然后,可以使排除的节点脱机,而不会阻止其他节点取得进展。添加到投票配置排除列表的节点仍然正常工作,但 Elasticsearch 尝试将其从投票配置中删除,因此不再需要其投票。重要的是,Elasticsearch 永远不会自动将投票排除列表上的节点移回投票配置。一旦排除的节点从投票配置中成功自动重新配置,关闭它是安全的,而不会影响集群的主级别可用性。可以使用投票配置排除 API 将节点添加到投票配置排除列表。例如:

# 将节点添加到投票配置排除列表,并等待系统自动重新配置节点,使其脱离投票配置,直到默认超时30秒
POST /_cluster/voting_config_exclusions?node_names=node_name

# 将节点添加到投票配置排除列表,等待自动重新配置,最长一分钟
POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m

应添加到排除列表中的节点通过使用?node_names查询参数的名称指定,或通过使用?node_IDs查询参数的持久节点ID指定。如果对投票配置排除API的调用失败,可以安全地重试。只有成功的响应才能保证节点实际上已从投票配置中删除,并且不会恢复。如果所选主节点被排除在投票配置之外,则它将让位给另一个仍在投票配置中的 master-eligible节点(如果该节点可用)。

尽管投票配置排除 API 对于将两节点集群缩减为单节点集群最有用,但也可以使用它同时删除多个master-eligible节点。 将多个节点添加到排除列表会使系统尝试自动重新配置所有这些节点,使其脱离投票配置,从而在保持集群可用的同时安全关闭它们。 在上面描述的示例中,将一个七主节点集群缩小到只有三个主节点,可以将四个节点添加到排除列表中,等待确认,然后同时关闭它们。

仅当在短时间内从集群中删除至少一半 master-eligible节点时,才需要投票排除。 删除master-ineligible 节点时不需要它们,删除少于一半的 master-eligible节点时也不需要它们。

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

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

此列表的大小受cluster.max_voting_config_excluses设置的限制,该设置默认为10。参见发现和集群形成设置。由于投票配置排除是持久的,并且数量有限,因此必须对其进行清理。通常,在集群上执行某些维护时会添加一个排除项,并且在维护完成后应清除排除项。集群在正常运行时不应具有投票配置排除。

如果某个节点由于要永久关闭而被排除在投票配置之外,则可以在该节点关闭并从集群中移除后移除其排除。如果排除项是错误创建的,或者仅通过指定?wait_for_removation=false临时需要排除项,则也可以清除排除项。

#等待所有具有投票配置排除项的节点从集群中删除,然后删除所有排除项,允许任何节点将来返回投票配置。
DELETE /_cluster/voting_config_exclusions

#立即删除所有投票配置排除项,允许任何节点在将来返回投票配置。
DELETE /_cluster/voting_config_exclusions?wait_for_removal=false
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐