ES集群状态发布流程

简介: 简述ES集群状态发布的过程,以及对超时的处理。

publishing the cluster state

master节点负责变更集群状态信息,一次变更多个操作(batch),发布到所有节点。

发布过程

  1. master 发布新的集群状态信息到所有节点。
  2. 所有节点回复 acknowledgement ,但不应用。
  3. master 收到大多数 master-eligible 的 acknowledgement后,意味着集群状态信息提交成功(committed)。
  4. master发布 应用集群信息 的消息。
  5. 所有节点 应用 集群信息,并再次回复 acknowledgement。

上述过程,从第一步开始,到第五步,必须在 30s 内完成。这由参数 cluster.publish.timeout 控制,默认30s 。


如果30s后,集群状态还未完成committed(第三步),则集群状态信息会被拒绝,master节点认为自己失败(failed),让出master角色,开始选举新master。


如果30s内,集群状态完成committed,master节点认为变更成功。master会发布"应用"消息,继续等待所有节点的再次 acknowledgement 或 timeout(30s)。


如果有节点 timeout,它会被master认为是 lagging(滞后)的。master 继续等待 lagging 节点的第二个acknowledgement,等待时间由参数 cluster.follower_lag.timeout 控制,默认90s 。如果90s还没收到,lagging 节点会被认为 failed,被master移除集群。


集群状态一般都基于previous集群状态信息进行增量更新,如果有节点没有previous集群状态信息,master会给它推送全量的集群状态信息。

cluster fault detection

  • follower checks:master 定期检查其他节点,确定他们都是连接的,健康的。
  • leader checks:其他节点 定期检查 master,确定它是健康的。

上述checks,可偶尔失败、timeout。如果连续失败,则节点会被认为 faulty 。非master节点faulty,master将其remove出集群。master节点faulty,执行检测的节点启动discovery流程,寻找或选举新master。连续次数,通过参数

  • cluster.fault_detection.leader_check.retry_count: 3
  • cluster.fault_detection.follower_check.retry_count: 3

如果master检测到节点断开连接,该情况被认为 immediate failure,忽略timeout、retry设置,直接remove该节点。

如果节点检测到master断开连接,该情况被认为 immediate failure,忽略timeout、retry设置,直接启动discovery流程,寻找或选举新master。

discovery and cluster formation settings

expert settings

cluster.election.duration

每次选举的时间,超过该时间后,认为选举失败,重新选举。默认500ms。

cluster.follower_lag.timeout

master等待lagging节点第二次acknowledgement的时间,默认90s

cluster.join.timeout

节点发送 join cluster请求后,等待的时间,超过后它认为请求失败,重发。默认60s

cluster.publish.timeout

master节点等待其他节点应用集群信息,并返回第二次acknowledgement的时间,默认30s

总结

  • 网络连接检查、健康检查:持续30s 失败,faulty。
  • 断开连接:立马 faulty。
  • 非master节点应用集群状态信息:30s timeout 后变 lagging,120s(30+90) 后被 remove 出集群
  • master发布集群状态:30s 未 committed,自动放弃master,重新选举
相关文章
|
7月前
OpenKruise金丝雀发布过程中,创建出了canary service但没有canary deploy,新老实例均属于同一个deploy,类似多批次发布
OpenKruise金丝雀发布过程中,创建出了canary service但没有canary deploy,新老实例均属于同一个deploy,类似多批次发布
49 1
|
7月前
|
存储 缓存 JavaScript
构建离线应用:Apollo与本地状态管理
构建离线应用:Apollo与本地状态管理
|
4月前
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
【Azure Logic App】在逻辑应用中开启或关闭一个工作流是否会对其它工作流产生影响呢?
|
5月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之依赖脚本实际运行成功了,但其状态却显示为未运行,从而导致下游脚本没有运行,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
7月前
|
Ruby Perl
工程支持xcframework,检查pod版本及更新pod
工程支持xcframework,检查pod版本及更新pod
70 0
|
Kubernetes 网络协议 容器
k8s搭建集群报错汇总—202302【更新】
k8s搭建集群报错汇总—202302【更新】
142 0
|
存储 Kubernetes Cloud Native
有状态的应用如何部署 1?
有状态的应用如何部署 1?
有状态的应用如何部署 1?
|
Kubernetes 调度 容器
二进制 k8s 集群下线 worker 组件流程分析和实践
二进制 k8s 集群下线 worker 组件流程分析和实践
108 0
|
JSON Kubernetes 应用服务中间件
二进制 k8s 集群下线 master 组件流程分析和实践
二进制 k8s 集群下线 master 组件流程分析和实践
133 0