Spring Cloud之Consul服务治理实战

目录

1、Consul是什么

1.1概念

1.2 Consul下载

1.3 Consul启动

2、Consul使用场景

3、Consul优势

4、Consul架构及原理

4.1 整体架构图

4.2 通讯机制

4.3 健康检测

4.4如何保证数据一致性

5、搭建Consul环境

5.1 本地Consul搭建

5.2 集群Consul搭建

5.2.1 安装Consul

5.2.2 启动各 Consul Server节点

5.2.3 组成集群服务

5.3 集群模式-Client配置

5.3.1 启动Client

5.3.2 将Client加入到集群

5.4 验证集群高可用


1、Consul是什么

1.1概念

consul是 HashiCorp 公司推出的一个开源服务注册发现工具,核心功能包含:健康检查,多数据中心,key/value存储等。主要用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案相比,Consul的使用比较简单。consul是使用Go语言实现,所以具有可移植性,安装包仅仅是一个可执行文件,方便安装,与Docker等轻量级容器可无缝配合 。

1.2 Consul下载

consul官网地址:www.consul.io

consul介绍:Consul Documentation | Consul | HashiCorp Developer

consul下载地址:Install | Consul | HashiCorp Developer

可以根据自己平台选择下载不同平台的安装包,这里就选择下载windows版本的。

下载后是一个压缩文件,解压后是一个exe文件。命令行进入到该exe文件的文件夹下(文件路径不要有中文。)或者直接该文件夹下输入cmd命令回车。(如果不想每次都进入该目录可以将该路径配置进环境变量的path路径即可。)

 

1.3 Consul启动

启动方式有两种:

1)本地开发模式

consul agent -dev    # 以开发模式启动,但UI无法正常显示

consul agent -dev -client 0.0.0.0 -ui # 以开发模式启动,UI可正常显示

2)集群模式

consul agent -service   # 以服务器的模式启动(需要集群)

启动consul服务后,浏览器输入:http://localhost:8500,显示如下界面。说明consul启动成功。

 

1)service表示当前注册的服务。默认consul server启动的同时注册自己,所以一开始就有一个consul服务。

2)nodes表示consul的集群节点。

3)dc1表示数据中心名称,默认是dc1(datacenter的缩写),可以通过下述命令启动时修改默认的数据中心名称:

# 启动时自定义数据中心名称

consul agent -dev -client=0.0.0.0 --datacenter=xintu

综上,consul下载安装并且启动完成之后就可以开发对应的微服务,然后在consul中进行服务注册了。

2、Consul使用场景

1))docker 实例的注册与配置共享

2)coreos 实例的注册与配置共享

3)vitess 集群

4)SaaS 应用的配置共享

5)与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

3、Consul优势

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

4、Consul架构及原理

4.1 整体架构图

Consul集群可以分布为: Leade节点、Follower和Candidate节点。Leader节点时集群的主节点,主要复制处理所有的写操作。而Follower节点属于集群的从节点,负责处理所有的写操作。Candidate节点时一个准备成为leader的节点,它会参与选举过程,以确定下一个Leader节点。

 

4.2 通讯机制

Consul集群中的节点通过RPC协议进行通讯。当一个节点需要向集群中的其他节点发送消息时,它会将消息发送到Leader节点。Leader节点会将消息广播到所有的Follower节点。当Follower节点接受到消息时,它会将消息存储到本地,并向Leader节点发送确认消息。

当Leader节点收到大多数Follower节点的确认消息时,它会认为消息已经被处理成功,并将结果返回给发送方。

4.3 健康检测

Consil集群中的节点之间还会定期进行心跳检测,以确保节点之间的连接正常。如果一个节点长时间没有收到其他节点的心跳消息,它会认为其他节点已经宕机,并将其从集群中移除。

4.4如何保证数据一致性

 Consul一致性协议采用 Raft 算法,用来保证服务的高可用. Raft是一种分布式一致性算法,用于保证多个节点之间数据的一致性。Consul使用Raft算法包确保集群中所有节点都具有相同的状态。这意味这当一个节点发生故障时,其他节点可用接管它等待工作,以确保服务的连续性。

5、搭建Consul环境

5.1 本地Consul搭建

接着上一节内容,我们直接在原有项目新建一个module, 命名为:springcloud-clientconsul-discovery。

 

新建完成后,在该module的pom.xml文件中,添加依赖如下,

<!--引入consul依赖,用于服务注册发现-->

<!--Consul Discovery-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-consul-discovery</artifactId>

</dependency>

<!--引入健康检查的依赖,用于健康检查监控-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

 

添加启动类,代码如下,

package com.xintu.springcloud;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;



@SpringBootApplication

@EnableDiscoveryClient //代表这是服务注册中心的一个客户端,通用的服务注册注解 可以表示consul、zk、nacos 具体根据导入的依赖判断

public class SpringBootConsulClientApp {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootConsulClientApp.class, args);

    }

}

添加YML配置:

server:

  port: 8085 # 服务端口



#向consul server 服务注册地址

spring:

    application:

      name: consulclient   #指定服务名称

    cloud:

      consul:

          host: localhost

          port: 8500

          discovery:

            service-name: ${spring.application.name}

            register-health-check: false #健康检查设置,默认是true,可以设置为false。但是同理不建议在生成环境关闭

执行启动类,打开consul管理界面,显示如下,

表示服务已经注册成功了。

总结:通过上述过程,则使用consul作为服务注册中心并且进行服务注册和服务发现的开发完成了。目前主流的服务注册中心有:eureka、nacos、consul、zookeeper。

5.2 集群Consul搭建

要想利用Consul提供的服务实现服务的注册与发现,我们需要搭建Consul Cluster 环境。

在Consul方案中,每个提供服务的节点上都要部署和运行Consul的agent,所有运行Consul agent节点的集合构成Consul Cluster。

Consul agent有两种运行模式:Server和Client。这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上 的应用服务无关。

以Server模式运行的Consul agent节点用于维护Consul集群的状态,官方建议每个Consul Cluster至少有3个或以上的运行在Server mode的Agent,Client节点不限。

与本地安装配置相比较,主要流程基本类似。集群模式下,需要注意三点:

以Linux版本为例,安装参考官网即可。https://developer.hashicorp.com/consul/downloads。

可以直接使用命令安装,或者下载zip包均可。

5.2.1 安装Consul

命令安装:

#sudo yum install -y yum-utils shadow-utils

#sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo

#sudo yum -y install consul

 

Zip包下载,

 

5.2.2 启动各 Consul Server节点

如果是zip方式,需要cd到consul.sh目录,以命令参数方式启动:

./consul agent -server -bootstrap-expect 2 -data-dir /etc/consul.d -node=节点名称 -bind=主机IP -datacenter=xintu-ui -client=0.0.0.0 &

各参数说明:

-server: 表示为consul服务节点。

-bootstrap-expext 2: 表示集群中至少有2台节点正常当前节点则可以正常工作。

-data-dir: 当前节点的数据存放位置。

-node: 表示当前节点名称。

-bind: 为当前容器环境的ip地址。

-datacenter:为节点的数据中心。

-client:为可以访问当前节点的ip信息。 #0.0.0.0 表示所有

&: 表示后台运行。

 

5.2.3 组成集群服务

前面各服务启动成功后,需要将所有节点组成一个集群模式。其中一台机器作为临时主节点,其余机器作为从节点。比如有192.168.17.128,192.168.17.129, 192.168.17.130三台机器。现在192.168.17.128作为主节点,129和130作为从节点。此时需要在129和130机器上,分别执行命令 ./consul join 192.168.17.128 ,意思是将该两台节点和128主机组成集群服务。 组成集群后,可以使用命令consul members 查集群成员信息。

 

5.3 集群模式-Client配置

5.3.1 启动Client

启动命令如下,

./consul agent -client=0.0.0.0 -data-dir /etc/consul.d -datacenter=dc-bind=192.168.17.1  -node=client-1

说明:这里的ip: 192.168.17.1。 server端都是在虚拟机上启动的服务,这里不能用本地的ip,需要用linux机器的 ip最后一位为1。不然本地客户端无法链接到server端的8300端口。

5.3.2 将Client加入到集群

Client启动完成后, 需要将该client加入到前面建的Server集群中,执行命令如下,

consul join 192.168.17.128.

然后,通过控制台页面查看集群状态,访问地址:http://192.168.17.128:8500/ui/。

 

5.4 验证集群高可用

可用将前面的Server节点分别进行摘除验证,看服务调用是否正常。在摘除部分节点后,发现服务依然是可用的。

以上!

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

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

相关文章

VUE使用el-ui的form表单输入框批量搜索<VUE专栏三>

针对form表单的输入框单号批量查询&#xff0c;这里用换行符进行分割&#xff0c;注意v-model不要使用.trim 前端代码&#xff1a; <el-form-item label"SKU编码:" prop"prodNumbers"><el-input type"textarea" :rows"4" pla…

Spring 之依赖注入底层原理

Spring 框架作为 Java 开发中最流行的框架之一&#xff0c;其核心特性之一就是依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;。在Spring中&#xff0c;依赖注入是通过 IOC 容器&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;来实现…

电动牙刷语音芯片,音乐播放ic选型?

牙医认为每天刷牙两次对于口腔健康至关重要。但是有些人会因为不良的刷牙习惯而受害&#xff0c;比如刷牙时间不够长。而刷牙不当会导致牙齿出现问题&#xff0c;例如蛀牙、污渍和口臭。 为了保护牙齿健康&#xff0c;很多家庭开始尝试使用电动牙刷。电动牙刷通过嗡嗡地振动消…

springboot2.7及springboot3中自动配置的变化

大家在面试中问到springboot如何实现的自动配置 诶&#xff0c;不要傻背错八股了&#xff0c;以往 入口类上的SpringBootApplication注解引入EnableAutoConfiguration&#xff0c;再 Import({AutoConfigurationImportSelector.class}) &#xff0c;其中代码实现根据META-INF/sp…

实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全

金融“活水”润泽千行百业&#xff0c;对金融客户来说&#xff0c;由于业务场景存在特殊性和复杂性&#xff0c;网络安全必然是一场“持久战”。如何在事前做好安全部署&#xff0c;构建威胁情报分析的防护体系至为重要&#xff0c;实现更为精准、高效的动态防御。 客户名片 …

Java实现打印杨辉三角形,向左、右偏的平行四边形这三个图形代码程序

目录 前言 一、打印杨辉三角形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 二、向左偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 三、向右偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代…

一个评测模型+10个问题,摸清盘古、通义千问、文心一言、ChatGPT的“家底”!...

‍数据智能产业创新服务媒体——聚焦数智 改变商业毫无疑问&#xff0c;全球已经在进行大模型的军备竞赛了&#xff0c;“有头有脸”的科技巨头都不会缺席。昨天阿里巴巴内测了通义千问&#xff0c;今天华为公布了盘古大模型的最新进展。不久前百度公布了文心一言、360也公布了…

网络系统集成综合实验(六)| 访问控制列表ACL配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 &#xff08;一&#xff09;基本ACL实验 Step1&#xff1a;构建拓扑图如下&#xff1a; Step2&#xff1a;PC的IP地址分别配置如下&#xff1a; Step3&#xff1a;路由器的IP地址配置如下 Step4&#xff…

十、CNN卷积神经网络实战

一、确定输入样本特征和输出特征 输入样本通道数4、期待输出样本通道数2、卷积核大小33 具体卷积层的构建可参考博文&#xff1a;八、卷积层 设定卷积层 torch.nn.Conv2d(in_channelsin_channel,out_channelsout_channel,kernel_sizekernel_size,padding1,stride1) 必要参数&a…

大数据五次作业回顾

文章目录1. 大数据作业11.本地运行模式部分2. 使用scp安全拷贝部分2. 大数据作业21、Rrsync远程同步工具部分2、xsync集群分发脚本部分3、集群部署部分3. 大数据作业31. 配置历史服务器及日志2. 日志部分3. 其他4. 大数据作业4编写本地wordcount案例一、源代码二、信息截图5. 大…

matlab流场可视化后处理

1流体中标量的可视化 流体力学中常见的标量为位置、速度绝对值、压强等。 1.1 云图 常用的云图绘制有pcolor、image、imagesc、imshow、contourf等函数。 这里利用matlab自带的wind数据作为演示案例&#xff0c;显示二维云图的速度场。 close all load wind x2x(:,:,5);y2y…

介绍MSYS2 在windows下与使用

系列文章目录 文章目录系列文章目录前言一、MSYS下载二、安装三、使用MSYS2安装CMake工具前言 MSYS的独立改写版本 MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08…

闭关修炼(0.0 pytorch基础学习)1

基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…

G761-3005B伺服阀放大器

G761-3005B伺服阀放大器&#xff0c;两级设计能够实现高水平设备性能、更快的周期时间和更高的准确性&#xff0c;最终为客户带来更高的生产效率 双线圈力矩马达高可靠性冗余设计 力矩马达配置双精度喷嘴精确流量控制和可预测性 干式力矩马达设计消除力矩马达气隙中可能导致…

数据结构-二叉树(前中后层序遍历-代码实现)

一、概要 二叉树的遍历方式包括前序遍历、中序遍历、后序遍历和层序遍历&#xff0c;具体定义如下&#xff1a; 前序遍历&#xff1a;先访问根节点&#xff0c;然后按照前序遍历的方式递归访问左子树和右子树。 中序遍历&#xff1a;先按照中序遍历的方式递归访问左子树&#…

Spring————java的反射机制,Spring的IOC和DI

一、认识Spring 1.1、Spring家族 SpringFramework&#xff1a; Spring框架&#xff1a;是Spring中最早核心的技术&#xff0c;也是所有其他技术及的基础。 SpringBoot:Spring是用来简化开发。而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。 SpringCloud&#xf…

v851s gpio 应用程序编写

1. 查看硬件电路图SCH_Schematic1_2022-11-23 &#xff0c;查找合适的gpio 作为使用pin 在这里我们选取 GPIOH14&#xff08;注意目前开发使用这个pin 作为触摸屏的pin脚&#xff0c;需要将触摸屏connect断开&#xff09; &#xff0c;因为 可以通过排插使用杜邦线将其引出&am…

Maven高级-属性多环境配置与应用

Maven高级-属性&多环境配置与应用4&#xff0c;属性4.1 属性4.1.1 问题分析4.1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version4.2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效4.3…

mysql慢查询

目录标题如何收集慢SQL-- ELK体系收集慢日志分析SQL优化添加索引优化慢sql通过拆分冷热数据优化读写分离预防我们优化的思路是“收集——分析——优化——预防”了解完如何收集慢日志之后&#xff0c;就要开始分析 SQL 了。优化 SQL 的基础手段是 EXPLAIN&#xff0c;我们要收起…

Spark SQL实战(04)-API编程之DataFrame

1 SparkSession Spark Core: SparkContext Spark SQL: 难道就没有SparkContext&#xff1f; 2.x之后统一的 package com.javaedge.bigdata.chapter04import org.apache.spark.sql.{DataFrame, SparkSession}object SparkSessionApp {def main(args: Array[String]): Unit …