1、Consul简介
Consul是一套开源的分布式服务发现和配置管理系统,有HashiCorp
公司使用Go
语言开发,提供了微服务系统中服务治理、配置中心、控制总线等功能
。每个功能可以单独使用,也可以一起使用以构建全方位的服务网格,Consul
提供了一套完整的服务网格解决方案。
优点:基于raft
协议,简洁;支持健康检查,同时支持HTTP
和DNS协议
,支持跨数据中心的WAN
集群,提供了图形化界面;支持跨平台,支持Linux、Mac、Windows。
Consul
的功能:
- 实现服务注册发现,提供了了HTTP和DNS两种发现方式
- 健康检测,支持多种方式,Http,Tcp,Docker,Shell脚本定制
- KV存储(key、value的存储方式)
- 支持多数据中心
- 可视化Web界面
下载地址:https://www.consul.io/downloads
Consul中文使用教程:https://www.springcloud.cc/spring-cloud-consul.html
2、安装并运行Consul
在macOS
环境下,使用homebrew
方式在Mac
上安装Consul
。记录详细流程操作。
2-1、安装应用
使用命令$ brew install consul
安装:
test-MBP:~ test$ brew install consul
Updating Homebrew…
==> Downloading https://ghcr.io/v2/homebrew/core/consul/manifests/1.9.5
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/consul/blobs/sha256:043b458e21e
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Pouring consul–1.9.5.big_sur.bottle.tar.gz
==> Caveats
To have launchd start consul now and restart at login:
brew services start consul
Or, if you don’t want/need a background service you can just run:
consul agent -dev -bind 127.0.0.1
==> Summary
🍺 /usr/local/Cellar/consul/1.9.5: 8 files, 86MB
可以使用$ brew info consul
查看consul
信息
test-MBP:~ test$ brew info consul
consul: stable 1.9.5 (bottled), HEAD
Tool for service discovery, monitoring and configuration
https://www.consul.io
/usr/local/Cellar/consul/1.9.5 (8 files, 86MB) *
Poured from bottle on 2021-09-14 at 16:42:56
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/consul.rb
License: MPL-2.0
==> Dependencies
Build: go ✘, gox ✘
==> Options
–HEAD
Install HEAD version
==> Caveats
To have launchd start consul now and restart at login:
brew services start consul
Or, if you don’t want/need a background service you can just run:
consul agent -dev -bind 127.0.0.1
==> Analytics
install: 2,450 (30 days), 7,613 (90 days), 31,886 (365 days)
install-on-request: 2,386 (30 days), 7,432 (90 days), 30,939 (365 days)
build-error: 0 (30 days)
2-2、启动consul
启动consul有两种形式:Server 模式
跟 Client 模式
。
打开终端使用命令$ consul agent -dev
开启Client
模式:
test-MBP:~ test$ consul agent -dev
==> Starting Consul agent…
Version: ‘1.9.5’
Node ID: ‘3ad13253-8515-2393-cec0-ed4703bece41’
Node name: ‘test-MBP’
Datacenter: ‘dc1’ (Segment: ‘’)
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
如上这种方式是以前台进行的启动,那么相应的只需要 ctrl + c
即可关闭 consul
。
打开终端使用命令$ consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0 -bind 你的ip地址 -data-dir=/状态数据存储文件夹/data >> /日志记录文件夹/logs/consul.log &
开启Server
模式:
test-MBP:~ test$ consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0 -bind 192.168.124.3 -data-dir=/Users/test/Desktop/consulData/data >> /Users/test/Desktop/consulData/logs/consul.log &
[1] 18513
test-MBP:~ tests$
执行命令后给出 PID
:18513
-bind
:绑定的内部通讯地址,默认0.0.0.0,即所有的本地地址,也可以改为自己的ip地址。
-data-dir
:状态数据存储用的文件目录
关闭命令:如图所示,一般执行完就给出 PID
了,直接 kill -9 PID
掉就可以了。
test-MBP:~ test$ kill -9 18513
2-3、访问consul图形化界面
访问 http://localhost:8500/
就可以进入界面了,如下图所示:
2-4、关闭consul
关闭consul
按照Client 模式
形式下启动的方法:在终端直接按住 ctrl + c
就可以退出。
关闭consul
按照Server 模式
形式下启动的方法:杀死启动后给出的 PID
, 执行kill -9 PID
。
3、Consul常用命令解释
agent
:运行一个consul agentjoin
:将agent加入到consul clustermembers
:列出consul cluster集群中的members-bootstrap
:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。-bootstrap-expect
:设定一个数据中心需要的服务节点数,可以不设置,设置的数字必须和实际的服务节点数匹配。consul会等待直到数据中心下的服务节点满足设定才会启动集群服务。初始化leader选举,不能和bootstr- ap混用。必须配合-server配置。-bind
:绑定的内部通讯地址,默认0.0.0.0,即,所有的本地地址,会将第一个可用的ip地址散播到集群中,如果有多个可用的ipv4,则consul启动报错。[::]ipv6,TCP UDP协议,相同的端口。防火墙配置。-client
:客户端模式,http dns,默认127.0.0.1,回环令牌网址-config-file
:配置文件位置-config-dir
:配置文件所在文件夹,会加载其下所有配置文件,.json或者.hcl文件,加载顺序为字母表顺序;可用配置多个此配置,从而加载多个文件夹,子文件夹的配置不会被加载。-config-format
:配置文件格式,配置了,则加载相应个是的文件。不配置,则consul自动识别。-data-dir
:状态数据存储文件夹,所有的节点都需要。文件夹位置需要不收consul节点重启影响,必须能够使用操作系统文件锁,unix-based系统下,文件夹文件权限为0600,注意做好账户权限控制,-datacenter
:数据中心名称,默认dc1,一个数据中心的所有节点都必须在一个LAN中。-dev
:开发模式,去掉所有持久化选项,内存服务器模式。-disable-host-node-id
:不使用host信息生成node ID,适用于同一台服务器部署多个实例用于测试的情况。随机生成nodeID-dns-port
:v7.0以后,自定义dns 端口,覆盖默认8600-enable-script-checks
:是否允许使用脚本进行健康检查,默认false,最好配置enable acl-encrypt
:consul网络通讯加密key,base64加密,16比特;consul keygen产生。集群中的每个实例必须提供相同的,只需提供一次,然后会保存到数据文件。重启自动加载。consul节点启动后提供,会被忽略。-hcl
:添加hcl格式配置,和已有的配置合并。可以使用多个此配置。-http-port
:http api端口,覆盖默认的8500。适用于云环境指定。-log-file
:日志记录文件,如果没有提供文件名,则默认Consul-时间戳.log-log-level
:日志级别,默认info,包含:trace,debug,info,warn,err;consul monitor监控-log-rotate-bytes
:新日志文件生成大小阈值。-log-rotate-rotation
:新日志生成时间阈值-join
:需要加入的其它节点地址,可以多次使用,加入多个节点。-retry-join
:会进行加入重试,适用于认定加入节点最终会正常的情况。ipv4,ipv6,dns-retry-interval
:上述,重试间隔,默认30s-retry-max
:重试次数,默认0,无限次重试-join-wan
, -retry-join-wan, -retry-interval-wan, -retry-max-wan-node
:节点名称,默认主机名-node-id
:节点ID-pid-file
:consul 存储 pid 的文件位置,用于主动发信号。如停止节点,重载配置等。-protocol
:使用的协议,升级时使用。consul -v查看协议版本-raft-protocol
:使用raft协议版本,默认3-raft-snapshot-threshold
:raft执行快照,提交次数阈值。一般不需要设置,io密集型应用可以调高。避免所有的节点同一时间快照。此值过大,会造成相应日志文件变大,节点重启恢复会耗费更长时间。1.1.0后,默认1- 6384,之前8192.-raft-snapshot-interval
:执行快照间隔,影响类似上个配置,1.1.0后默认30s,之前5s。-rejoin
:节点会尝试重新加入集群。-server
:服务端节点模式。-server-port
:服务端RPC端口,v1.2.2后提供。-non-voting-server
:服务节点不参与选举,接受日志复制,用于横向扩展,服务查询请求。(类比zookeeper 观察者节点)-syslog
:linux OSX系统,配置日志输出到系统日志。-ui
:内置web ui界面。-ui-dir
:web ui 资源文件夹,使用此配置,则不需也不能使用再-ui配置-
4、Consul中默认的端口号
- 服务器RPC(默认8300):由服务器用来处理来自其他代理的传入请求,仅限TCP。
- Serf LAN(默认8301):用来处理局域网中的八卦。所有代理都需要,TCP和UDP。
- Serf WAN(默认8302):被服务器用来在WAN上闲聊到其他服务器,TCP和UDP。从Consul 0.8开始,建议通过端口8302在LAN接口上为TCP和UDP启用服务器之间的连接,以及WAN加入泛滥功能。
- HTTP API(默认8500):被客户用来与HTTP API交谈,仅限TCP。
- DNS接口(默认8600):用于解析DNS查询,TCP和UDP。
5、创建服务提供者注册到Consul注册中心
新建cloud-providerconsul-payment8006
模块,修改pom.xml
,这里需要加入spring-cloud-starter-consul-discovery
的依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/