用Consul实现选主

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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实现的优雅。

目录
相关文章
|
存储 关系型数据库 数据库
用Patroni配置PostgreSQL高可用集群
Patroni是Zalando开发的数据库高可用管理软件,用于编排和自动化PostgreSQL集群的管理过程。Patroni 需要一系列其他组件的支持,通过利用第三方分布式一致性软件,组建并实现数据库高可用方案。
用Patroni配置PostgreSQL高可用集群
|
SQL 前端开发 搜索推荐
【Element-UI】实现动态树、数据表格及分页效果
在现代软件开发中,动态树、数据表格以及分页效果成为了许多应用的核心需求。随着业务规模和复杂性的增加,我们往往需要展示大量的层级结构数据,并且实现交互性强且高效的操作。 动态树提供了一种组织结构清晰、可伸缩的展示方式,使用户可以方便地查看和操作树节点。数据表格则是以表格形式呈现数据,在其中用户可以进行排序、筛选、编辑等操作。 而分页效果则能够将大量数据分割成易于管理和浏览的一页或一页的内容。这三种功能的结合,不仅使得我们能够更好地处理庞大的数据集合,同时也使得用户能够快速定位所需信息。 本文将介绍如何使用现代前端技术实现动态树、数据表格及分页
|
11月前
|
监控 网络协议
tcpdump 常用命令
【10月更文挑战第31天】本文介绍了工作中常用的`tcpdump`命令,通过实例展示了如何使用`tcpdump 'port 10000' -i eth0 -S`监控TCP连接的三次握手和四次挥手过程。具体包括服务端和客户端的交互细节,以及每个步骤的详细解释。
306 11
|
11月前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
存储 前端开发 JavaScript
elementUI Tree 树形控件单选实现
【6月更文挑战第3天】Element UI 的树形控件(el-tree)默认不支持单选,但可以通过监听节点点击事件并手动更新选中状态实现。以下是一个简单的示例,展示如何创建单选树: ```html &
584 0
|
前端开发 关系型数据库 定位技术
用Ganos低代码实现免切片遥感影像浏览(一)
本文介绍了使用PolarDB-PG数据库配合Ganos时空数据库引擎,不借助第三方工具仅利用SQL语句快速管理与展示遥感影像数据的一种方法。Ganos共提供两种影像免切浏览的方法,一种使用窗口范围获取影像数据展示,另一种通过固定瓦片范围获取影像数据展示,本文详细介绍第一种方法并提供了前后端实操代码帮助用户可以快速理解Ganos Raster的使用细节。
|
XML 缓存 Java
Spring高手之路5——彻底掌握Bean的生命周期
在这篇文章中,我们将深入研究Spring Framework的核心部分——Spring Bean的生命周期。我们将探讨初始化和销毁方法,了解如何使用@PostConstruct和@PreDestroy注解,以及实现InitializingBean和DisposableBean接口。我们还将详细讨论原型Bean的生命周期,并最后总结Spring中控制Bean生命周期的三种方式。无论你是Spring新手,还是想进一步提高你的Spring技能,这篇文章都能给你提供有价值的 insights。
2488 3
Spring高手之路5——彻底掌握Bean的生命周期
|
Java 关系型数据库 数据库
|
虚拟化 Docker 容器
安装docker后,VMware网络无法访问了,VMware重置网络设置
1.vmware虚拟机处于关闭状态 2.vmware程序—>edit(编辑)--》左下角 “Restore Default”恢复默认设置         【恢复】完成后     开启虚拟机试试吧,你的虚拟机可以正常上网了(我的虚拟机为桥接方式,win10_x64   dh...
2818 0