Spring Cloud:Consul理论知识
前言
今天博主开始更新SpringCloud构建微服务架构系列,有兴趣的可以持续关注,欢迎讨论!《陈永佳的博客》
概述:
Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等项目。
Consul 是什么
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,采用 Go 语言开发。
Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对。Consul 采用 Raft 一致性协议算法,来保证服务的高可用;使用 GOSSIP 协议管理成员和广播消息,并且支持 ACL 访问控制。
Consul 的使用场景
- Docker 实例的注册与配置共享
- 与 Consul template 服务集成,动态生成 Nginx 和 HAProxy 等配置文件
- Spring-Cloud-Consul 服务发现和配置文件存储Consul 的使用场景
Consul 的优势
- 使用 Raft 算法来保证一致性, 比 ZooKeeper 的 Paxos 算法更简单直接。
- 支持多数据中心,内外网的服务采用不同的端口进行监听。 ZooKeeper 和 etcd 均不提供多数据中心功能的支持。
- 支持健康检查,etcd 不提供此功能。
- 支持 http 和 dns 协议接口。ZooKeeper 的集成较为复杂,etcd 只支持 http 协议。
- 官方提供 web 管理界面,etcd 无此功能。
- Consul 1.2 新增 Service Mesh 解决方案。
Consul、ZooKeeper、etcd、Eureka 比较
Consul官方网站:https://www.consul.io
Consul官方下载地址:https://www.consul.io/downloads.html
启动–在Windows环境下安装Consul(博主的历史文章)
Consul 安装包解压完成之后就是一个可执行程序,直接运行即可。
Consul 默认启动为 dev 模式,重启后丢失数据,启动参数详解请见附录部分。
Spring Cloud Consul
Spring Cloud Consul 项目是 Spring Cloud 针对 Consul 服务治理的实现。
提供了服务发现(可替代Eureka)和配置管理(可替代Spring Cloud Config)的功能。
相较于 Eureka,Consul 有着更少的资源占用能支撑更大的规模集群。
相较于 Spring Cloud Config 配置中心,使用起来没有 Git 存储的配置管理版本追溯方便,需要自己采用用数据库管理配置并同步到 Consul 的方式。
但是 Spring Cloud Consul 的配置更新方式更加简单高效。
附录
Consul 启动参数说明
启动参数 | 说明 |
---|---|
-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 | 使用自带的ui |
-ui-dir | 提供存放web ui资源的路径,该目录必须是可读的 |
-pid-file | 提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent |
Spring Cloud Consul 配置
核心参数
配置项 | 默认值 |
---|---|
spring.cloud.consul.enabled | true |
spring.cloud.consul.host | localhost |
spring.cloud.consul.port | 8500 |
服务发现参数
配置项 | 默认值 |
---|---|
spring.cloud.consul.discovery.acl-token | |
spring.cloud.consul.discovery.catalog-services-watch-delay | 10 |
spring.cloud.consul.discovery.catalog-services-watch-timeout | 2 |
spring.cloud.consul.discovery.datacenters | |
spring.cloud.consul.discovery.default-query-tag | |
spring.cloud.consul.discovery.default-zone-metadata-name zone | |
spring.cloud.consul.discovery.deregister | true |
spring.cloud.consul.discovery.enabled | true |
spring.cloud.consul.discovery.fail-fast | true |
spring.cloud.consul.discovery.health-check-critical-timeout | |
spring.cloud.consul.discovery.health-check-interval | 10s |
spring.cloud.consul.discovery.health-check-path | /actuator/health |
spring.cloud.consul.discovery.health-check-timeout | |
spring.cloud.consul.discovery.health-check-tls-skip-verify | |
spring.cloud.consul.discovery.health-check-url | |
spring.cloud.consul.discovery.heartbeat.enabled | false |
spring.cloud.consul.discovery.heartbeat.interval-ratio | |
spring.cloud.consul.discovery.heartbeat.ttl-unit | s |
spring.cloud.consul.discovery.heartbeat.ttl-value | 30 |
spring.cloud.consul.discovery.hostname | |
spring.cloud.consul.discovery.instance-group | |
spring.cloud.consul.discovery.instance-id | 默认为服务名+环境+端口号 |
spring.cloud.consul.discovery.instance-zone | |
spring.cloud.consul.discovery.ip-address | |
spring.cloud.consul.discovery.lifecycle.enabled | true |
spring.cloud.consul.discovery.management-port | |
spring.cloud.consul.discovery.management-suffix | management |
spring.cloud.consul.discovery.management-tags | |
spring.cloud.consul.discovery.port | |
spring.cloud.consul.discovery.prefer-agent-address | false |
spring.cloud.consul.discovery.prefer-ip-address | false |
spring.cloud.consul.discovery.query-passing | false |
spring.cloud.consul.discovery.register | true |
spring.cloud.consul.discovery.register-health-check | true |
spring.cloud.consul.discovery.scheme | http |
spring.cloud.consul.discovery.server-list-query-tags | |
spring.cloud.consul.discovery.service-name | |
spring.cloud.consul.discovery.tags |
配置服务参数
配置项 | 默认值 |
---|---|
spring.cloud.consul.config.enabled | true |
spring.cloud.consul.config.prefix | config |
spring.cloud.consul.config.default-context | application |
spring.cloud.consul.config.profile-separator | , |
spring.cloud.consul.config.data-key | data |
spring.cloud.consul.config.format | KEY_VALUE, PROPERTIES, YAML, FILES |
spring.cloud.consul.config.name | ${spring.application.name} |
spring.cloud.consul.config.acl-token | |
spring.cloud.consul.config.fail-fast | false |
spring.cloud.consul.config.watch.enabled | true |
spring.cloud.consul.config.watch.wait-time | 55 |
spring.cloud.consul.config.watch.delay | 1000 |
最后
-
一个强有力的团队必定有一个强有力的,有逻辑的,有榜样力量的管理者!打造一流团队,博主在路上ing。。。。
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97645.html