【服务治理中间件】consul介绍和基本原理

目录

一、CAP定理

二、服务注册中心产品比较

三、Consul概述

3.1 什么是Consul

3.2 Consul架构

3.3 Consul的使用场景

3.4 Consul健康检查

四、部署consul集群

4.1 服务器部署规划

4.2 下载解压

4.3 启动consul

五、服务注册到consul


一、CAP定理


CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了CP系统,但是CAP不可同时满足。因此在进行分布式架构设计时,必须做出取舍。


二、服务注册中心产品比较


服务注册中心主流产品如下:

Zookeeper和Consul保证的是CP,而Eureka则是AP,Nacos不仅支持CP也支持AP。

当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是Zookeeper会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个Zookeeper集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得Zookeeper集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

所以Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:

  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
  2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
  3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。


三、Consul概述


3.1 什么是Consul


Consul是一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。这些功能中的每一项都可以根据需要单独使用,也可以一起使用来构建一个完整的服务网格。Consul需要一个数据平面,并支持代理和原生集成模型。Consul提供了一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如Envoy

Consul的主要功能有:

  • 服务发现 : Consul的客户端可以注册一个服务,比如api或mysql,其他客户端可以使用Consul来发现特定服务的提供者。使用DNS或HTTP,应用程序可以很容易地找到他们所依赖的服务。
  • 健康检查 : Consul客户端可以提供任何数量的健康检查,要么与给定的服务相关联(如: "webserver是否返回200 OK"),要么与本地节点相关联(如: "内存利用率是否低于90%")。这些信息提供给运维人员用来监控集群的健康状况,并被服务发现组件来路由流量(比如: 仅路由到健康节点)
  • KV存储 : 应用程序可以利用Consul的层级K/V存储来实现任何目的,包括动态配置、功能标记、协调、领导者选举等。Consul提供了HTTP API,使其非常简单以用。
  • 安全服务通信:Consul可以为服务生成和分发TLS( 传输层安全性协议)证书,以建立相互的TLS连接。可以使用Intention来定义哪些服务被允许进行通信。服务隔离可以通过可以实时更改Intention策略轻松管理,而不是使用复杂的网络拓扑结构和静态防火墙规则。
  • 多数据中心:Consul支持开箱即用的多数据中心。这意味着Consul的用户不必担心建立额外的抽象层来发展到多个区域。

Consul的设计对DevOps社区和应用开发人员都很友好,使其成为现代弹性基础架构的完美选择。

3.2 Consul架构


Consul是一个分布式、高可用的系统。每个为Consul提供服务的节点都会运行一个Consul Agent。运行代理不需要发现其他服务或获取/设置密钥/值数据。Agent负责对节点上的服务以及节点本身进行健康检查。

Consul Agent 分为两种模式, Server 和 Client模式,一般我们得部署模型是 Server + Client的模式(当然也可以纯Server), Server 具有Client的全部功能, 但是由于Server负责存储数据,并且强一致性模型的缘故, Server数是有限的(3-5个Server节点,Client可以无限扩展的)更多信息可参考架构概述

Agent与一个或多个Consul Server对话。Consul Server是存储复制数据的地方。Server本身会选出一个Leader。虽然Consul可以用一台Server来运作,但建议使用3到5台,以避免故障情况导致数据丢失。建议每个数据中心采用Consul服务器集群。

Server Agent维护着一个目录(Catalog),这个目录(Catalog)是由Agent提交的信息汇总形成的。目录维护着集群的高层视图,包括哪些服务可用,哪些节点运行这些服务,健康信息等。

需要发现其他服务或节点的基础结构组件可以查询任何Consul Server或任何Consul Agent。Agent将查询自动转发到Server。 每个数据中心都运行一个Consul Server集群。当有跨数据中心的服务发现或配置请求时,本地Consul Server将请求转发到远程数据中心并返回结果。

从宏观角度看, Consul架构是这样的。

我们来分析一下这张图,并描述一下每一个部分。首先,我们可以看到有两个数据中心,分别标注为 "DATACENTER1"和 "DATACENTER2"。Consul对多个数据中心有天然非常好的支持,并希望这是常见的情况。

在每个数据中心内,我们有ClientServer的混合。预计会有3到5台Server。这是在权衡故障场景下可用性性能之间取得平衡的结果,因为随着机器的增加,共识的速度会逐渐变慢。然而,Client的数量没有限制,它们可以轻松地扩展到数千或数万。

所有在数据中心的代理都会参与一个Gossip协议。这意味着有一个Gossip池,其中包含了某个数据中心的所有Agent。这有几个目的:

  • 第一,客户端不需要配置Server的地址,发现工作是自动完成的。
  • 第二,检测代理故障的工作不放在Server上,而是分布式的。这使得故障检测的扩展性比原生的心跳方案要强得多。同时,它还为节点提供了故障检测,如果代理无法到达,那么该节点可能已经发生了故障。
  • 第三,它被用作消息层,当发生重要事件(如Leader 选举)时进行通知。

每个数据中心的Server都是单一Raft对等集的一部分。这意味着它们共同选出一个单一的Leader,一个被选中的Server,它有额外的职责。Leader负责处理所有查询和事务。事务也必须复制到所有参与共识协议的分片。由于这一要求,当None-Leader Server收到RPC请求时,它会将其转发给集群Leader。

Server Agent还作为WAN(广域网) Gossip Pool的一部分进行操作。这个池子与LAN(局域网)池不同,因为它是针对互联网的较高延迟进行优化的,WAN池只包含其他Consul 数据中心的Sever Agent。这个池的目的是让数据中心以低接触的方式发现彼此。让一个新的数据中心上线就像加入现有的WAN Gossip 池一样简单。因为服务器都在这个池中运行,所以还可以实现跨数据中心的请求。当一台Server收到一个不同数据中心的请求时,它会将其转发到正确数据中心的随机Server。然后该Servevr可能会转发到本地Leader。

这导致数据中心之间的耦合度很低,但由于故障检测、连接缓存和多路复用,跨数据中心的请求相对快速可靠。

一般情况下,不同的Consul数据中心之间不会复制数据。当对另一个数据中心的资源进行请求时,本地Consul服务器会将该资源的RPC请求转发给远程Consul服务器,并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会以其他方式影响本地数据中心。

在一些特殊情况下,可以复制有限的数据子集,比如使用Consul内置的ACL复制功能,或者使用consul-replicate等外部工具。 在某些地方,Client Agent可能会从Server上缓存数据,使其在本地可用,以提高性能和可靠性。例如, 包括连接证书和它允许Client代理对入站连接请求做出本地决定,而无需往返Server的场景。一些API端点还支持可选的结果缓存。这有助于可靠性,因为即使与服务器的连接中断或服务器暂时不可用,本地Agent仍然可以继续从缓存中响应一些查询,如服务发现或Connect授权。

官网: Consul by HashiCorp

3.3 Consul的使用场景


Consul的应用场景包括服务发现、服务隔离、服务配置:

  • 服务发现场景中consul作为注册中心,服务地址被注册到consul中以后,可以使用consul提供的dns、http接口查询,consul支持health check。
  • 服务隔离场景中consul支持以服务为单位设置访问策略,能同时支持经典的平台和新兴的平台,支持tls证书分发,service-to-service加密。
  • 服务配置场景中consul提供key-value数据存储功能,并且能将变动迅速地通知出去,借助Consul可以实现配置共享,需要读取配置的服务可以从Consul中读取到准确的配置信息。
  • Consul可以帮助系统管理者更清晰的了解复杂系统内部的系统架构,运维人员可以将Consul看成一种监控软件,也可以看成一种资产(资源)管理系统。

比如:docker实例的注册与配置共享、coreos实例的注册与配置共享、vitess集群、SaaS应用的配置共享、Consul与confd服务集成,动态生成nginx和haproxy配置文件或者Consul结合nginx构建高可用可扩展的Web服务。

3.4 Consul健康检查


Consul的一个基本功能是提供系统级和应用级健康检查。如果健康检查与某个服务关联,则称为是应用级的;如果不予服务关联,则监控整个节点的健康。

check定义在配置文件中,或运行时通过HTTP接口添加。Check是通过HTTP与节点保持一致。

有五种check方法:

  • Script+ Interval
  • HTTP+ Interval
  • TCP+ Interval
  • Timeto Live(TTL)
  • Docker+ interval

参考文章:【Consul】实践指导-健康检查(Checks)_consul health check-CSDN博客


四、部署consul集群


4.1 服务器部署规划

主机名

IP

角色

master1

192.168.2.139

server

node1

192.168.2.140

client

node2

192.168.2.210

client

4.2 下载解压



# 下载安装包
https://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip
# 解压
unzip   consul_1.18.1_linux_amd64.zip

4.3 启动consul


在master1上:
cd /opt/
nohup ./consul agent -server -bootstrap  -bind=192.168.2.139   -client=192.168.2.139 -data-dir=data -ui -node=192.168.2.139 &

这样就启动了master1上的consul

在node1上:
cd /opt/
nohup ./consul agent -bind=192.168.2.140 -client=192.168.2.140 -data-dir=data -node=192.168.2.140 -join=192.168.2.139 &

在node2上:
cd /opt/
nohup ./consul agent -bind=192.168.2.141 -client=192.168.2.141 -data-dir=data -node=192.168.2.141 -join=192.168.2.139 &

各个节点都启动完之后

在浏览器访问http://192.168.2.139:8500/

可看到consul的管理界面

192.1682.139 为Leader

Consul 的 Web 管理界面有一些菜单,我们这里做一下简单的介绍:

  • Services,管理界面的默认页面,用来展示注册到 Consul 的服务,启动后默认会有一个 consul 服务,也就是它本身。
  • Nodes,在 Services 界面双击服务名就会来到 Services 对于的 Nodes 界面,Services 是按照服务的抽象来展示的,Nodes 展示的是此服务的具体节点信息。比如启动了两个订单服务实例,Services 界面会出现一个订单服务,Nodes 界面会展示两个订单服务的节点。
  • Key/Value ,如果有用到 Key/Value 存储,可以在界面进行配置、查询。
  • ACL,全称 Access Control List,为访问控制列表的展示信息。
  • Intentions,可以在页面配置请求权限。

五、服务注册到consul


如下示例将ambariServer服务注册奥consul

curl -X PUT -d '                                      
{                                                    
    "id": "ambari-server",                                   
    "name": "ambari-server",                                 
    "address": "192.168.2.152",                      
    "port": 8080,                                    
    "tags": ["ambari-server-service"],                       
    "checks": [{                                     
    	"http": "http://192.168.2.152:8080/",        
    	"interval": "5s"                             
    }]                                               
}' http://192.168.2.139:8500/v1/agent/service/register

注册成功 且状态健康

把consul中注册的ambari-server服务移除

curl --request PUT http://192.168.2.139:8500/v1/agent/service/deregister/ambari-server

参考引用文章:Consul 架构 | Consul

Nacos和Consul的区别 - yifanSJ - 博客园
【Hadoop】HA简介&CAP理论的关系_hadoop cap-CSDN博客

原文链接:【超详细】Consul的安装的使用附多环境配置(傻瓜式教程)_consul安装与配置-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/603585.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32使用ADC单/多通道检测数据

文章目录 1. STM32单片机ADC功能详解 2. AD单通道 2.1 初始化 2.2 ADC.c 2.3 ADC.h 2.4 main.c 3. AD多通道 3.1 ADC.c 3.2 ADC.h 3.3 main.c 3.4 完整工程文件 1. STM32单片机ADC功能详解 STM32单片机ADC功能详解 2. AD单通道 这个代码实现通过ADC功能采集三脚电…

掌握Android Fragment开发之魂:Fragment的深度解析(上)

Fragment是Android开发中用于构建动态和灵活界面的基石。它不仅提升了应用的模块化程度,还增强了用户界面的动态性和交互性,允许开发者将应用界面划分为多个独立、可重用的部分,每个部分都可以独立于其他部分进行操作。本文将从以下几个方面深…

ttkbootstrap界面美化系列之PanedWindow(七)

在界面设计中经常用PanedWindow控件来对整个界面进行切割布局,让整个界面看上去有层次感,不至于说杂乱无章。在我之前的文章中有对tkinter的该控件做了详细的介绍,链接如下基于Tkinter的PanedWindow组件进行窗口布局-CSDN博客 本文主要是介绍…

无人直播需要什么软件系统?最新AI实景自动无人直播软件:智能化引领直播拓客新时代

随着互联网的快速发展(无人直播招商加盟:hzzxar)直播行业已经成为商家品牌推广和商品销售的热门方式。近年来,人工智能技术的飞速发展,催生了一款令人惊叹的AI实景自动无人直播软件,为商家提供了全新的直播…

2024视觉与学习青年学者研讨会(VALSE 2024)热点推文预告

视觉与学习青年学者研讨会(VALSE)是国内人工智能领域顶尖学者一年一度的研讨会。该会议的特点是大、全、新。会议的规模大,参会者达到五千人以上;会议的主题全,全面覆盖人工智能的各大领域;会议的内容新&am…

SQL奇难怪状知识点分享

SQL执行顺序 select 语句的完整结构: select 去重 要查询的字段 from表(注意:表和字段可以取别名) xxxx(left/right/full) join 要连接的表 on 等值判断(顺序:先on再where&#x…

内存卡罢工,数据危机?别急,有救!

在日常生活和工作中,我们越来越依赖于各种电子设备来存储重要数据。其中,内存卡因其便携性和大容量而广受欢迎。然而,当内存卡突然损坏打不开时,我们该如何应对?本文将为您详细解析这一问题,并提供有效的解…

JAVA版本的ATM编程问题记录

前段时间用C语言写了个银行ATM系统,还写了一篇文章记录了一些,C语言的ATM文章。后来又用IDEA写了一个JAVA版本的银行ATM。有人就会问为啥浪费这个时间写ATM呢?🧐其实是我本科代码没学好,所以现在想利用比较熟悉的ATM系…

探秘编程之旅:Baidu Comate 智能代码助手的魔法揭秘

目录 Baidu Comate智能代码助手1.场景需求2.安装步骤3.功能介绍3.1 /指令3.2 插件3.3 #知识 4.使用体验5.总结 Baidu Comate智能代码助手 智能编程助手的意义在于提升编程体验和效率,使开发人员能够更轻松、更快速地完成编码任务,是如今人工智能技术的一…

Flink DataSink介绍

介绍 Flink DataSink是Apache Flink框架中的一个重要组件,它定义了数据流经过一系列处理后最终的输出位置。以下是关于Flink DataSink的详细介绍: 概念:DataSink主要负责对经过Flink处理后的流进行一系列操作,并将计算后的数据结…

Linux学习笔记1

1.背景认知 可能很多人还没有接触Linux,会有点畏惧,我们可以把Linux类比成Windows, 下面是Windows和Linux的启动对比 Windows:上电后一开始屏幕是黑黑的---bios在启动Windows----Windows之后找到c盘启动各种应用程序 Linux&am…

OFDM802.11a的FPGA实现(十)导频插入(含verilog和matlab代码)

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现 目录 1.前言2.插入导频原理3.硬件实现4.Matlab仿真5.ModelSim仿真6.结果对比验证7.verilog代码 1.前言 前面一篇文章完成了星座图的映射,今天继续设计后面的模块。在接收机…

【Keil程序大小】Keil编译结果Code-RO-RW-ZI分析

【Keil程序大小】Keil编译结果Code-RO-RW-ZI分析 下图为keil编译后的结果: 单位为Byte。Code是程序大小。RO是常量大小。RW是读写变量占用大小,如已初始化的静态变量和全局变量。ZI是全零变量占用大小,如未初始化的static修饰的静态变量、全局…

聊聊BitLocker

最近有消息称微软决定在Windows 11 24H2中默认开启BitLocker,这个消息在网上引起了不小的波澜。有人说,对于我们这些普通用户来说,BitLocker真的有必要吗? 什么是BitLocker BitLocker 是一项 Windows 安全功能,可为整…

如何使用多协议视频汇聚/视频安防系统EasyCVR搭建智慧园区视频管理平台?

智慧园区作为现代化城市发展的重要组成部分,不仅承载着产业升级的使命,更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化,将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…

如何制作有趣的gif?这个方法别错过

是否在社交媒体上看到过很多有趣好玩的gif动图,有的搞笑有趣有的又很可爱。大家有没有想过自己动手制作gif动画呢?接下来,就给大家分享一招gif在线制作(https://www.gif5.net/)的方法,超简单不需要下载任何…

什么牌子的洗地机质量最好?四款耐用高分产品推荐

洗地机具备了吸尘、擦拭、除菌等多种功能,可以一次完成多种清洁任务,帮助用户更高效地保持家居整洁,节省时间和精力,备受人们的喜爱。但是怎么挑选到优质的洗地机一直是大家关注的问题。今天,笔者将结合自己在家电行业…

什么是驱动数字签名?如何获取驱动数字签名?

Windows 驱动程序承载着计算机实现的各种内核和用户模式功能。如果驱动程序被黑客攻击,可能会产生很多问题。Windows通过数字签名来验证驱动程序包的完整性及发布者的身份。2020年10月的安全更新中,微软加强了对驱动软件的验证,如果Windows无…

【微积分听课笔记】全微分,二元极值,Double Integral

6.6 二元函数的极值_哔哩哔哩_bilibili 此笔记为听课笔记,宋浩老师微积分~ 最近诸事缠身,会有种会不会只做一件事好些。实际上,关键在于动力,我不可能每次都准备充分。动力,分配,这是目前进入大学我正在学…

【yolov8 项目打包】pyinstaller 打包pyQt5 界面为exe

创建一篇博客文章,介绍如何使用PyInstaller将PyQt5界面打包为exe文件,并且处理与YOLOv8模型相关的文件,可以按照以下结构进行: 标题:使用PyInstaller将PyQt5界面与YOLOv8模型打包为Windows可执行文件 引言 在机器学习…