Consul系列:什么是Consul?

article/2025/9/20 15:10:33

引言

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案, consu1 的方案更“一站式”,内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等。使用起来也较为简单。Consul 用 Golang 实现,因此具有天然可移植性(支持 Linux、windows 和 Mac Os X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。其一致 性协议采用 Raft 算法,用来保证服务的高可用。使用 GOSSIP 协议管理成员和广播消息,并且支持ACL 访问控制。

值得一提的是,命令行超级好用的虚拟机管理软件 grant 也是 HashiCorp 公司开发的产品

Consul 的使用场景

  • 服务通信地址域名化,动态迁移服务
  • SaaS 应用的服务发现与配置共享
  • 与 consul-template 服务集成,动态生成 nginx 和 haproxy 配置文件

Consul 的优势

  • 使用 Raft 算法来保证一致性,比复杂的 Paxos 算法更直接
  • 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障而其部署则需要考虑网络延迟,分片等情况等。 zookeeper 和 etcd 均不提供多数据中心功能的支持
  • 支持健康检查,Etcd 不提供此功能
  • 支持 HTTP 和 DNS 协议接口,Zookeeper 的集成较为复杂,Etcd 只支持 HTTP 协议
  • 官方提供 Web 管理界面,Etcd 无此功能

相关术语

  • agent**:运行在 consul集群所有节点上的核心服务,其可运行在 client 或 server 模式,通过consul agent 命令来启动。由于所有节点必须运行 agent,指定节 点运行于 client 或者server 模式是很简单地,除非有其它的 agent 实例。所有的 agent 都能运行 DNS 或者HTTP 接口,并负责运行时检查和保持服务同步。
  • client:一个 client 是一个转发所有 RPC到 server 的 agent 。这个 client 是相对无状态的。client 唯一执行的后台活动是加入 LAN gossip 池。这有一个最低的 资源开销并且仅消耗少量的网络带宽。
  • server:一个 server 是一个有一组扩展功能的 agent,这些功能包括 参与 Raft 选举,维护集群状态,响应 RPC 查询,与其他数据中心交互 WAN gossip 和转发 查询给 leader 或者远程数据中心。每个数据中心至少有一个 agent 运行在 server 模式,推荐为 3 个或 5个
  • DataCenter:虽然数据中心的定义是显而易见的,但是有一些细微的细节必须考虑。例如,在EC2 中,多个可用区域被认为组成一个数据中心?我们定义数据中心 为一个私有的,低延迟和高带宽的一个网络环境。这不包括访问公共网络,但是对于我们而言,同一个 EC2 中的多个可用区域可以被认为是一个数据中心的一部分。
  • Consensus:在我们的文档中,我们使用 Consensus 来表明就 leader 选举和事务的顺序达成一致。由于这些事务都被应用到有限状态机上,Consensus 暗示 复制 状态机的一致性。
  • Gossip:Consul 建立在 Serf 的基础之上,它提供了一个用于多播目的的完整的 gossip 协议Serf 提供 成员关系,故障检测和事件广播。更多的信息在 gossip 文档中描述。这足以知道gossip 使用基于 UDP 的随机的点到点通信
  • LAN Gossip:它包含所有位于同一个局域网或者数据中心的所有节点
  • WAN Gossip:它只包含 Server。这些 server 主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
  • RPC:远程过程调用。这是一个允许 client 请求 server 的请求/响应机制。

Consul 的架构

上图中我们能看到有两个数据中心,标记为“DATACENTER1”和“DATACENTER2”。Consul对多数据中心有一流的支持并且希望这是一个常见的情况。

在每个数据中心,client 和 server 是混合的。一般建议有 3-5 台 server。这是基于有故障情况下的可用性和性能之间的权衡结果,因为越多的机器加入达成共识越慢。然而,并不限制client 的数量,它们可以很容易的扩展到数千或者数万台。

同一个数据中心的所有节点都必须加入 gossip 协议。这意味着 gossip 协议包含一个给定数据中心的所有节点。这服务有几个目的:

  • 第一:不需要在 client 上配置 server 地址。发现都是自动完成的
  • 第二:检测节点故障的工作不是放在 server上,而是分布式的。这是的故障检测相比心跳机制有更高的可扩展性
  • 第三:它用来作为一个消息 层来通知事件,比如 leader 选举发生时。

每个数据中心的 server 都是 Raft 节点集合的一部分。这意味着它们一起工作并选出一个 leader,一个有额外工作的 server。leader 负责处理所有的查询和事务。作为一 致性协议的一部分,事务也必须被复制到所有其他的节点。因为这一要求,当一个非 leader 的 server 收到一个 RPC 请求时,它将请求转发给集群 leader。

server 节点也作为 WAN gossip Pool 的一部分。这个 Pool不同于 LAN Pool,因为 它是为了优化互联网更高的延迟,并且它只包含其他 Consul server 节点。 这个 Po 的的是为了允许数据中心能够以 low-touch 的方式发现彼此。这使得一个新的数据中心可以很容易的加入现存的 WAN gossip。因为server 都运行在这个 pool 中,它 也支持跨数据中心请求。当一个 server 收到来自另一个数据中心的请求时,它随即转发给正确数据中心的一个 server。该 server 再转发给本地 leader。

这使得数据中心之间只有一个很低的合,但是由于故障检测,连接缓存和复用,跨数据中心的请求都是相对快速和可靠的。


http://chatgpt.dhexx.cn/article/78sInMLa.shtml

相关文章

Consul安装并运行

Consul安装并运行 一、安装 官网:https://www.consul.io/downloads.html 下载完成后只有一个consul.exe文件,硬盘路径下双击运行 查看 consul 版本信息: consul --version 使用开发模式启动: consul agent -dev 二、运行 通…

Consul

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储(配置中…

Consul详解

Spring Cloud 支持很多服务发现的软件,Eureka 只是其中之一,下面是 Spring Cloud 支持的服务发现软件以及特性对比: FeatureeuerkaConsulzookeeperetcd服务健康检查可配支持服务状态,内存,硬盘等(弱)长连接&#xff0c…

5分钟让你看懂Consul特性及搭建

一、前言 虽然说牛逼的公司都有那么几个牛逼的运维团队,牛逼的运维团队都有着神秘黑科技般敲代码的姿势;本人虽然不是一个运维工程师,但是有幸自己比较爱倒腾这些东西,也会那么一点点运维知识,虽然不算专业&#xff0…

consul简介

目录 Consul 简介 Consul 的使用场景 Consul 的优势 Consul 的角色 consul cluster集群架构图 Consul常用命令 consul agent 命令的常用选项 Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,具有分布式、高可用、高扩…

Consul 基本概念、内部原理

1.什么是Consul? Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格。 Consul需要数据平面并支持代理和本机集成模型…

Consul的介绍和基本使用

一、Consul的简单介绍 Consul是一套开源的分布式服务发现和配置管理系统,由HasiCorp公司用go语言开发的。提供了微服务系统中服务助理、配置中心、控制总线等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构造全方位的服…

Consul 注册中心介绍以及搭建

本篇重点介绍 Consul 是什么,它可以解决什么问题,它与现有软件的比较,以及如何开始使用它。 目录 1、常见的注册中心2、Consul 介绍3、Consul 特性4、Consul的基本架构5、Consul单节点安装与启动6、Consul启动命令详解7、了解Consul启动输出8…

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;在历年“真实切换”演练时“手软”的例…