目录

  • 一、Consul原理与介绍
    • 1.介绍
    • 2.实现原理
      • 2.1serf
      • 2.2Raft
    • 3.consul agent参数
  • 三、Docker搭建集群版的Consul
  • 四、springcloud的接入方式
    • 1.依赖引入
    • 2.配置
  • 五、优缺点
    • 1.优点
    • 2.缺点

一、Consul原理与介绍

1.介绍

consul主要有server和client两种组件组成。

server负责核心数据的存储和处理请求,server可以部署多个实例(通常推荐3-5个),server只有一个实例是leader实例,就是主节点,主节点是自动选举产生的,主节点负责处理数据的写入处理,同时将数据同步至其他server节点

client负责跟server通信,处理转发服务注册、服务发现请求到server节点,client还负责服务的健康检查,client节点也可以部署多个实例,甚至每个微服务节点都部署一个client实例。

Server节点

  • 参与共识仲裁(raft)
  • 存储群集状态(日志存储)
  • 处理查询
  • 维护与周边(LAN/WAN)各节点关系

Agent节点

  • 负责通过该节点注册到consul的微服务的健康检查
  • 将客户端注册请求以及查询转化为对server的RPC请求
  • 维护与周边(LAN/WAN)各节点关系

服务端口

端口 作用
8300 RPC exchanges
8301 LAN GOSSIP
8302 WAN GOSSIP
8400 RPC exchanges by the CLI
8500 Used for HTTP API and web interface
8600 Used for DNS server

纵观consul的实现,其核心在于两点:

  1. 集群内节点间信息的高效同步机制,其保障了拓扑变动以及控制信号的及时传递;
  2. server集群内日志存储的强一致性。

它们主要基于以下两个协议来实现:

  • 使用gossip协议在集群内传播信息
  • 使用raft协议来保障日志的一致性

2.实现原理

2.1serf

Serf是hashicorp开源的去中心化成员管理、失败检测和服务编排工具,具有轻量级高可用分区容错的特点。Serf底层采用gossip协议,通过在集群中广播消息,从而实现了集群中节点下线自动感知。Serf 在每个主要平台上运行:Linux、Mac OS X 和 Windows。它非常轻量级:它使用 5 到 10 MB 的常驻内存,并且主要使用不频繁的 UDP 消息进行通信

由于gossip协议实现了最终一致性,所以Serf是一个AP系统。Serf可应用于负载均衡器、Memcached或者Redis集群管理、DNS记录更新等场景。

Serf 使用高效的gossip协议 来解决三个主要问题:

  • Membership:Serf 维护集群成员列表,并且能够在成员更改时执行自定义处理程序脚本。例如,Serf 可以维护负载均衡器的 Web 服务器列表,并在节点上线或离线时通知负载均衡器。
  • 故障检测和恢复:Serf 在几秒钟内自动检测故障节点,通知集群的其余部分,并执行处理程序脚本允许您处理这些事件。Serf 将通过定期重新连接来尝试恢复故障节点。
  • 自定义事件传播:Serf 可以向集群广播自定义事件和查询。这些可用于触发部署、传播配置等。事件只是即发即弃的广播,Serf 在面对离线节点或网络分区时尽最大努力传递消息。查询提供了一个简单的实时请求/响应机制。

2.2Raft

节点状态变更

  1. 在节点数达到bootstrap-expect的数时,开始启用raft选举
  2. 在节点数超过bootstrap-expect数时,其他节点为follower
  3. 在leader被干掉后,raft如果判断到节点数依然大于等于bootstrap-expect时,重新选举
  4. 逐一干掉节点,当节点数少于bootstrap-expect时,raft协议不再选举,将维持先前的状态。

3.consul agent参数

-advertise        通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址
-bootstrap        用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。
-bootstrap-expect 在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用
-bind             该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-client           consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-config-file      明确的指定要加载哪个配置文件
-config-dir       配置文件目录,里面所有以.json结尾的文件都会被加载
-data-dir         提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-dc               该标记控制agent允许的datacenter的名称,默认是dc1
-encrypt          指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key
-join             加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。
-retry-join       和join类似,但是允许你在第一次失败后进行尝试。
-retry-interval   两次join之间的时间间隔,默认是30s
-retry-max        尝试重复join的次数,默认是0,也就是无限次尝试
-log-level        consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。
-node             节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-protocol         consul使用的协议版本
-rejoin           使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-server           定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个
-syslog           开启系统日志功能,只在linux/osx上生效
-ui-dir           提供存放web ui资源的路径,该目录必须是可读的
-pid-file         提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent

三、Docker搭建集群版的Consul

docker-compose.yml内容如下,将搭建三个节点作为服务,一个节点提供界面与客户端对接入口

version: '3'services:consul1:image: consulcontainer_name: consul_node1command: agent -server -bootstrap-expect=3 -node=consul_node1 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1networks:- mynetconsul2:image: consulcontainer_name: consul_node2command: agent -server -retry-join=consul_node1 -node=consul_node2 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1depends_on:- consul1networks:- mynetconsul3:image: consulcontainer_name: consul_node3command: agent -server -retry-join=consul_node1 -node=consul_node3 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1depends_on:- consul1networks:- mynetconsul4:image: consulcontainer_name: consul_node4command: agent -retry-join=consul_node1 -node=consul_node4 -bind=0.0.0.0 -client=0.0.0.0 -datacenter=dc1 -uiports:- 8500:8500depends_on:- consul2- consul3networks:- mynetnetworks:mynet:driver: bridge

运行

docker-compose up -d

四、springcloud的接入方式

1.依赖引入

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency>

2.配置

spring:application:name: springcloud-democloud:consul:discovery:enabled: truehost: 127.0.0.1port: 8500

五、优缺点

1.优点

  • 1.简单易用,不需要集成sdk
  • 2.自带健康检查
  • 3.支持多数据中心
  • 4.提供web管理界面

2.缺点

  • 1.不能实时获取服务信息的变化通知

注册中心系列二:Consul的接入与使用相关推荐

  1. consul java 注册中心_Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例...

    获取springcloud实战项目详细视频教程,请留言联系. 1.创建项目 我们创建聚合项目来讲解 Consul,首先创建一个 pom 父工程. 2.添加依赖 pom.xml 4.0.0 com.ex ...

  2. SpringCloud Consul注册中心介绍及配置使用

    概述:Consul 是HashiCorp 公司推出的一款基于Go语言编写的用于实现分布式系统服务发现与配置的一款开源工具.Consul主要功能包含服务注册与发现.分布式一致性协议(Raft算法)实现. ...

  3. 微服务 - Consul服务注册中心

    概述 上篇说到构建良好的架构,依托于基础设施建设(自动化测试.自动化部署.服务监控,服务发现.配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程. 注 ...

  4. Consul(注册中心)部署

    目录 前言 一.Docker consul(注册中心) 1.什么是consul 2.consul干什么 3.常见的注册中心 4.Consul 特性 5.Consul的使用场景 6.Consul的基本架 ...

  5. consul作为服务注册中心

    consul consul 下载地址 provider order consul 由go语言编写的一款优秀的服务注册中心应用. https://www.consul.io/intro/index.ht ...

  6. Spring Cloud: 注册中心Consul使用

    什么是Consul Consul是HashiCorp公司推出的开源工具,提供了分布式系统的服务注册和发现.配置等功能.与其他分布式服务注册与发现的方案相比,Consul的方案更"一站式&qu ...

  7. 【五】、Consul注册中心

    1.什么是Consul? Consul是一个服务网格(微服务间的TCP/IP,负责服务之间的网络调用.限流.熔断和监控)解决方案,它是一个个分布式,高度可用的系统,而且开发使用都很简单.它提供了一个功 ...

  8. SpringCloud(三) Eureka注册中心介绍以及单机版搭建

    一.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netfix微服务套件中的一部分,它基于 Netfix Eureka 做了二次封装,主要负责完成微服务架构 ...

  9. 注册中心—注册中心原理

    在微服务架构中,注册中心是最核心的基础服务之一,本文将详细介绍下注册中心的组成部分和它们之前的关系. 目录 一.注册中心原理 二.注册中心功能 三.常见的注册中心 一.注册中心原理 注册中心主要涉及到 ...

最新文章

  1. NLP模型BERT和经典数据集!
  2. Ocelot(一)- .Net Core开源网关
  3. js+jQuery获取全选并用ajax进行批量删除
  4. 如何调试SAP CRM产品主数据应用后台ABAP端抛出的错误消息
  5. 从零开始学python人工智能课程_从零开始如何学习人工智能?
  6. Win11字体显示不全怎么解决?
  7. 3.2 矩阵乘积的秩
  8. 导出WPS office文档格式的说明
  9. 【练习】Building a Hypermedia-Driven RESTful Web Service
  10. 西方文化系列讲座之希腊文化(下)
  11. 门面担当——外观模式
  12. php调用ua_PHP判断判断UA:检测客户端是手机或电脑
  13. python画国际象棋棋盘图片_python3 turtle 画国际象棋棋盘
  14. java table数据转excel,excel将数据转化成表格-如何将java数据转换成Excel表格
  15. 关于if 判断中null为什写前边和在使用equals方法进行判断是为什么要 “1“.equals(str)
  16. 认识控制台-什么是控制台?
  17. 现货交易常见的投资模式
  18. 提高搜狗SR值和关键词排名
  19. 【pySerial3.4官方文档】3、pySerial API
  20. 游戏开发完整学习路线

热门文章

  1. 毕设日记 3.14 Tue.
  2. mysql身份证校验码_sql 语句 验证身份证号码
  3. 上汽集团+软件测试,【上汽集团功能测试面试】上汽软件测试面试经验-看准网...
  4. 钛资本研究院:创业型公司债权融资的几个基本场景
  5. 解决The connected J-Link is defective,Proper operation cannot be guaranteed
  6. ios获取4g_VSCO全滤镜解锁!安卓iOS都没问题!!赶紧下载!手慢拍大腿
  7. http://www.cnblogs.com/end/archive/2011/04/12/2013805.html
  8. 走进中国移动,揭秘大数据应急救灾背后的故事
  9. 了解Java中的内存模型只需13张图!
  10. 继电器模块的使用和驱动实现