用Consul实现选主

简介: Consul实现leader election的过程是这样的过程(这个过程主要翻译自[Consul的文档](https://www.consul.io/docs/guides/leader-election.html))

Consul实现leader election的过程是这样的过程(这个过程主要翻译自Consul的文档):

  • 1.所有客户端都竞争操作一个key,比如这个key是service//leader。
  • 2.所有客户端创建一个session,创建成功后每个客户端都会获得一个sessionid。
  • 3.所有想成为leader的客户端都试图去更新这个key,并且所有客户端都acquire=这个请求参数。acquire是consul在kv存储的api上扩展的功能。acquire的意思是获取更新这个key的锁,session是我们步骤2中每个客户端各自创建的session。如果请求返回true,则这个客户端获得了锁,并且成功的更新了这个key,称为了leader。如果返回false,则其他客户端获得了锁。
  • 4.如果没有获得锁,则watch这个key,如果这个发生变化,并且这个key中session信息为空,则所有当前没有客户端获得锁,重复步骤3获取锁。

比较Zookeeper和Consul实现leader election的方式,我们可以看出,Zookeeper提供sequence这种特性,而Consul本身就提供了锁的特性。我们可以基于sequence的特性,分别构建分布式锁和选主(2者本质是相同的)。Consul利用锁机制实现选主。

Zookeeper的选主是利用了sequence的特性保证同时连接上来的多个客户端都分配一个不重复序号。大家按序号的大小,从小到大依次称为leader。因为每个客户端watch的是比自己序号小的那个节点,当leader失效时,只有一个备选会收到通知。也就是不会出现群惊现象。

Consul保证同时连接上来的多个客户端只有一个可以获得锁,其他客户端不会获得锁。但当前leader失效时,所有其他的客户端都会收到通知,再一起来竞争锁。从这一点来说没有Zookeeper实现的优雅。

目录
相关文章
|
1月前
|
Web App开发 数据采集 人工智能
|
存储 Kubernetes Cloud Native
一文读懂容器存储接口 CSI
在《一文读懂 K8s 持久化存储流程》一文我们重点介绍了 K8s 内部的存储流程,以及 PV、PVC、StorageClass、Kubelet 等之间的调用关系。接下来本文将将重点放在 CSI(Container Storage Interface)容器存储接口上,探究什么是 CSI 及其内部工作原理。
一文读懂容器存储接口 CSI
|
Java Unix Linux
什么是阻塞IO和非阻塞IO
什么是阻塞IO和非阻塞IO
775 3
|
2月前
|
人工智能 测试技术 API
高质量测试 Skill 编写手册 -- 渐进式披露
渐进式披露是AI技能设计的核心原则:不一次性堆砌全部知识,而是按需分层加载——先给元数据(名称/描述),再依任务加载指令(SKILL.md),最后按需读取细节(references/脚本),显著降低上下文污染、提升准确率。
|
人工智能 负载均衡 监控
使用 Go 和 Gin 实现高可用负载均衡代理服务器
本文基于Go语言和Gin框架,实现了一个企业级负载均衡代理服务器,支持动态路由、健康检查、会话保持等功能。具备高可用性与高性能,单节点支持100k+ QPS,延迟达亚毫秒级,并提供完整的压力测试方案与优化建议。
421 7
|
Linux 调度
linux中进程与cpu核的绑定
linux中进程与cpu核的绑定
766 0
|
Linux Shell 开发工具
Linux tail & cat & grep 命令详解
Linux tail & cat & grep 命令详解
1636 0
|
监控 Shell Linux
清理旧的 core dump 文件
【10月更文挑战第1天】
1599 2
|
存储 算法 Unix
操作系统(13)-----文件管理3
操作系统(13)-----文件管理
1461 0
操作系统(13)-----文件管理3

热门文章

最新文章