(四)SpringCloud-Consul注册中心

1、consul注册中心介绍(Go官网)

   Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与
发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为
简单。
    Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、Windows 和 Mac OS);安装包仅包含一个可
执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

Consul 特性

  • Raft 算法
  • 服务发现
  • 健康检查
  • Key/Value 存储(配置中心)
  • 多数据中心
  • 支持 http 和 dns 协议接口
  • 官方提供 Web 管理界面

1.1 consul角色说明

1.1.1 client: 客户端

无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。


1.1.2 server: 服务端

保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个。


1.2 consul架构简述

在这里插入图片描述

在这里插入图片描述

首先,我们可以看到有两个数据中心,分别标记为“datacenter1”和“datacenter1”(Consul 对多个数据中心有一流的支持)。

在每个数据中心内,我们混合了客户端(client)和服务器(server),每个数据中心的 server 数量推荐三到五台。这在故障情况下的可用性和性能之间取得了平衡,因为随着更多机器的加入,保持数据一致性所做的同步变得越来越慢。但是,客户端数量没有限制,它们可以轻松扩展到数千或数万。

不管是 Server 还是Client,统称为 Agent,Consul Client 是相对无状态的,只负责转发 RPC 到 Server 资源开销很少。Server 是一个有一组扩展功能的代理,这些功能包括参与 Raft 选举,维护集群状态,响应 RPC 查询,与其他数据中心交互 WAN Gossip 和转发查询给 leader 或者远程数据中心。

Consul使用gossip协议管理成员关系、广播消息到整个集群。数据中心中的所有代理都参与gossip协议(流言协议),这意味着gossip协议池包含数据中心的所有代理。这有几个目的:首先,不需要使用服务器地址配置客户端;发现是自动完成的。其次,检测代理故障的工作不是放在服务器上而是分布式的。这使得故障检测比简单的心跳方案更具可扩展性。它还为节点提供故障检测;如果代理不可访问,则节点可能遇到故障。第三,它用作消息传递层,以在发生领导者选举等重要事件时进行通知。

每个数据中心内的服务器都是单个 Raft 中节点集的一部分。这意味着他们一起工作,选择一个单一的领导者——一个具有额外职责的选定的服务器。leader 负责处理所有查询和事物。事物也必须作为同步协议的一部分复制到节点集中的所有节点。由于这个要求,当非 leader 服务器接收到 RPC 请求时,就会将请求其转发给集群 leader。。

服务器端节点同时也作为 WAN Gossip 池的一部分,WAN 池和 LAN 池不同的是,它针对网络高延迟做了优
化,而且只包含其他Consul 服务器的节点。这个池的目的是允许数据中心以最少的消耗方式发现对方。启动新的数据中心与加入现有的 WAN Gossip 一样简单。因为这些服务器都在这个池中运行,它还支持跨数据中心请求。当服务器收到对不同数据中心的请求时,它会将其转发到正确数据中心中的随机服务器。那个服务器可能会转发给本地的leader。

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

通常,不同的 Consul 数据中心之间不会复制数据。当对另一个数据中心中的资源发出请求时,本地 Consul 服务器会将 RPC 请求转发到该资源的远程 Consul 服务器并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会影响本地数据中心。在某些特殊情况下,可以复制有限的数据子集,例如使用 Consul 的内置 ACL 复制功能,或使用consul-replicate等外部工具。

在某些地方,客户端代理可能会缓存来自服务器的数据,以使其在本地可用以提高性能和可靠性。示例包括连接证书和意图,它们允许客户端代理对入站连接请求做出本地决策,而无需往返服务器。一些 API 端点还支持可选的结果缓存。这有助于提高可靠性,因为即使与服务器的连接中断或服务器暂时不可用,本地代理也可以继续响应某些查询,如服务发现或缓存中的连接授权。

1.3 服务发现以及注册

当服务 Producer 启动时,会将自己的 Ip/host 等信息通过发送请求告知 Consul,Consul 接收到 Producer 的注册信息后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是否健康。

1.4 服务调用

当 Consumer 请求 Product 时,会先从 Consul 中拿到存储 Product 服务的 IP 和 Port 的临时表(temp table),从temp table 表中任选一个· Producer 的 IP 和 Port,然后根据这个 IP 和 Port,发送访问请求;temp table 表只包含通过了健康检查的 Producer 信息,并且每隔 10s(默认)更新。

1.3 配置说明

官网配置说明地址


1.4 官网下载地址

Go下载地址


2、在windows开发模式启动

2.1 安装

将下载的consul.exe放在指定目录,双击运行后,在当前目录启动cmd客户端,执行consul命令,返回如下提示。在这里插入图片描述

2.2 启动

使用consul agent -dev命令启动在这里插入图片描述

启动报错:

D:\JavaSoftware\consul_1.9.4_windows_amd64\端口7---> consul agent -config-dir ./
==> Multiple private IPv4 addresses found. Please configure one with 'bind' and/or 'advertise'.

原因:因为有虚拟机,有多块网卡。关闭虚拟机的网卡,或者使用bind指定ipv4地址``

2.3 访问consul客户端

http://127.0.0.1:8500/ui/dc1/services
在这里插入图片描述

3、在windows启动client模式

3.1 端口分配

节点用途 节点主机IP HTTP HTTPS DNS GRPC SERVER LAN WAN
consul-client1 本机IP 8499 8509 8599 8399 8290 8291 8292
consul-client2 本机IP 8500 8510 8600 8400 8320 8301 8302

3.2 创建如下目录结构

在这里插入图片描述
在这里插入图片描述

3.3 根据端口创建配置文件

通过修改节点名称、目录、端口,给客户端client1和client2创建配置文件client.json。
注:使用时需要删除注释!!!

{
   
  "node_name": "client1", -- 该节点在集群中的名称。这在集群中必须是唯一的
  "data_dir": "D:\\JavaSoftware\\consul_1.9.4_windows_amd64\\consul-cluster\\client-1\\data",  --数据持久化目录
  "server": false,					-- true为服务端,false为客户端																
  "bind_addr": "127.0.0.1", 		-- 绑定ip,本机ip地址
  "client_addr": "0.0.0.0",			-- 配置0.0.0.0,允许局域网所有ip访问
  "bootstrap": false,
  "datacenter": "yyyL", 			-- 数据中心
  "log_level": "INFO",
  "log_file": "D:\\JavaSoftware\\consul_1.9.4_windows_amd64\\consul-cluster\\client-1\\log\\consul.log", --日志存放目录
  "log_rotate_duration": "24h", 
  "enable_syslog": false, 
  "disable_host_node_id": true, 
  "rejoin_after_leave": true,
  "ui": true,
  "ports": {
   
    "http": 8500,
    "https": 8510,
    "dns": 8600,
    "grpc": 8400,
    "serf_lan": 8301,
    "serf_wan": 8302,
    "server": 8300
  },
  "start_join": [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值