https://www.elastic.co/cn/blog/a-new-era-for-cluster-coordination-in-elasticsearch
[popexizhi: 7.0 之后废弃里
当前跨主机配置:
# 配置所有用来组建集群的机器的IP地址
discovery.zen.ping.unicast.hosts: ["192.168.1.20:9300", "192.168.1.21:9300"]
cluster.initial_master_nodes:
- node-120
- node-121
]
[popexizhi: 7.0 之后废弃里
discovery.zen.minimum_master_nodes
设置 ,使用 cluster.initial_master_nodes
设置当前跨主机配置:
# 配置所有用来组建集群的机器的IP地址
discovery.zen.ping.unicast.hosts: ["192.168.1.20:9300", "192.168.1.21:9300"]
cluster.initial_master_nodes:
- node-120
- node-121
演进还是根本性革新?
Elasticsearch 6.x 及之前的版本使用了一个称为 Zen Discovery 的集群协调子系统。这个子系统经过多年的进化和完善,能够成功地为大大小小的集群提供支持。不过,我们想做出一些改进,这需要对子系统的运行方式做出一些根本性的改变。
Zen Discovery 允许用户通过使用
discovery.zen.minimum_master_nodes
设置来决定多少个符合主节点条件的节点可以形成法定数量。在每个节点上一定要正确配置此项设置,并在集群动态扩展时也正确地更新它,这一点至关重要。系统无法检测到用户是否错误配置了此项设置,而且在实践当中,在添加或删除节点后很容易忘记调整此项设置。因此,Zen Discovery 试图通过在每次主节点选举过程中等待几秒来防止出现这种错误配置,并且对其他的超时机制通常也十分保守。这意味着,如果选举的主节点失败,在选择替代节点之前,集群至少在几秒钟内是不可用的。如果集群无法选举出一个主节点,则有时会很难了解是什么原因。
在 Elasticsearch 7.0 中,我们重新设计并重建了集群协调子系统:
- 移除了
minimum_master_nodes
设置,让 Elasticsearch 自己选择可以形成法定数量的节点。 - 典型的主节点选举现在只需很短时间就能完成。
- 集群的扩充和缩减变得更加安全和简单,并且大幅降低了因系统配置不当而可能造成数据丢失的风险。
- 节点状态记录比以往清晰很多,有助于诊断它们不能加入集群的原因,或者为何不能选举出主节点。
随着节点的添加或删除,Elasticsearch 会自动更新集群的选举配置,以维护最佳的容错级别。选举配置是一组符合主节点条件的节点,在做出决策时,它们具有投票权。通常,选举配置包含集群中所有符合主节点条件的节点。法定数量就是指选举配置中的多数节点:所有集群状态更新都需要选举配置中超过半数的节点同意。由于选举配置以及法定数量都由系统管理,因此,即使添加或删除了节点,也可以避免任何可能导致数据丢失的错误配置。
从 7.0 开始,如果一个节点无法发现主节点,并且本身也无法赢得选举,Elasticsearch 将会定期记录警告消息,详尽描述当前的状态,以帮助诊断许多常见的问题。
另外,Zen Discovery 以前有一个非常罕见的故障模式(在 Elasticsearch 弹性状态页中描述为“Repeated network partitions can cause cluster state updates to be lost”(重复的网络分区可能导致集群状态更新丢失)),现在这个模式已不复存在。这个问题项现在已标记为已解决。
如何使用?
如果您完全使用默认配置启动新安装的 Elasticsearch 节点,它们会自动查找在同一主机中运行的其他节点,并在几秒钟内形成一个集群。如果您在同一个主机中启动更多节点,则默认情况下它们也会发现并加入这个集群。因此,在 Elasticsearch 7.0 版本中启动多节点开发集群与在之前版本一样简单。
这种全自动集群形成机制在单台主机中可以很好地运行,但在生产或其他分布式环境中使用还显得不够强健。对于这类环境,该机制的风险在于:各节点可能无法及时发现彼此,进而可能形成两个或多个独立的集群。从版本 7.0 开始,如果您要启动一个全新的集群,并在多台主机上都有节点,则必须指定该集群在初次选举中应使用的一组符合主节点条件的节点作为选举配置。这被称为集群引导,只在第一次形成集群时需要。已经加入集群的节点会将选举配置存储在它们的数据文件夹中,并在重启后重复使用这些配置,而将要加入现有集群的全新节点可以从集群选举的主节点接收该信息。
您可以为
cluster.initial_master_nodes
设置指定一组符合主节点条件的初始节点的主机名称或 IP 地址,以此来引导集群。您可以在命令行,或在一个或多个符合主节点条件的节点的 elasticsearch.yml
文件中提供此设置。此外,您还需要配置发现子系统,以便节点知道如何发现彼此。
如果没有设置
initial_master_nodes
,则在启动全新节点时会尝试发现现有的集群。如果节点找不到可以加入的集群,则会定期记录一条警告消息,指明master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster,
and [cluster.initial_master_nodes] is empty on this node
在向集群添加新的符合主节点条件的节点时,不再需要任何特殊的仪式。只需将新节点配置为发现现有集群,再启动它们即可。在有新节点加入时,集群会安全地自动调整其选举配置。只要不同时停止一半或更多符合主节点条件的节点,即使移除节点也是安全的。如果您需要停止一半或更多符合主节点条件的节点,或者您有更复杂的扩展或编排需求,可以使用更有针对性的扩展程序,使用一个 API 来直接调整选举配置。
没有评论:
发表评论