本篇重点介绍 Consul 是什么,它可以解决什么问题,它与现有软件的比较,以及如何开始使用它。
现在比较流行的也就是Consul和Nacos,这两个注册中心我做的项目当中都涉及到了,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用!
Consul 是HashiCorp
公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其它工具(比如ZooKeeper等) ,使用起来也较为简单。
Consul 使用Go语言编写,因此具有天然可移植性(支持Linux,Windows和Mac OS);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
Consul 官网:https://www.consul.io/
Consul 官网介绍:https://www.consul.io/docs
Consul 中文教程:https://www.springcloud.cc/spring-cloud-consul.html
SpringCloud官网介绍Consul:https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-discovery
应用程序可以轻松找到它们所依赖的服务
。服务发现组件也可以使用此信息将通信流量路由到远离不健康主机的地方
,支持多种方式,HTTP, TCP、 Docker, Shell脚本定制化监控。动态配置、特性标记、协调、leader选举
等等。简单的HTTP API使其易于使用。可以使用意图来定义允许哪些服务进行通信
。可以很容易地管理服务细分,目的可以实时更改,而不是使用复杂的网络拓扑和静态防火墙规则。这个架构图是官网给出的,其实在不了解consul的时候看到这个图是很蒙圈的。
让我们分解这张图片并描述每一块。首先,我们可以看到有两个数据中心,分别标记为“一”和“二”。Consul 对多个数据中心提供一流的支持,并希望这是常见的情况(这里的数据中心我认为就是Consul集群)。
Consul Cluster
(集群)有Server
和Client
两种角色。不管是Server还是Client,统称为Agent(代理)。
Consul Client
是相对无状态的,只负责转发RPC到Server资源开销很少。Server
是一个有一组扩展功能的代理,这些功能包括参与Raft选举、维护集群状态、响应RPC查询、与其他数据中心交互WAN Gossip和转发查询给leader或者远程数据中心。每个数据中心,Client和Server是混合的
。一股建议有3~5台Server,这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢(server越多追求一致性的时候 必定会消耗一定的时间来进行同步数据,同步数据的过程就会导致服务短时间内不能访问),Server之间会选举出一个Leader
,然而并不限制Client的数量,一般建议一个服务对应一个Client,它们可以很容易的扩展到数千或者数万台。在开发时我们绑定一组服务注册中心中的客户端即可。
为什么集群要搭建奇数?
zookeeper的集群同样会面临这个问题,集群一般都是只要坏掉一半服务整个集群就不可用,3和4都是坏掉两台就不可用 所以一般会选三台。
Consul 官网下载地址:https://www.consul.io/downloads
Consul在windows下和linux下是都可以安装的,并且基本上不用配置就能使用!
在windows下的话下载好后就是一个可执行的exe,我们可以通过命令启动来控制consul的一些启动参数配置等。
#-dev表示开发模式运行,另外还有-server表示服务模式运行
consul agent -dev -client=0.0.0.0
为了方便启动,也可以在consul.exe同级目录下创建一个脚本来启动,脚本内容如下:
consul agent -dev -client=0.0.0.0
pause
访问管理后台: http://localhost:8500/看到下图意味着我们的Consul服务启动成功了。
通过如下方式可以查看版本号:
关于启动命令官网介绍:https://www.consul.io/docs/agent/config/cli-flags
-bootstrap-expect=3
表示server 集群最低节点数为3,低于这个值将工作不正常-log-rotate-duration
结合使用 以获得细粒度的日志轮换体验。上面命令除了在cmd使用,还可以将配置写到文件当中,然后通过启动命令引入别的配置文件:
您可以指定许多选项来配置 Consul 在发出consul agent命令时的操作方式。您还可以创建一个或多个配置文件,并在启动时使用-config-file
or -config-dir
选项将它们提供给 Consul。配置文件必须以 JSON 或 HCL 格式编写。
以下示例启动一个 Consul 代理,该代理从server.json位于当前工作目录中的一个名为的文件中获取配置设置:
consul agent -config-file=server.json
json文件配置的案例:https://www.consul.io/docs/agent/config/config-files
这是代理的唯一名称
。默认情况下,这是机器的主机名,但您可以使用 -node
标志自定义它。这是配置代理运行的数据中心
。对于单 DC 配置,代理将默认为dc1,但您可以使用-datacenter
标志配置代理向哪个数据中心报告。Consul 对多个数据中心具有一流的支持,但配置每个节点以报告其数据中心可提高代理效率。这表明代理是在服务器模式还是客户端模式下运行
。在服务器模式下运行代理需要额外的开销。这是因为它们参与了共识仲裁、存储集群状态并处理查询。服务器也可能处于 “bootstrap
” 模式,这使服务器能够选举自己作为 Raft 领导者。多个服务器不能处于bootstrap模式,因为它会使集群处于不一致的状态。这是用于代理的客户端接口的地址
。这包括 HTTP 和 DNS 接口的端口。默认情况下,这仅绑定到 localhost。如果更改此地址或端口,则必须-http-addr
在运行命令时指定 a,例如 consul members指示如何访问代理。其他应用程序也可以使用 HTTP 地址和端口 来控制 Consul。这是用于集群中 Consul 代理之间通信的地址和端口集
。并非集群中的所有 Consul 代理都必须使用相同的端口,但所有其他节点必须可以访问此地址。CAP理论:
CAP理论关注粒度是数据,而不是整体系统设计的策略
AP(Eureka)架构:
当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP
当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
https://blog.csdn.net/weixin_43888891/article/details/125511531
https://blog.csdn.net/weixin_43888891/article/details/125511542