Consul 注册中心介绍以及搭建

article/2025/9/20 15:30:45

本篇重点介绍 Consul 是什么,它可以解决什么问题,它与现有软件的比较,以及如何开始使用它。

目录

    • 1、常见的注册中心
    • 2、Consul 介绍
    • 3、Consul 特性
    • 4、Consul的基本架构
    • 5、Consul单节点安装与启动
    • 6、Consul启动命令详解
    • 7、了解Consul启动输出
    • 8、三个注册中心异同点
    • 9、SpringCloud使用Consul作为服务注册发现中心
    • 10、SpringCloud使用Consul作为配置中心

1、常见的注册中心

现在比较流行的也就是Consul和Nacos,这两个注册中心我做的项目当中都涉及到了,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用!

在这里插入图片描述

2、Consul 介绍

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

3、Consul 特性

  • 服务发现:Consul 的客户端可以注册服务,其他客户端可以使用 Consul 发现给定服务的提供者。使用DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务
  • 健康检查:Consul客户端可以提供任意数量的健康检查,可以与给定的服务关联(“web服务器是否返回200 OK”),也可以与本地节点关联(“内存利用率是否低于90%”)。操作人员可以使用此信息监视集群运行状况,服务发现组件也可以使用此信息将通信流量路由到远离不健康主机的地方,支持多种方式,HTTP, TCP、 Docker, Shell脚本定制化监控。
    KV 存储:应用程序可以使用Consul的分级 key/value 存储来实现各种目的,包括动态配置、特性标记、协调、leader选举等等。简单的HTTP API使其易于使用。
  • 安全服务通信:Consul可以生成和分发服务的TLS证书,以建立相互的TLS连接。可以使用意图来定义允许哪些服务进行通信。可以很容易地管理服务细分,目的可以实时更改,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。
  • Raft 算法:使用Raft算法完成一致性,Raft将一致性问题分解成了三个独立的部分:leader选举、日志复制、安全性。
  • 自带web管理界面:这一点相比于zookeeper注册中心要好一点,zookeeper是没有自带管理界面的。通过管理界面可以清晰的看到注册了多少个服务,以及在管理界面还可以使用服务配置功能。

4、Consul的基本架构

这个架构图是官网给出的,其实在不了解consul的时候看到这个图是很蒙圈的。

在这里插入图片描述
让我们分解这张图片并描述每一块。首先,我们可以看到有两个数据中心,分别标记为“一”和“二”。Consul 对多个数据中心提供一流的支持,并希望这是常见的情况(这里的数据中心我认为就是Consul集群)。

Consul Cluster(集群)有ServerClient两种角色。不管是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都是坏掉两台就不可用 所以一般会选三台。

5、Consul单节点安装与启动

Consul 官网下载地址:https://www.consul.io/downloads

Consul在windows下和linux下是都可以安装的,并且基本上不用配置就能使用!

在windows下的话下载好后就是一个可执行的exe,我们可以通过命令启动来控制consul的一些启动参数配置等。

在这里插入图片描述
cd到对应的目录下,使用cmd启动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服务启动成功了。

通过如下方式可以查看版本号:

在这里插入图片描述

6、Consul启动命令详解

关于启动命令官网介绍:https://www.consul.io/docs/agent/config/cli-flags

  • -dev:开发模式,去掉所有持久化选项,内存服务器模式。
  • -server:此标志用于控制代理是处于服务器模式还是客户端模式。提供后,代理将充当 Consul 服务器。每个 Consul 集群必须至少有一台服务器,理想情况下每个数据中心不超过 5 台。
  • -bind:内部集群通信应该绑定的地址。这是集群中所有其他节点都应该可以访问的 IP 地址。默认情况下,这是“0.0.0.0”,这意味着 Consul 将绑定到本地机器上的所有地址,并将私有 IPv4 地址通告 给集群的其余部分。如果有多个私有 IPv4 地址可用,Consul 将在启动时退出并出现错误。
  • -client:Consul 将绑定客户端接口的地址,包括 HTTP 和 DNS 服务器。默认情况下,这是“127.0.0.1”,只允许环回连接,0.0.0.0表示不限客户端ip。
  • -ui-:开启web界面访问
  • -bootstrap-expect :此标志提供数据中心中预期的服务器数量为3。可以不设置,如果要设置该值必须与集群中的其他服务器一致。设置之后,Consul 会等待指定数量的服务器可用,然后引导集群。此标志需要-server模式。-bootstrap-expect=3表示server 集群最低节点数为3,低于这个值将工作不正常
  • -data-dir:该标志为代理提供了一个数据目录来存储状态。这对所有代理都是必需的(该目录必须存在,需提前创建好)。
  • -node:集群中此节点的名称。这在集群中必须是唯一的。默认情况下,这是机器的主机名。
  • -log-file-:日志文件所在位置 需要提前创建好目录。例如,设置log-file为/var/log/将导致日志文件路径为/var/log/consul-{timestamp}.log. log-file可以与 -log-rotate-duration结合使用 以获得细粒度的日志轮换体验。
  • -log-rotate-duration:指定日志在需要轮换之前应写入的最长持续时间。必须是持续时间值,例如 30 秒。默认为 24​​ 小时。
  • -datacenter-:此标志控制运行代理的数据中心。如果未提供,则默认为“dc1”。

上面命令除了在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

7、了解Consul启动输出

在这里插入图片描述

  • Node name这是代理的唯一名称。默认情况下,这是机器的主机名,但您可以使用 -node标志自定义它。
  • Datacenter这是配置代理运行的数据中心。对于单 DC 配置,代理将默认为dc1,但您可以使用-datacenter标志配置代理向哪个数据中心报告。Consul 对多个数据中心具有一流的支持,但配置每个节点以报告其数据中心可提高代理效率。
  • Server这表明代理是在服务器模式还是客户端模式下运行。在服务器模式下运行代理需要额外的开销。这是因为它们参与了共识仲裁、存储集群状态并处理查询。服务器也可能处于 “bootstrap” 模式,这使服务器能够选举自己作为 Raft 领导者。多个服务器不能处于bootstrap模式,因为它会使集群处于不一致的状态。
  • Client Addr这是用于代理的客户端接口的地址。这包括 HTTP 和 DNS 接口的端口。默认情况下,这仅绑定到 localhost。如果更改此地址或端口,则必须-http-addr在运行命令时指定 a,例如 consul members指示如何访问代理。其他应用程序也可以使用 HTTP 地址和端口 来控制 Consul。
  • Cluster Addr: 这是用于集群中 Consul 代理之间通信的地址和端口集。并非集群中的所有 Consul 代理都必须使用相同的端口,但所有其他节点必须可以访问此地址。

8、三个注册中心异同点

CAP理论:

  • C:Consistency (强一致性)
  • A:Availability (用性)
  • C:Consistency (强一致性)

CAP理论关注粒度是数据,而不是整体系统设计的策略

AP(Eureka)架构

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

在这里插入图片描述
CP(Zookeeper/Consul)

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性

在这里插入图片描述

9、SpringCloud使用Consul作为服务注册发现中心

https://blog.csdn.net/weixin_43888891/article/details/125511531

10、SpringCloud使用Consul作为配置中心

https://blog.csdn.net/weixin_43888891/article/details/125511542


http://chatgpt.dhexx.cn/article/yj5nrh2C.shtml

相关文章

jQuery删除元素或内容

删除元素/内容 remove():删除被选元素 empty():删除被选元素中子元素

JQuery 数组获取和删除元素

<script>var target []; target [0] "aaa000"; target [1] "bbb111"; target [2] "ccc222"; target [3] "ddd333"; target [4] "eee444"; target [5] "fff555";console.log("使用push()添加元素…

jQuery添加元素

今天教大家来通过jQuery来很容易地添加与删除元素以及内容。我们主要学习的方法有添加的方法四个。首先我们来通过append()和prepend()方法来添加若干新元素&#xff0c;老样子&#xff0c;我们先来看效果展示&#xff1a;一个段落标签和一个button标签组成简易页面&#xff1b…

Jquery添加与移除元素

显示隐藏 siblings() addclass() 给元素添加class&#xff0c;如果元素上已经有其他的classname&#xff0c;那么新的会追加到现有classname后面 用法&#xff1a;$("li").addClass("bigger") removerClass() removerClass():可以将元素的某个class移…

jquery的DOM节点操作(删除元素节点)

1.删除元素节点 在操作页面时&#xff0c;删除多余或者指定的页面元素是非常必要的。 jquery中提供了remove&#xff08;&#xff09;方法来删除元素。 其语法格式如下&#xff1a; 删除元素节点示例代码&#xff1a; <!DOCTYPE html> <html><head><met…

jQuery 创建元素、添加元素、删除元素 【一篇文章轻松拿下】

&#x1f451; 原生 JS 中&#xff0c;我们学习了一整套元素创建添加删除的操作&#xff0c;其中创建元素&#xff0c;我们用了 creatElement&#xff0c;添加元素有两种&#xff0c;分别是后面追加 apprndChild&#xff0c;和指定元素前插入 insertBefore&#xff0c;在 jQuer…

jQuery-删除元素

删除元素有两种方法 remove()&#xff1a;删除被选元素&#xff08;及其子元素&#xff09; empty()&#xff1a;从被选元素中删除子元素 remove&#xff08;&#xff09;代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><met…

“浅”谈容灾和双活数据中心(下)

本文接续前文&#xff1a;“浅”谈容灾和双活数据中心&#xff08;上&#xff09;&#xff0c;上 篇发布之后&#xff0c;瓜哥粉丝量暴涨了好几百&#xff0c;感谢大家关注&#xff01; 第三部分&#xff1a;双活&#xff0c;看上去很美。 3.1 装逼是要付出代价的 看…

存储数据保护技术——双活

目录 基本概念&#xff1a; 双活部署方式&#xff1a; 当数据中心A和数据中心B同时写入数据&#xff0c;怎么区分&#xff1f;怎样保证数据一致性&#xff1a; 分布式锁互斥&#xff1a;来保证数据的一致性 互斥&#xff1a; 分布式锁&#xff1a; 注意&#xff1a; 仲裁…

【精华】 数据中心双活该如何构建

ICT架构师技术交流(微信号ICT_Architect) 介绍分析和交流ICT行业最前沿技术&#xff0c;分享云计算、存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识&#xff0c;旨在知识交流、开放共享和共同进步。 因为最近经常看到大家在讨论数据中心双活解决方案&#xff0c;…

双活数据中心概念及优缺点介绍

主备数据中心之间一般有热备、冷备、双活三种备份方式。 热备 热备的情况下&#xff0c;只有主数据中心承担用户的业务&#xff0c;此时备数据中心对主数据中心进行实时的备份&#xff0c;当主数据中心挂掉以后&#xff0c;备数据中心可以自动接管主数据中心的业务&#xff0c;…

阿里超大数据中心“异地双活”实践

灾备系统和应急管理体系建设是数据中心永不变更的热点话题。从“两地三中心”、“同城双活”到“异地双活”&#xff0c;业内的讨论层出不穷。即使在容灾备份领域较早入手的金融行业&#xff0c;在灾备切换时也是谨慎再谨慎的&#xff0c;在历年“真实切换”演练时“手软”的例…

深入剖析Vplex双活数据中心存储方案

EMC上一代存储双活方案是通过vPlex网关产品实现&#xff0c;具备异构其他厂商存储的能力&#xff0c;将各厂商存储虚拟化为统一的存储池&#xff0c;为上层服务器提供存储资源。从2010年vPlex发布以来其的硬件已经更新了VS1、VS2和VS6三代。2016年推出的VS6硬件引擎间通过40Gb …

04|同城双活:如何实现机房之间的数据同步?

04&#xff5c;同城双活&#xff1a;如何实现机房之间的数据同步&#xff1f; 你好&#xff0c;我是徐长龙。今天我们来看看用户中心改造的另一个阶段&#xff1a;构建多机房。 在业务初期&#xff0c;考虑到投入成本&#xff0c;很多公司通常只用一个机房提供服务。但随着业…

数据中心的双活与灾备方案设计

灾备建设的最终目的就是要保护业务的连续性运行&#xff0c;除了技术层面的支撑外&#xff0c;还有人员、规划和流程等非技术决策层面支撑。养兵千日&#xff0c;用在一时。只有技术和规划通力配合&#xff0c;才能在真正发生灾难时保证业务连续性。 因此&#xff0c;业务连续性…

多数据中心多活相关知识

Cell&#xff1a;业务可封闭收敛最小执行分片&#xff1b;业务对请求空间按一定维度&#xff08;比如会员、门店等&#xff09;划分分片。 LDC&#xff1a;逻辑数据中心&#xff0c;是由多个业务可封闭 cell 组成的集合单元&#xff0c;拥有独立的基础中间件系统&#xff08;包…

第三讲:如何构建双活数据中心方案

针对数据中心双活解决方案如何构建,笔者把大家常见的疑问和问题进行汇总,加上我个人的见解写成一篇比较全面的文章,分享出来供大家参考。由于工作原因,可能今后近一个月的时间不能给及时大家写文章了,但是过了这段时间过后会尽快呈现给大家。 双活本身其实有广义和狭义之…

数字孪生数据中心机房,智能 IDC 高阶运维

随着“东数西算”工程和新基建的加速落地&#xff0c;数智化技术正逐渐渗透到各领域。但随着数据中心建设规模的逐步扩大&#xff0c;必然带来能耗的大幅增长和机房设备数量的不断扩充&#xff0c;传统机房的监控和管理模式已无法满足数据中心“集中监控、统一管理”的需求。 …

两地三中心及双活数据中心具体示例说明

两地三中心 两地三中心的有几种实现形式&#xff0c;下图是一种典型案例。 在这一案例中&#xff0c;正常情况下&#xff0c;业务运行在主机房的设备之上。主存储与辅存储存在单向同步关系&#xff0c;即主储存的所有数据变更都会实时同步复制①到次存储上&#xff0c;从而…

oracle双活什么意思,什么是双活数据中心

原标题&#xff1a;什么是双活数据中心 双活数据中心是出于灾备(Disaster Recovery)方面的考虑&#xff0c;一般会建2个(或多个)数据中心。一个是主数据中心用于承担用户的业务&#xff0c;一个是备份数据中心用于备份主数据中心的数据、配置、业务等。 主备数据中心之间一般有…