关键词:
文章目录
之前罗列了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版,解压得到一个可执行文件。 设... 查看详情