集群引导编辑

首次启动 Elasticsearch 集群需要在集群中的一个或多个主节点上明确定义初始的主节点集。这被称为集群引导。这仅在集群首次启动时需要。新启动的节点加入正在运行的集群时,会从集群的选举出来的主节点获取此信息。

初始的主节点集在cluster.initial_master_nodes 设置中定义。这应该设置为一个列表,其中包含每个主节点的以下一项:

  • 节点的节点名称
  • 如果未设置node.name,则为节点的主机名,因为node.name 默认设置为节点的主机名。您必须使用完全限定主机名或裸主机名取决于您的系统配置
  • 如果无法使用节点的node.name,则为节点的传输发布地址的 IP 地址。这通常是network.host 解析到的 IP 地址,但可以覆盖
  • 如果无法使用节点的node.name 并且多个节点共享同一个 IP 地址,则为节点的发布地址的 IP 地址和端口,格式为IP:PORT

集群形成后,从每个节点的配置中删除cluster.initial_master_nodes 设置。它不应该为非主节点、加入现有集群的主节点或重新启动的节点设置。

如果您在集群形成后保留cluster.initial_master_nodes,那么将来可能会出现错误配置,导致在现有集群旁边引导新的集群。可能无法从这种情况中恢复,而不会丢失数据。

创建新集群的最简单方法是选择一个主节点,它将自身引导到单节点集群中,然后所有其他节点将加入该集群。这种简单的方法在其他主节点加入集群之前,对故障没有弹性。例如,如果您有一个主节点,其节点名称master-a,那么将其配置如下(从所有其他节点的配置中省略cluster.initial_master_nodes):

cluster.initial_master_nodes: master-a

对于容错集群引导,请使用所有主节点。例如,如果您的集群有 3 个主节点,其节点名称master-amaster-bmaster-c,那么将它们全部配置如下:

cluster.initial_master_nodes:
  - master-a
  - master-b
  - master-c

您必须在设置cluster.initial_master_nodes 的每个节点上将其设置为相同的节点列表,以确保在引导过程中只形成一个集群。如果cluster.initial_master_nodes 在设置它的节点之间不同,那么您可能会引导多个集群。通常无法从这种情况中恢复,而不会丢失数据。

选择集群名称编辑

cluster.name 设置使您能够创建彼此分离的多个集群。节点在首次相互连接时会验证它们是否同意其集群名称,Elasticsearch 仅会从所有具有相同集群名称的节点中形成集群。集群名称的默认值为elasticsearch,但建议将其更改为反映集群的逻辑名称。

开发模式下的自动引导编辑

默认情况下,每个节点在首次启动时都会自动引导到单节点集群中。如果配置了以下任何设置,则不会进行自动引导:

  • discovery.seed_providers
  • discovery.seed_hosts
  • cluster.initial_master_nodes

要将新节点添加到现有集群中,请配置discovery.seed_hosts 或其他相关的发现设置,以便新节点可以发现集群中现有的主节点。要引导新的多节点集群,请配置cluster.initial_master_nodes(如集群引导部分所述)以及discovery.seed_hosts 或其他相关的发现设置。