Spring Cloud之Consul服务治理实战

这篇具有很好参考价值的文章主要介绍了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

Spring Cloud之Consul服务治理实战

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

Spring Cloud之Consul服务治理实战

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

Spring Cloud之Consul服务治理实战

 

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启动成功。

Spring Cloud之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节点。

Spring Cloud之Consul服务治理实战

 

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。

Spring Cloud之Consul服务治理实战

 

新建完成后,在该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>

Spring Cloud之Consul服务治理实战

 

添加启动类,代码如下,

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管理界面,显示如下,

Spring Cloud之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

Spring Cloud之Consul服务治理实战

 

Zip包下载,

Spring Cloud之Consul服务治理实战

 

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 表示所有

&: 表示后台运行。

Spring Cloud之Consul服务治理实战

 

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 查集群成员信息。

Spring Cloud之Consul服务治理实战

 

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.

Spring Cloud之Consul服务治理实战

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

Spring Cloud之Consul服务治理实战

 

5.4 验证集群高可用

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

以上!文章来源地址https://www.toymoban.com/news/detail-406424.html

到了这里,关于Spring Cloud之Consul服务治理实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

            前文讲解,完成了springboot、spring security、Oauth2.0的继承,实现了对系统资源的安全授权、允许获得授权的用户访问,也就是实现了单一系统的全部技术开发内容。         Springboot是微服务框架,单一系统只能完成指定系统的功能;那么多个单一系统是如何实现

    2024年02月12日
    浏览(42)
  • Spring Cloud Alibaba-02-Nacos Discovery服务治理及负载均衡

    Lison dreamlison@163.com , v1.0.0 , 2023.05.10 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: 一旦服务提供者地址变化,就需要手工修改代码 一旦是多个服务提供

    2024年02月22日
    浏览(60)
  • 云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 今天我们讲解Spring Cloud微服务的第一代实现:Spring Cloud Netflix Eureka 是 Netflix 公司开发的一款开源的服务注册与发现组件。 Spring Cloud 使用 Spring Boot 思想为 Eur

    2024年02月08日
    浏览(64)
  • 微服务 Spring Cloud 2,一文讲透微服务核心架构(注册中心、服务通信、服务监控、服务追踪、服务治理)

    大家好,我是哪吒。 疫情已经过去一年了,可是,经济貌似还没有复苏的迹象,感觉更差了, 今年是过去十年最差的一年,却可能是未来十年最好的一年? 裁员风波,一波接一波,根本没有停下来的迹象。 失业了怎么办?找工作呀~ 这么卷了吗?初级程序员就要会微服务了

    2024年02月05日
    浏览(67)
  • Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目

    Spring Cloud开发实践(一): 简介和根模块 Spring Cloud开发实践(二): Eureka服务和接口定义 Spring Cloud开发实践(三): 接口实现和下游调用 Spring Cloud开发实践(四): Docker部署 Spring Cloud开发实践(五): Consul - 服务注册的另一个选择 Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目

    2024年02月05日
    浏览(33)
  • Spring Cloud开发实践(七): 集成Consul配置中心

    Spring Cloud开发实践(一): 简介和根模块 Spring Cloud开发实践(二): Eureka服务和接口定义 Spring Cloud开发实践(三): 接口实现和下游调用 Spring Cloud开发实践(四): Docker部署 Spring Cloud开发实践(五): Consul - 服务注册的另一个选择 Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目

    2024年02月07日
    浏览(40)
  • [Spring Cloud] Nacos 实战 + Aws云服务器

    Java云原生微服务的发展史可以追溯到近几年云计算和微服务架构的兴起。以下是一个简化的概述: 初始阶段:在云原生和微服务概念出现之前,Java应用程序通常是单体应用,所有功能都打包在一个应用中。这些应用程序部署在大型机上,随着业务需求的增长,这种模式的扩

    2024年02月04日
    浏览(42)
  • 云原生微服务 Spring Cloud Hystrix 降级、熔断实战应用

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 多个微服务之间调用的时候,假如微服

    2024年02月08日
    浏览(42)
  • Spring Cloud 实战系列之 Zuul 微服务网关搭建及配置

    用mavan搭建也可以。(重要的是后面pom里应该引入那些依赖,application.yml怎么配置) 由于开始构建项目时选择了Eureka Server,所以pom.xml中不需要手动添加依赖了 首先在启动类SpringcloudApplication中添加EurekaServer的注解:@EnableEurekaServer 访问注册中心:按照配置的端口号访问。我这

    2024年03月10日
    浏览(42)
  • Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

    专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏: Python 专栏: Redis 专栏: TensorFlow 专栏: Logback 专栏: 量子计算: 量子计算 | 解密著名量子算法Shor算法和Grover算法 AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于lib

    2024年02月05日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包