发现(discovery) 和集群形成设置

发现和集群形成 受以下几个设置的影响:

discovery.seed_hosts

提供集群中符合主节点条件的节点的地址列表。 也可以是包含以逗号分隔的地址的单个字符串。 单个地址的格式是 host:port 或者 hosthost可以是由 DNS 解析的主机名、IPv4 地址或 IPv6 地址。 IPv6 地址必须用中括号[]括起来。 如果一个主机名通过 DNS 解析成多个地址,Elasticsearch 会使用所有的地址。 DNS查找依赖于 JVM DNS 缓存。 如果未指定 port,则通过顺序检查以下设置来确定端口:

  1. transport.profiles.default.port
  2. transport.port

如果两个都没有设置,则默认端口为 9300discovery.seed_hosts 的默认值为 ["127.0.0.1", "[::1]"]。 (参考 discovery.seed_hosts)。

该设置以前叫 discovery.zen.ping.unicast.hosts。这个旧名称已被弃用,但为了保持向后兼容性,仍可以继续使用。在未来版本中将移除对旧名称的支持。

discovery.seed_providers
指定使用哪种类型的 种子主机提供程序(seed hosts provider) 来获取用于启动 发现(discovery) 过程的种子节点的地址。 默认情况下,由 基于设置的种子主机提供程序(settings-based seed hosts provider)discovery.seed_hosts 设置中获取种子节点地址。 这个设置以前叫 discovery.zen.hosts_provider。这个旧名称已被弃用,但为了保持向后兼容性,仍可以继续使用。在未来版本中将移除对旧名称的支持。
discovery.type
指定 Elasticsearch 是否应该组建成一个多节点的集群。 默认情况下,Elasticsearch 会在组成集群时发现其他节点,并允许其他节点稍后加入集群。 如果 discovery.type 设置为 single-node,Elasticsearch 将组建一个单节点集群,并取消cluster.publish.timeoutcluster.join.timeout 设置的超时时间。 有关何时可以使用此设置的更多信息,请参考 Single-node discovery
cluster.initial_master_nodes
在全新的集群中设置初始的符合主节点条件的节点集。 默认情况下,该列表为空,这意味着该节点希望加入一个已经启动的集群。 参考 cluster.initial_master_nodes

专家级设置 (expert settings)

发现和集群的组建也受以下专家级(expert-level)设置的影响,尽管我们不建议更改这些设置的默认值。

如果你调整了这些设置,集群可能无法正确的组建,或者可能变得不稳定或不能容忍某些故障。

discovery.cluster_formation_warning_timeout
设置在记录集群未组建成功的警告之前,节点尝试组建集群的时间。 默认为 10s。 如果在 discovery.cluster_formation_warning_timeout 时间过去后仍未组建集群,则该节点将记录一条警告消息,该消息以短语master not discovered开头,描述发现过程的当前状态。
discovery.find_peers_interval
设置节点在尝试另一轮发现前等待的时间。默认为 1s
discovery.probe.connect_timeout
设置尝试连接到每个地址时要等待的时间。默认为 3s
discovery.probe.handshake_timeout
设置尝试通过握手识别远程节点时要等待的时间。默认为 1s
discovery.request_peers_timeout
设置节点在再次请求其 对等(peers) 节点后等待多长时间,然后将请求视为失败。默认为 3s
discovery.seed_resolver.max_concurrent_resolvers
指定在解析种子节点的地址时要执行多少个并发 DNS 查找。默认为 10。 这个设置以前叫 discovery.zen.ping.unicast.concurrent_connects。这个旧名称已被弃用,但为了保持向后兼容性,仍可以继续使用。在未来版本中将移除对旧名称的支持。
discovery.seed_resolver.timeout
指定在解析种子节点的地址时,每次 DNS 查找等待的时间。默认为5s。 这个设置以前叫 discovery.zen.ping.unicast.hosts.resolve_timeout。这个旧名称已被弃用,但为了保持向后兼容性,仍可以继续使用。在未来版本中将移除对旧名称的支持。
cluster.auto_shrink_voting_configuration
控制 选举设置 是否自动删除离开的节点,只要它仍然包含至少 3 个节点。默认为 true。 如果设置为false,选举设置永远不会自动收缩,你必须使用 选举设置排除 API 手动删除脱离的节点。
cluster.election.back_off_time
设置每次选举失败时选举前等待时间上限的增量。请注意,这是线性(linear) 回退(backoff)。默认为 100ms。更改默认设置可能会导致集群无法选举主节点。
cluster.election.duration
设置在节点认为选举失败并安排重试之前,允许每次选举持续的时间。默认为 500ms。更改默认设置可能会导致集群无法选举主节点。
cluster.election.initial_timeout
设置节点最初等待时间的上限,或者在选举的主节点失效后,在尝试第一次选举之前等待时间的上限。默认为 100ms。更改默认设置可能会导致集群无法选举主节点。
cluster.election.max_timeout
设置节点在尝试第一次选举之前等待时间的最大上限,以便持续很长时间的网络分区不会导致过度稀疏的选举。默认为 10s。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.follower_check.interval
设置选举出的主节点在从节点对集群中其他节点检查过程中等待的时间。默认为 1s。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.follower_check.timeout
设置选举出的主节点在认为从节点检查失败之前等待响应的时间。默认为 10s。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.follower_check.retry_count
设置每个节点必须连续发生多少次从节点检查失败,然后选举出的主节点才会认为该节点出现故障并将其从集群中删除。默认为 3。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.leader_check.interval
设置每个节点在选举出的主节点检查之间等待的时间。默认为 1s。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.leader_check.timeout
设置每个节点在被视为失效之前等待来自选举出的主节点的 leader 检查响应的时间。默认为 10s。更改默认设置可能会导致集群无法选举主节点。
cluster.fault_detection.leader_check.retry_count
设置在节点认为选举出的主节点有故障并尝试查找或选择新的主节点之前,必须发生多少次连续的 leader 检查 失败。默认为 3。更改默认设置可能会导致集群无法选举主节点。
cluster.follower_lag.timeout
设置主节点等待从滞后节点接收集群状态更新确认的时间。默认为 90s。如果一个节点在这段时间内没有成功更新集群状态,则该节点被认为已经失效并从集群中删除。参考 发布集群状态
cluster.join.timeout
设置节点在发送加入集群的请求后,在认为请求失败并重试之前等待的时间,除非discovery.type 被设置为 single-node。默认为 60s
cluster.max_voting_config_exclusions
设置无论在任何时候的投票配置排除的数量限制。(原文: Sets a limit on the number of voting configuration exclusions at any one time.) 默认为 10。参考 添加和移除节点
cluster.publish.info_timeout
设置主节点等待 每个集群状态更新 完全发布到所有节点的时间,然后记录一条消息,指示某些节点响应缓慢。默认为 10s
cluster.publish.timeout
设置主节点等待 每个集群状态更新 完全发布到所有节点的时间,除非discovery.type 被设置为 single-node。默认为 30s。参考 发布集群状态
cluster.no_master_block

指定当集群中没有活动的主节点时拒绝哪些操作。该设置有两个有效值:

all
拒绝集群上的所有操作(读和写操作)。这也适用于 集群状态读取或写入操作的 API ,如获取索引设置、设置映射(mapping) 和 集群状态 API。
write
(默认) 拒绝写操作。根据最后一次已知的集群配置,读取操作是成功的。这种情况可能会导致对陈旧数据的部分读取,因为该节点可能与集群的其余部分隔离。
  • cluster.no_master_block 设置不适用于 基于节点的 API(比如 集群统计,节点信息,以及节点统计 API)。 对这些 API 的请求不会被阻止,可以在任何可用的节点上运行。
  • 要使集群完全运行,它必须有一个活动的主节点。

这个设置取代了之前版本中的 discovery.zen.no_master_block 设置。且 discovery.zen.no_master_block 已被忽略。