Consul是什么

13 篇文章 1 订阅
订阅专栏

前言

Consul是一个基于CP的轻量级分布式高可用的系统,提供服务发现、健康检查、K-V存储、多数据中心等功能,不需要再依赖其他组件(Zk、Eureka、Etcd等)。

  • 服务发现:Consul可以提供一个服务,比如api或者MySQL之类的,其他客户端可以使用Consul发现一个指定的服务提供者,并通过DNS和HTTP应用程序可以很容易的找到所依赖的服务。
  • 健康检查:Consul客户端提供相应的健康检查接口,Consul服务端通过调用健康检查接口检测客户端是否正常
  • K-V存储:客户端可以使用Consul层级的Key/Value存储,比如动态配置,功能标记,协调,领袖选举等等
  • 多数据中心:Consul支持开箱即用的多数据中心

架构介绍

Consul Architecture

看得出一个Consul集群是由N个Server和M个Client节点组成的。

  • Client节点:使用的client模式,该模式下可以接收服务的注册请求,但是会把请求转发给Server节点,自身不做处理,并且不持久化在本地
  • Server节点:使用server模式,处理注册请求,将注册信息持久化到本地,用作故障恢复。
    • Server节点分为Leader和Follower两个身份,Leader负责监控Follower,同步注册信息给所有的Follower,一个集群中只能有一个Leader
    • Server之间通过RPC消息通信,Follower不会主动发起RPC请求,只会有Leader或选举时的Candidate主动发起
    • Follower节点接收到RPC请求后,会将请求转发给Leader节点,由Leader节点处理后进行相应的ACK,请求分为事务型和非事务型,非事务型的请求由Leader节点直接响应,事务型的请求
    • 集群一般推荐3或5个节点比较合适,因为Raft选举时,4和3、5和6的结果是一样的

Gossip是什么

从架构图中发现有一个Gossip,一个DC中涵盖了两个Gossip池,LAN池和WAN池,为什么会有Gossip,因为Consul是建立在Serf基础之上的,Gossip由Serf提供,Gossip是一个去中心化的协议。Consul中用Gossip维护节点关系,告知当前节点集群中还有哪些节点,其他节点的身份,是Follower还是Leader。

  • LAN Gossip:局域网内唯一,LAN池是用于局域网内的节点消息广播,Consul的Client和Server节点全部都在LAN池中,LAN池中的客户端可以自动发现服务器,不需要进行过多的配置,LAN池能保证快速可靠的消息传播,比如Leader选举。
  • WAN Gossip:WAN是全局唯一的,无论属于哪一个DC,所有Server应该加入到WAN中,由WAN提供信息让Server节点可以执行跨数据中心的请求。

工作原理

consol_service

  1. Producer启动之后,会向Consul注册中心发送一个POST请求,上报自己的id、name、ip、port、健康检查接口、心跳频率等信息
  2. Consul接收到Producer上报的信息之后,根据上报的心跳频率和健康检查接口对Producer进行健康检查,检验Producer是否健康
  3. Consumer启动之后,会从Consul拉取Producer的列表缓存在本地,后续的请求都会从本地选举发出,使用RestTemplate发出请求的时候,每次都会从Consul同步一下服务者信息。

Leader选举

一个DC可以有多个Server,但是只能有一个Leader,Leader基于Raft算法进行选举,在Leader选举过程中,整个集群都无法对外提供服务。

节点的身份有Follower、Candidate、Leader三种,所有的节点在初始化的时候都为Follower,节点加入到LAN Gossip池后,由Raft协议的Leader-Follower模式进行Leader选举。

Raft状态变更

  • 概念

    • Leader:集群中仅有一个,处理客户端所有的请求,遇到事务型的请求时会在本地处理后再生成同步日志,由Gossip通知到各个Follower节点进行同步
    • Follower:所有节点的初始状态,正常集群中可以有多个Follower,不处理任何请求也不发送任何请求,只响应来自Leader和Candidate的请求,当接收到客户端发来的请求时会自动将请求转发给Leader节点处理
    • Candidate:Follower超过选举器时都未收到来自Leader的心跳时,自动转换身份为Candidate,并根据Raft算法执行新一轮的Leader选举
    • Election Time(选举超时时间):每一个节点都维护着自己的选举计时器,这个计时器的值需要大于心跳间隔,Follower收到Leader的心跳请求后会重置选举计时器,如果这个计时器归零了,则将节点身份转换为Candidate,并向其他节点发送投票。设置选举计时器主要是为了防止因为网络抖动等问题而引起心跳消息丢失,不然可能一旦心跳丢失了就立刻进入选举
    • Heart time(心跳超时时间):Leader向Follower发送心跳的时间间隔
    • Term(任期):任期是一个全局递增的数字,没进行一次选举,任期数就+1,每个节点都记录该值
  • Raft算法

    Raft是一个共识算法,也就是当大多数对某个事情都赞同的情况下执行该事情,主要为解决分布式一致性的问题。Raft算法是从Paxos的理论演变而来,Raft把问题分解成领导选举、日志复制、安全和成员变化

    • 领导选举:集群中必须存在一个Leader节点
    • 日志复制:Leader节点接收并处理客户端的请求,然后将这些请求序列化成日志再同步到集群中的其他节点
    • 安全性:已经被Raft状态机记录过的数据,就不能被再次输入到Raft状态机中
  • Leader选举过程

    • 选举过程

      在节点刚开始启动时,初始状态是Follower状态。一个Follower状态的节点,只要一直收到来自Leader或者Candidate的正确RPC消息的话,将一直保持在Follower状态。Leader节点通过周期性的发送心跳请求(一般使用带有空数据的AppendEntries RPC来进行心跳)来维持着Leader节点状态。每个Follower同时还有一个选举超时(Election timeout)定时器,如果在这个定时器超时之前都没有收到来自Leader的心跳请求,那么Follower将认为当前集群中没有Leader了,将发起一次新的选举。

      发起选举时,Follower将递增它的任期号然后切换到Candidate状态。然后通过向集群中其它节点发送RequestVote RPC请求来发起一次新的选举,一个节点将保持在该任期内的Candidate状态下。

    • 选举过程中可能遇到的问题

      • 该Candidate节点收到超过半数以上集群中其它节点的投票赢得选举

        如果Candidate节点收到了集群中半数以上节点的投票,那么此Candidate节点将成为新的Leader。每个节点在一个任期中只能给一个节点投票,而且遵守“先来后到”的原则,这样就保证每个任期最多只有一个节点会赢得选举成为leader。

      • 收到任期号比当前节点任期号不一致的请求

        • 比当前节点任期号小:说明当前集群已经进入了下一轮选举,则自动拒绝收到的请求,继续保持在Candidate状态
        • 比当前节点任期号大:说明集群中已经存在了Leader,节点从Candidate切换到Follower
      • 选举后没有任何一个节点成为Leader

        本次选举未选举出Leader,则将集群中的任期号+1,再次进行选举

SpringCloud使用Consul

  1. 安装并启动Consul Server

    ./consul agent -dev
    
  2. 创建SpringCloud项目

    • 服务提供方
    server.port=7702
    spring.application.name=consul-demo
    spring.cloud.consul.host=127.0.0.1
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.health-check-path=/health
    
    @GetMapping("/health")
    public String health() {
      System.out.println("----health check----");
      return "hello consul";
    }
    
    • 服务调用方
    server.port=18090
    spring.application.name=consul-demo-client
    
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
      return new RestTemplate();
    }
    @Resource
    private RestTemplate restTemplate;
    
    @RequestMapping("/hello")
    public String hello() {
      return restTemplate.getForObject("http://consul-demo/health", String.class);
    }
    

    image-20200411225129805

    访问接口测试: http://127.0.0.1:18090/hello

Consul系列(一):介绍
xxfamly的博客
12-16 838
目录 1、Consul是什么 1.1、集群 1.2、服务器和客户端 1.3、数据中心 1.4、键值存储 2、Consul能做什么 2.1、服务注册 2.2、服务发现 2.3、健康检查 3、参考文献 1、Consul是什么 看官方网站的定义:Consul是一种服务网络的解决方案,在任何运行时平台和公有/私有云之间提供有效连接和安全的服务。Consul提供了服务注册、发现...
consul 入门
热门推荐
viewcode的专栏
06-01 7万+
1. 什么是consul? 是一个服务管理软件。 支持多数据中心下,分布式高可用的,服务发现和配置共享。 consul支持健康检查,允许存储键值对。 一致性协议采用 Raft 算法,用来保证服务的高可用. 成员管理和消息广播 采用GOSSIP协议,支持ACL访问控制。 ACL技术在路由器中被广泛采用,它是一种基于包过滤的流控制技术。控制列表通过把源地址、目的地址及端口号作为
什么是Consul
weixin_33997389的博客
10-31 216
原文:https://www.consul.io/intro/index.htmlconsul是什么?consul是HashiCorp公司推出的一款工具,主要用于实现分布式系统的服务发现与配置,它提供了以下几个关键特性:服务发现:Consul客户端可以提供如 api或mysql之类的服务,其他客户端使用Consul去发现一个指定服务的提供者.通过DNS或者HT...
consul(服务注册与发现,服务配置与动态刷新)
weixin_53273714的博客
06-26 832
consul(服务注册与发现,服务配置与动态刷新)
服务发现 - consul 的介绍、部署和使用
buxiaoxia的专栏
04-08 3万+
什么是服务发现微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一幅图片:图中,客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置的,以往的做法是配置是配置文件中,或者有些配置在数据库中。这里就带出几个问题: 需要配置N个服务的网络位置,加大配置的复杂性 服务的网络位置
Consul 原理和使用简介
勇往直前的专栏
03-28 2497
说明 本文介绍了一个服务发现和配置共享的软件,简单介绍了 Consul 的原理和使用, 一篇小文抛砖引玉,希望能吸引感兴趣的童鞋一起探讨研究。 Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康...
git2consul-go:从git填充Consul键值存储
02-03
git2consul-go git2consul-go工具用于从git repo填充键/值存储。 基线源代码是从派生的,该源代码受原始工具的启发。 对NodeJS git2consul的改进 使用官方的Consul Go Lang客户库 使用本地Go Lang git实现 删除...
consul-unauthorized:consul未授权访问
04-24
consul可以进入后台,威胁敏感信息,对网络设备进行操作
【Spring Cloud】面试攻略:Consul与Nacos简单比较篇
最新发布
一个不断前行的程序者
08-23 905
在微服务架构中,服务发现和配置管理是至关重要的环节。Consul和Nacos都是优秀的注册中心和配置中心解决方案。本文将为大家梳理Consul的相关知识点,并与Nacos进行比较,同时提供一些常见的面试题,助力大家在面试中脱颖而出。
微服务之consul
编程哲学家的专栏
08-29 1042
一、概述 consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。 @client CLIENT
Consul Windows免安装版
04-02
Consul是一款由HashiCorp公司开发的开源工具,主要用于实现分布式系统的服务发现、健康检查、配置共享和安全网络通信。在Windows操作系统上使用Consul,无论是Windows 10还是Windows 7,都能提供便捷的集群管理和...
consul(一)什么是consul
weixin_34254823的博客
06-22 1679
1. consul的基本介绍在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治...
Consul系列:什么是Consul?
quanzhan_King的博客
05-18 2074
与其他分布式服务注册与发现的方案, consul 的方案更“一站式”,内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等。这使得一个新的数据中心可以很容易的加入现存的 WAN gossip。当一个 server 收到来自另一个数据中心的请求时,它随即转发给正确数据中心的一个 server。这使得数据中心之间只有一个很低的合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。
Consul实践之Consul是什么
huaweitman的专栏
04-05 1370
http://dgd2010.blog.51cto.com/1539422/1730263
Consul是什么?Consul配置
m0_49264327的博客
05-04 1439
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul是分布式的、高可用的、 可横向扩展的。登录 http://localhost:8500/ 查看是否配置成功,刚打开时会显示红色叉叉,大约15秒左右会显示绿色对勾。服务注册于发现功能下,需要在主启动类上加入@EnableDiscoveryClient。下载完成并解压后双击,即开始服务。
consul介绍
weixin_30349597的博客
06-05 137
consul 是一个支持多数据中心分布式高可用,用于服务发现和配置共享的工具。consul与其它工具的不同,官方介绍如下: https://www.consul.io/intro/vs/index.html http://thesecretlivesofdata.com/raft/ consul的分布式一致性原理,动画 HTTP API接口https://www.consul.io/...
Consul
YUAN
01-06 841
consul 简介 Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。 Consul主要包含如下功能: 服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。 监控检查: 支持多种方式的健康检查。 Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。 多数据中心支持:支持任意数量数据中心。 实验步骤 先解压 unzip consul_1....
consul是做什么的?
10-18
Consul是一种服务发现和配置工具,它可以用于服务之间的通信和协调。它提供了一个中心化的服务注册表,可以让服务在启动时向注册表注册自己的信息,包括服务名称、IP地址、端口号等。其他服务可以通过查询注册表来...
写文章

热门文章

  • Docker安装nacos 23296
  • Git切换回某个commit 15415
  • MongoDB和Elasticsearch对比 10959
  • Cannot Determine Value Type From String ‘Xxxxxx‘ 9520
  • log4j:ERROR setFile(null, true) call failed 8583

分类专栏

  • 分布式 6篇
  • Redis 9篇
  • Linux 7篇
  • Maven 3篇
  • Git 2篇
  • MySQL 13篇
  • Kafka 1篇
  • Kubernetes 3篇
  • idea 1篇
  • Nacos 1篇
  • 数据库 19篇
  • Web 16篇
  • Struts 4篇
  • Java 53篇
  • Spring 5篇
  • Tomcat 4篇
  • Servlet 3篇
  • 成长 12篇
  • JSP 5篇
  • Servlet 4篇
  • mybatis 2篇
  • SpringBoot 13篇
  • Docker 6篇

最新评论

  • 解决Centos使用ssh连接自动断开

    风错雨: 我验证不是这个参数的原因,还有其他可能

  • Redis Cluster在Master节点fail后未自动切换主备

    zz9mm: 全都配置了可是还是没有推举新的主节点 port 6379 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 cluster-announce-ip xxxx cluster-announce-port 6387 cluster-announce-bus-port 16387 appendonly yes requirepass zhlt masterauth zhlt

  • 线程池中运行的线程,当等待队列未满的情况下,一定不大于核心线程数吗

    weeenc: 最后这个总结对吗?

  • SpringBoot Admin安全配置

    不怕冷的小熊: 用注册中心是不是就没有这么配置了

  • SpringBoot Admin安全配置

    风兮雨露: 自己遇到的坑:客户端还需要引入包 <!-- admin监控客户端 --> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.0.2</version> </dependency>

最新文章

  • 记一次线上JVM优化
  • Redis Cluster在Master节点fail后未自动切换主备
  • MySQL修改启动端口无效
2021年9篇
2020年145篇
2019年2篇
2018年9篇
2017年1篇
2014年2篇
2013年10篇
2012年74篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家柳州玻璃钢泡沫雕塑公司成都商场美陈玻璃钢卡通雕塑河北常用商场美陈研发扬州玻璃钢人物雕塑制作天津户外玻璃钢雕塑价位浙江开业商场美陈现价广东商业商场美陈费用南宁玻璃钢雕塑价位洛阳玻璃钢广场雕塑广东商场创意商业美陈哪家好义县玻璃钢雕塑厂家玻璃钢花盆能晒太阳吗山东商业商场美陈销售企业衢州玻璃钢雕塑供货商新密花朵玻璃钢人物雕塑厂家玻璃钢做雕塑材料需要多少钱佛像玻璃钢雕塑报价多少英德玻璃钢雕塑制造厂主题玻璃钢雕塑出售永州玻璃钢雕塑地址功能全品质好的玻璃钢花盆大理玻璃钢雕塑报价深圳艺术商场美陈报价瑞丽玻璃钢雕塑黄山多彩玻璃钢雕塑定制山西玻璃钢园林雕塑南通春节商场美陈内蒙古玻璃钢造型雕塑商场美陈装饰有限公司玻璃钢雕塑翻制加滑石粉香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化