当前位置 : 首页 » 文章分类 :  开发  »  Consul

Consul

Consul 相关笔记

Consul 是 HashiCorp 公司推出的开源软件,提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案。

Consul 简介和快速入门
https://book-consul-guide.vnzmi.com/


consul手动deregister

curl -X PUT http://localhost:8500/v1/agent/service/deregister/{service-id}

用 PUT 请求 Consul 的这个 deregister 接口,附上实例的id就可以成功注销掉实例了(注意是实例的id,不是服务名,即服务名+一段唯一字符串。有ACL认证的Consul需要在Header上加token,否则会报permission denied)
实例id可以在 consul 页面上看到。

consul不会自动deregister无效服务

当在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使用过程中,可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息,而这些实例在Consul中会长期存在,并处于断开状态。它们虽然不会影响到正常的服务消费过程,但是它们会干扰我们的监控,所以我们可以实现一个清理接口,在确认故障实例可以清理的时候进行调用来将这些无效信息清理掉。


Consul内部的选举实现/CAP保证

Consensus Protocol
https://www.consul.io/docs/architecture/consensus

通过consul的session实现leader选举

Application Leader Election with Sessions
https://learn.hashicorp.com/tutorials/consul/application-leader-elections


consul分布式锁

基于Consul的分布式锁主要利用Key/Value存储API中的acquire和release操作来实现。acquire和release操作是类似Check-And-Set的操作:

acquire操作只有当锁不存在持有者时才会返回true,并且set设置的Value值,同时执行操作的session会持有对该Key的锁,否则就返回false
release操作则是使用指定的session来释放某个Key的锁,如果指定的session无效,那么会返回false,否则就会set设置Value值,并返回true

基于Consul的分布式锁实现
http://blog.didispace.com/spring-cloud-consul-lock-and-semphore/


Spring Cloud Consul

Spring Cloud Consul 具有如下特性:
支持服务治理:Consul 作为注册中心时,微服务中的应用可以向 Consul 注册自己,并且可以从 Consul 获取其他应用信息;
支持客户端负责均衡:包括 Ribbon 和 Spring Cloud LoadBalancer;
支持 Zuul:当 Zuul 作为网关时,可以从 Consul 中注册和发现应用;
支持分布式配置管理:Consul 作为配置中心时,使用键值对来存储配置信息;
支持控制总线:可以在整个微服务系统中通过 Control Bus 分发事件消息。


SpringBoot 配置 Consul 注册中心

maven添加依赖

spring-cloud-starter-consul-discovery 的版本信息在 spring-cloud-dependencies -> spring-cloud-consul-dependencies 中被 Managed ,如果引入了 spring-cloud-dependencies 就不需要单独配置版本信息。

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

consul 配置中心配置

如果要使用 consul 的配置中心,要添加 bootstrap 配置文件 bootstrap.yml ,因为要在其他配置之前获取配置中心的配置项
所以这里主要是 consul 配置中心的配置项
spring.cloud.consul.host 配置 consul 地址,默认是 localhost
spring.cloud.consul.port 配置 consul 端口,默认是 8500
spring.cloud.consul.config.enabled 是否启用 consul 的配置中心功能
spring.cloud.consul.config.prefix 设置配置所在目录,默认值 config
spring.cloud.consul.config.format 配置值的格式 YAML、FILES、PROPERTIES、默认 KEY-VALUE
spring.cloud.consul.config.data-key 表示 consul 上面的 KEY 值(或者说文件的名字),默认是 data

consul 服务注册配置

之后在应用配置 application.yml 或 application.properties 中增加 spring cloud consul 相关配置
spring.cloud.consul.discovery.enabled 启用服务发现
spring.cloud.consul.discovery.register 启用服务注册
spring.cloud.consul.discovery.deregister 服务停止时取消注册

spring.cloud.consul.discovery.prefer-ip-address 表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.health-check-interval 健康检查频率
spring.cloud.consul.discovery.health-check-path 健康检查路径
spring.cloud.consul.discovery.health-check-critical-timeout 健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.instance-id 服务注册标识

如果只用做注册中心,下面配置即可

spring.application.name=my-app
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.service-name=${spring.application.name}

不加 @EnableDiscoveryClient 也能将自己注册到 consul


Mac brew 安装 consul

安装
brew install consul
默认安装目录 /usr/local/Cellar/consul/1.8.0
验证安装

$ consul -v
Consul v1.8.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

后台启动 consul brew services start consul
重启 consul brew services restart consul

前台启动
consul agent -dev

访问 consul web 界面
http://localhost:8500/

https://learn.hashicorp.com/consul/getting-started/install


上一篇 Spring-AOP

下一篇 Chrome使用笔记

阅读
评论
1,263
阅读预计5分钟
创建日期 2019-06-07
修改日期 2021-01-28
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论