注册中心系列二:Consul的接入与使用
目录
- 一、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的实现,其核心在于两点:
- 集群内节点间信息的高效同步机制,其保障了拓扑变动以及控制信号的及时传递;
- 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
节点状态变更
- 在节点数达到bootstrap-expect的数时,开始启用raft选举
- 在节点数超过bootstrap-expect数时,其他节点为follower
- 在leader被干掉后,raft如果判断到节点数依然大于等于bootstrap-expect时,重新选举
- 逐一干掉节点,当节点数少于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的接入与使用相关推荐
- consul java 注册中心_Spring Cloud微服务架构实战之Consul注册中心02:consul入门案例...
获取springcloud实战项目详细视频教程,请留言联系. 1.创建项目 我们创建聚合项目来讲解 Consul,首先创建一个 pom 父工程. 2.添加依赖 pom.xml 4.0.0 com.ex ...
- SpringCloud Consul注册中心介绍及配置使用
概述:Consul 是HashiCorp 公司推出的一款基于Go语言编写的用于实现分布式系统服务发现与配置的一款开源工具.Consul主要功能包含服务注册与发现.分布式一致性协议(Raft算法)实现. ...
- 微服务 - Consul服务注册中心
概述 上篇说到构建良好的架构,依托于基础设施建设(自动化测试.自动化部署.服务监控,服务发现.配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程. 注 ...
- Consul(注册中心)部署
目录 前言 一.Docker consul(注册中心) 1.什么是consul 2.consul干什么 3.常见的注册中心 4.Consul 特性 5.Consul的使用场景 6.Consul的基本架 ...
- consul作为服务注册中心
consul consul 下载地址 provider order consul 由go语言编写的一款优秀的服务注册中心应用. https://www.consul.io/intro/index.ht ...
- Spring Cloud: 注册中心Consul使用
什么是Consul Consul是HashiCorp公司推出的开源工具,提供了分布式系统的服务注册和发现.配置等功能.与其他分布式服务注册与发现的方案相比,Consul的方案更"一站式&qu ...
- 【五】、Consul注册中心
1.什么是Consul? Consul是一个服务网格(微服务间的TCP/IP,负责服务之间的网络调用.限流.熔断和监控)解决方案,它是一个个分布式,高度可用的系统,而且开发使用都很简单.它提供了一个功 ...
- SpringCloud(三) Eureka注册中心介绍以及单机版搭建
一.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netfix微服务套件中的一部分,它基于 Netfix Eureka 做了二次封装,主要负责完成微服务架构 ...
- 注册中心—注册中心原理
在微服务架构中,注册中心是最核心的基础服务之一,本文将详细介绍下注册中心的组成部分和它们之前的关系. 目录 一.注册中心原理 二.注册中心功能 三.常见的注册中心 一.注册中心原理 注册中心主要涉及到 ...
最新文章
- NLP模型BERT和经典数据集!
- Ocelot(一)- .Net Core开源网关
- js+jQuery获取全选并用ajax进行批量删除
- 如何调试SAP CRM产品主数据应用后台ABAP端抛出的错误消息
- 从零开始学python人工智能课程_从零开始如何学习人工智能?
- Win11字体显示不全怎么解决?
- 3.2 矩阵乘积的秩
- 导出WPS office文档格式的说明
- 【练习】Building a Hypermedia-Driven RESTful Web Service
- 西方文化系列讲座之希腊文化(下)
- 门面担当——外观模式
- php调用ua_PHP判断判断UA:检测客户端是手机或电脑
- python画国际象棋棋盘图片_python3 turtle 画国际象棋棋盘
- java table数据转excel,excel将数据转化成表格-如何将java数据转换成Excel表格
- 关于if 判断中null为什写前边和在使用equals方法进行判断是为什么要 “1“.equals(str)
- 认识控制台-什么是控制台?
- 现货交易常见的投资模式
- 提高搜狗SR值和关键词排名
- 【pySerial3.4官方文档】3、pySerial API
- 游戏开发完整学习路线
热门文章
- 毕设日记 3.14 Tue.
- mysql身份证校验码_sql 语句 验证身份证号码
- 上汽集团+软件测试,【上汽集团功能测试面试】上汽软件测试面试经验-看准网...
- 钛资本研究院:创业型公司债权融资的几个基本场景
- 解决The connected J-Link is defective,Proper operation cannot be guaranteed
- ios获取4g_VSCO全滤镜解锁!安卓iOS都没问题!!赶紧下载!手慢拍大腿
- http://www.cnblogs.com/end/archive/2011/04/12/2013805.html
- 走进中国移动,揭秘大数据应急救灾背后的故事
- 了解Java中的内存模型只需13张图!
- 继电器模块的使用和驱动实现