在集群中添加和删除节点
当您启动Elasticsearch实例时,您正在启动一个节点。Elasticsearch集群是一组具有相同cluster.name属性的节点。当节点加入或离开集群时,集群会自动重新组织自己,以便在可用节点之间均匀地分布数据。
如果您正在运行单个Elasticsearch实例,则您拥有一个节点集群。所有主分片驻留在单个节点上。不能分配复制分片,因此集群状态保持为黄色。集群功能完整,但在发生故障时存在数据丢失的风险。
通过增加集群内的节点,可以提高集群的容量和可靠性。默认情况下,节点也是数据节点,也可以被选为控制集群的主节点。您还可以为特定目配置新节点,例如处理接收请求。
当您向集群添加更多节点时,它会自动分配副本分片。当所有主分片和副本分片都处于活动状态时,集群状态变为绿色。
您可以在本地机器上运行多个节点,以试验由多个节点组成的Elasticsearch集群的行为。要将一个节点添加到本地机器上运行的集群中:
- 设置一个新的 Elasticsearch 实例。
- 使用
elasticsearch.yml
中的cluster.name
设置指定集群的名称。例如,要将节点添加到logging-prod
集群,请将行cluster.name: "logging-prod"
添加到elasticsearch.ym
l。 - 启动 Elasticsearch。节点自动发现并加入指定的集群。
要将节点添加到运行在多台机器的集群上,您必须设置discovery.seed_hosts
,以至于新的节点可以发现集群的其他信息。
符合主节点的节点
在添加或删除节点时,Elasticsearch通过自动更新集群的投票配置来保持最佳容错级别,投票配置是一组符合主节点条件的节点,在做出选择新主节点或提交新集群状态等决策时,将计算这些节点的响应。
建议在集群中使用少量固定数量的符合主节点条件的节点,并通过只添加和删除不符合主节点条件的节点来向上或向下扩展集群。然而,在某些情况下,可能需要在集群中添加或删除一些符合主节点条件的节点。
添加符合主节点的节点
如果你希望向集群中添加一些节点,只需要配置新的节点来发现已存在的集群并且启动该节点。ElasticSearch增加新的节点后会将新的节点增加到投票配置中。
在选举主节点或加入现有集群时,节点向主节点发送加入请求,以便正式加入集群。
移除符合主节点的节点
删除符合主节点的节点时,不要同时删除太多节点,这一点很重要。例如,如果当前有7个符合 master 资格的节点,而您希望将其减少到三个,则不可能简单地一次停止四个节点:这样做只会留下三个节点,不到一半投票配置,这意味着集群不能采取任何进一步的行动。
更准确地说,如果您同时关闭一半或更多符合主节点条件的节点,则集群通常将变得不可用。如果发生这种情况,您可以通过再次启动已删除的节点来使集群重新联机。
一般来说最好是一次性删除节点,允许足够的时间集群自动调节投票配置和容错级别适应新的节点。
如果只剩下符合主节点的节点,那么这两个节点都不能删除。要删除这些节点之一,您必须提前通知ElasticSearch被删除节点不应该是投票配置的一部分,而是将投票配置赋予给另个一个节点。然而您也可以使用投票配置排除API将节点排除到投票配置之外,别排除到投票配置列表之外的节点仍然可以继续正常工作,只不过不需要他参与主节点的选举。以下是排除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
curl -X POST "localhost:9200/_cluster/voting_config_exclusions?node_names=node_name&pretty"
# Add node to voting configuration exclusions list and wait for
# auto-reconfiguration up to one minute
curl -X POST "localhost:9200/_cluster/voting_config_exclusions?node_names=node_name&timeout=1m&pretty"
应该添加到排除列表的节点通过使用?node_name=node_name
查询参数来指定排除的节点名。或者通过使用?node_ids
查询参数来指定排除的节点的id
。该API也可以将当前的主节点排除,如果当前的主节点被排除,那么他将让位给仍在投票配置中的另一个符合主节点的节点。
尽管投票配置排除 API 对于将两节点集群缩减为单节点集群最有用,但也可以使用它同时删除多个符合主节点条件的节点。将多个节点添加到排除列表会使系统尝试自动重新配置所有这些节点,使其脱离投票配置,从而在保持集群可用的同时安全关闭它们。在上面描述的示例中,将一个七主节点集群缩小到只有三个主节点,您可以将四个节点添加到排除列表中,等待确认,然后同时关闭它们。
提示:只有在短时间内从集群中删除至少一半符合主条件的节点时,才需要投票排除。当删除不合格的主节点时不需要它们,当删除少于一半的主合格节点时也不需要它们。
当前的排除列表存储在集群状态中,可以按如下方式检查:
curl -X GET "localhost:9200/_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions&pretty"
此列表的大小受 cluster.max_voting_config_exclusions
设置的限制,默认为 10
。请参阅发现和集群形成设置。由于投票配置排除项是持久的且数量有限,因此必须对其进行清理。通常在对集群进行一些维护时会添加一个排除项,并且在维护完成时应该清除这些排除项。集群在正常运行时不应具有投票配置排除。
如果某个节点因为要永久关闭而被排除在投票配置之外,那么在将其关闭并从集群中移除后,就可以将其排除在外。