springcloud分布式之consul探索(代码片段)

烟花散尽13141 烟花散尽13141     2022-11-30     570

关键词:

文章目录

之前罗列了eureka作为服务治理的整合,并简单介绍了eureka的工作原理。eureka在cap理论中遵循了AP原理。

consul安装

点我官网下载

  • 在官网下载的jar解压后里面执行一个可执行文件consul.我们将consul移动到我们自己的目录下。并形成以下文件结构方便日后调试配置。

  • conf/dev.json : 我们配置文件,我们也可以使用系统默认的。

  • data/node-id : 节点信息

  • /log/consul-**.log: 日志文件

  • dev.json里配置的都可以在consul启动命令里加入。这里放在dev.json方便我们查看配置信息

consul agent -dev -config-dir=/data/services/consul/conf

  • 以上命令就可以启动consul了。

==> Starting Consul agent...
           Version: 'v1.7.3'
           Node ID: 'ebe4a279-8e4e-dfc9-7f68-4652bfb27f3a'
         Node name: 'Consul'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
      Cluster Addr: 192.168.44.131 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

    2022-03-18T18:49:58.102-0700 [INFO]  agent.server.raft: initial configuration: index=1 servers="[Suffrage:Voter ID:ebe4a279-8e4e-dfc9-7f68-4652bfb27f3a Address:192.168.44.131:8300]"
    2022-03-18T18:49:58.103-0700 [INFO]  agent.server.serf.wan: serf: EventMemberJoin: Consul.dc1 192.168.44.131
    2022-03-18T18:49:58.103-0700 [INFO]  agent.server.raft: entering follower state: follower="Node at 192.168.44.131:8300 [Follower]" leader=
    2022-03-18T18:49:58.103-0700 [INFO]  agent.server.serf.lan: serf: EventMemberJoin: Consul 192.168.44.131
    2022-03-18T18:49:58.104-0700 [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=udp
    2022-03-18T18:49:58.104-0700 [INFO]  agent.server: Adding LAN server: server="Consul (Addr: tcp/192.168.44.131:8300) (DC: dc1)"
    2022-03-18T18:49:58.104-0700 [INFO]  agent.server: Handled event for server in area: event=member-join server=Consul.dc1 area=wan
    2022-03-18T18:49:58.104-0700 [INFO]  agent: Started DNS server: address=0.0.0.0:8600 network=tcp
    2022-03-18T18:49:58.107-0700 [INFO]  agent: Started HTTP server: address=[::]:8500 network=tcp
    2022-03-18T18:49:58.108-0700 [INFO]  agent: Started gRPC server: address=[::]:8502 network=tcp
    2022-03-18T18:49:58.109-0700 [INFO]  agent: started state syncer
==> Consul agent running!
    2022-03-18T18:49:58.166-0700 [WARN]  agent.server.raft: heartbeat timeout reached, starting election: last-leader=
    2022-03-18T18:49:58.166-0700 [INFO]  agent.server.raft: entering candidate state: node="Node at 192.168.44.131:8300 [Candidate]" term=2
    2022-03-18T18:49:58.166-0700 [INFO]  agent.server.raft: election won: tally=1
    2022-03-18T18:49:58.166-0700 [INFO]  agent.server.raft: entering leader state: leader="Node at 192.168.44.131:8300 [Leader]"
    2022-03-18T18:49:58.167-0700 [INFO]  agent.server: cluster leadership acquired
    2022-03-18T18:49:58.168-0700 [INFO]  agent.server: New leader elected: payload=Consul
    2022-03-18T18:49:58.202-0700 [INFO]  agent.server.connect: initialized primary datacenter CA with provider: provider=consul
    2022-03-18T18:49:58.202-0700 [INFO]  agent.leader: started routine: routine="CA root pruning"
    2022-03-18T18:49:58.202-0700 [INFO]  agent.server: member joined, marking health alive: member=Consul
    2022-03-18T18:49:58.202-0700 [INFO]  agent: Synced node info

后台启动

nohup consul agent -dev -config-dir=/data/services/consul/conf >> /data/services/consul/log/consul.log &

  • 至此服务安装启动成功。

客户端注册

  • 这里的客户端和eureka一样。在payment-provider和order-consumer在consul看来都是客户端。这里简单描述下payment-provider的注册流程。order是一样的操作

  • 首先我们通过idea的自动提示知道springcloud的consul中的prefer-ip-address默认是关闭了。这个配置会影响到啥的。我们看看下面这张是默认注册上去的服务。

  • 没有开启prefer-ip-address的话我们注册上去的就说localhost。这个在实验场景下我们可以是在同一个ip下的。真实场景中肯定是在不同机器上的。localhost就会调不通。我们上面就是因为localhost导致后面的service checks状态是×。

  • 这个时候我们的ip注册进去了。而且services checks 也是√了。

pom引入


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

  • 这里我们不在介绍框架的基础搭建了。需要源码的直接上git

点我下载

配置文件



spring:
  cloud:
    consul:
      host: 192.168.44.131
      port: 8500
      discovery:
        service-name: $spring.application.name
        register: true
        prefer-ip-address: true

启动注解

-启动类上加入@EnableDiscoveryClient

订单调用

  • 这里订单模块注册就不说勒。重复上述payment注册就行了。或者说order不注册也是可以的。因为在演示场景中是order借助consul调用payment.只需要保证payment成功注册且可以掉通就行了。

  • 我们只需要修改根地址。这里的是注册在consul中的服务名。

consul集群搭建

  • 集群和单机的区别就是多了集群组了。主要加入集群ip组

"retry_join": [ 
 "x.x.x.1",
 "x.x.x.2",
 "x.x.x.3"
 ]

  • 这里需要不同的机器上搭建。这里为了方便我们采用docker方式安装

docker安装

单机安装


docker run -d -p 8500:8500 --restart=always --name=consul consul:latest agent -server -bootstrap -ui -node=1 -client='0.0.0.0'

可以忽略

因为docker 默认的 docker0 虚拟网卡是不支持直接设置静态ip的。所以我们先创建一个自己的虚拟网络。

sudo docker network create --subnet=172.18.0.0/24 staticnet

可能会报错
Error response from daemon: Pool overlaps with other one on this address space

这种情况我们只需要换一个ip就行了。

sudo docker network create --subnet=172.16.0.0/24 staticnet

docker 默认IP

上述操作在虚拟机中可能会破坏虚拟机的网络问题。所以笔者建议大家使用docker默认的ip就行了。



    "datacenter": "dc1",
    "log_level": "INFO",
    "node_name": "s_3",
    "server": true,
    "bootstrap_expect": 2,
    "bind_addr": "0.0.0.0",
    "client_addr": "0.0.0.0",
    "ui": true,
    "ports": 
        "dns": 8600,
        "http": 8500,
        "https": -1,
        "server": 8300,
        "serf_lan": 8301,
        "serf_wan": 8302
    ,
    "rejoin_after_leave": true,
    "retry_join": [
        "172.18.0.5",
        "172.18.0.6",
        "172.18.0.7"
    ],
    "retry_interval": "30s",
    "reconnect_timeout": "72h"


  • 我们先生成以上的配置文件起名consul1.json . 复制三份node_name依次为s_1,s_2,s_3 ,只要不同就行了。 retry_join里面的IP我们先不用管。然后执行docker启动容器

  • sudo docker run -p 8500:8500 -d --name consul_s1 -v /data/services/consul/docker/consul1.json:/consul/config/basic_config_1.json consul agent -config-dir /consul/config启动第一个consul
    -sudo docker run -d --name consul_s2 -v /data/services/consul/docker/consul2.json:/consul/config/basic_config_1.json consul agent -config-dir /consul/config
    -sudo docker run -d --name consul_s2 -v /data/services/consul/docker/consul2.json:/consul/config/basic_config_1.json consul agent -config-dir /consul/config

  • 启动s2,s3. 记住s2,s3和s1不同的是不需要绑定端口。因为一台物理机只能有一个8500端口。这里为了演示只是将8500暴露出来。其他的consul的端口需要自行暴露。
    -三个容器都启动好之后执行docker inspect consul1

  • 在上面我们能看到容器的ip. 这个ip我们重启重启是不会变的。删除重新生成的可能会变。这个读者可以自己测试下。

  • 然后我们将json文件中的ip换成三个容器的ip分别重启就可以了。

  • 这样我们的docker版集群搭建成功了。至于springcloud的整合无非就是在原来的地址处单机变多机。这里不掩饰了

consul 运行原理

  • consul是多数据中心的。可以理解成集群与集群可以互通组成更大的集群。在一个consul数据中心的有client和server
  • client : client是无状态的。只是负责将请求转发给server端。
  • server : server是真正持久化数据并通知其他server同步数据的服务

在数据中心的中的server是通过病毒算法进行通知数据备份的。

springcloud之学习笔记(feign+consul)(代码片段)

SpringCloud之学习笔记SpringCloud为开发者提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。... 查看详情

springcloud之学习笔记(feign+consul)(代码片段)

SpringCloud之学习笔记SpringCloud为开发者提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。... 查看详情

springcloud学习笔记总结(代码片段)

文章目录1.zookeeper之支付服务注册(服务提供者注册)2.zookeeper之临时节点和持久节点3.zookeeper之服务消费者注册4.Consul之简介5.Consul之安装运行Consul6.Consul之服务提供者注册进consul7.Consul之服务消费者注册进Consul8.三个注册中心的异同... 查看详情

springcloud(十三):注册中心consul使用详解

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

springcloud框架之zookeeperconsul服务注册与发现(代码片段)

本笔记内容为尚硅谷SpringCloud框架开发Zookeeper、Consul部分目录SpringCloud整合Zookeeper一、注册中心Zookeeper二、服务提供者1、新建Module2、POM3、YML4、主启动类5、Controller6、启动8004注册进zookeeper三、服务消费者1、新建Module2、POM3、YML4... 查看详情

springcloud整合consul(代码片段)

Springcloud整合ConsulConsul是什么Consul能干嘛Consul操作指南Consul官网下载Consul运行服务提供者注册进Consul服务消费者注册进ConsulConsul是什么Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发.提供了微... 查看详情

史上最简单的springcloud教程|第十四篇:服务注册(consul)

这篇文章主要介绍springcloudconsul组件,它是一个提供服务发现和配置的工具。consul具有分布式、高可用、高扩展性。consul具有以下性质:服务发现:consul通过http方式注册服务,并且服务与服务之间相互感应。服务健康监测key/value... 查看详情

java之springcloud微服务搭建consul(第一个阶段)springboot项目实现商品服务器端是调用(代码片段)

SpringCloud学习目录点击跳转对应的文章Java之SpringCloud微服务搭建(第一个阶段)【一】【SpringBoot项目实现商品服务器端是调用】Java之SpringCloud微服务Eureka(第一个阶段)【二】【SpringBoot项目实现商品服务器端是调... 查看详情

springcloud——consul服务注册中心的介绍安装与使用(代码片段)

Consul介绍用于实现分布式系统的服务发现与配置,内置了服务注册与发现框架,分布一致性协议实现,健康检查,Key/Value存储,多数据中心方案,不再需要依赖其它工具,使用起来比较简单Consul特性Raft... 查看详情

springcloud系列教程汇总整理手册

...系列之集成Dubbo的方式    >>sourcedownload2、微服务之SpringCloud2.1服务治理实现SpringCloud系列使用NetflixEureka进行服务治理2.2声明式服务调用SpringCloud系列之声明式服务调用NetflixFeign2.3客户端负载均衡SpringCloud系列之客户端负载均... 查看详情

springcloud教程之springcloud概述

一、SpringCloud简介SpringCloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,集群状态)。分布式... 查看详情

jvm篇之牛刀小试年轻代参数优化探索

...置了500m的时候,时间还短,然后当时我就停止了探索。后来我在公司飞书文档写了一篇文章分享,然后有位公司leader在我文章评论了,一下子引起了我的好奇心去探索: 查看详情

38springboot——分布式之springcloud

一、SpringCloud简介SpringCloud是一个分布式的整体解决方案。SpringCloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的... 查看详情

java之springcloud微服务搭建consul(第一个阶段)springboot项目实现商品服务器端是调用(代码片段)

Eureka替换方案ConsulEureka替换方案Consul1、Eureka闭源的影响(1)Eureka闭源影响(2)Eureka的替换方案2、什么是consul(1)consul概述(2)consul与Eureka的区别1)一致性2)开发语言和使用(3)... 查看详情

springcloud——consul服务注册中心的介绍安装与使用(代码片段)

Consul介绍用于实现分布式系统的服务发现与配置,内置了服务注册与发现框架,分布一致性协议实现,健康检查,Key/Value存储,多数据中心方案,不再需要依赖其它工具,使用起来比较简单Consul特性Raft... 查看详情

ansiblerole键值存储之【consul】

...装consulconsul是HashiCorp公司推出的一款开源工具,用于实现分布式系统的服务发现与配置。与其他类似产品相比,提供更“一站式”的解决方案。consul内置有KV存储,服务注册/发现,健康检查,HTTP+DNSAPI,WebUI等多种功能。官方地... 查看详情

springcloud-2.0(7.服务注册发现-consul)(代码片段)

上一篇:6.服务注册发现-ZooKeeper下一篇:8.负载均衡-Ribbon文章目录1.简介1.1什么是[Consul](https://so.csdn.net/so/search?q=Consul&spm=1001.2101.3001.7020)1.2作用1.3下载地址1.4中文文档1.5启动Consul2.服务提供者Provider3.服务消费者Con... 查看详情

蚂蚁课堂:consul搭建

...集群提供图形界面跨平台,支持Linux、Mac、WindowsConsul整合SpringCloud学习网站:https://springcloud.cc/spring-cloud-consul.htmlConsul下载地址https://www.consul.io/downloads.htmlConsul环境搭建官方下载地址下载window版,解压得到一个可执行文件。 设... 查看详情