水下山 发表于 2023-3-15 00:31:52

《consul 简易上手指南》

consul 是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性
 
什么是服务发现?为什么要实现服务发现?
举个常见的例子:
 
假设有一台 client 想要实现不同的业务,就需要调用接口去访问后端的server
 
那这样 client 就需要知道后端 server 的网络配置,通常是将 server 的网络配置写到 client 配置文件中
  
 
这样就会出现几个问题:

[*]后面如果新增后端 server,就需要将新配置写进 client 本地上,导致后期配置文件越来越多,不便于维护
[*]一旦后端某一服务的网络配置发生变化,需要修改 client 的配置
[*]一旦后端某一服务出现故障,需要人工剔除配置项
 
为此,我们需要引入一个中间件来给 client 和 server 之间解耦,client 不需要关心后端 server 的配置,当需要实现某一业务的时候,只需要去服务发现中间件上面去获取到对应 server 的网络配置即可
 
https://img2023.cnblogs.com/blog/2958925/202303/2958925-20230314223510099-1093748940.png
 
 
 
初识 consul

Consul 是 HashiCorp 公司推出的开源工具,由 go 语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,非常轻量,用于实现分布式系统的服务发现与配置的解决方案
 
常用的服务发现框架有:zookeeper、 etcd、Consul
 
consul 的一些特性:

[*]服务发现

[*]Consul 提供了通过 DNS 或者 HTTP 接口的方式来注册服务和发现服务
[*]一些外部的服务通过 Consul 找到它所依赖的服务

[*]健康检查

[*]Consul 的 Client 可以提供任意数量的健康检查,既可以与业务相关联(是否返回200 状态码)也可以与本地节点相关联(cpu 使用率等)

[*]KV 存储

[*]Consul 提供了简单的http接口,可以实现动态配置、功能标记、领袖选举等功能

[*]安全服务通信

[*]可以为服务生成和分发 TLS 证书,以便建立 TLS 连接

[*]多数据中心

[*]consul 集群由多个 server 和 client 组成,所有的服务都可以注册到这些节点上

 
简单部署

consul 安装

 
 
下载后可以发现 consul 就是一个可执行的二进制文件
 
为了简单起见,我们现在将以开发模式启动 Consul 代理。这种模式对于快速简单地启动单节点 Consul 环境非常有用
 
我们现在单机简单部署一下consul
 

 
 
#开发模式启动consul agnet
consul agent -dev -client=0.0.0.0 
执行上面这条命令之后,consul 会被启动起来,并且占用终端
 
加上 -client=0.0.0.0 参数是让我们能够通过本地浏览器来访问 consul 提供的 http 接口(即 consul 能够对外提供服务)
  
 
 注册服务

 
接下来我们将简单注册一个服务并在 web 界面上实现健康检查
 
这是官方文档给出的一个注册服务的配置示例:

 
 
编写一个服务定义配置文件,假设有一个名为 web 的服务在端口 80 上运行
 
 
 
ctrl+c 终止掉 consul 服务,重启 consul

 
 

[*]查询服务
一旦 consul 启动,我们可以通过 HTTP API 方式来查询
 
即使用  /v1/catalog/service/{name}  查询

 
 还可以,通过浏览器访问 consul web界面去查看
 
 
 
 
可以看到 web 服务已经注册上去了
 
自带健康检查功能
https://img2023.cnblogs.com/blog/2958925/202303/2958925-20230314223813758-1265628914.png
 
 
k-v 操作

除了提供服务发现和健康检查之外,consul 还支持 kv 存储
 
通过 kv 存储,可以实现动态配置保存、修改等功能
 
举个例子
 
有一台 server 提供 web 服务,它将网络配置信息以键值对形式保存到 consul 上
 
当 client 需要去调用这个 web 服务的时候,就去 consul 上面找到相关的 key 然后获取对应的 value
 
而当 server 的网络配置发生变化时,可以在 consul 上面直接修改 value
 

 
 
如上图所示,key 为 webserver,value 为 ip 和 port,以 YAML 的形式保存
 
consul 上面的 value 有多种形式(JSON、HCL、XML、YAML)
 
一般我们对 kv 的操作有两种方式:

[*]通过命令行来操作(CLI API)
[*]通过 consul 提供的 web 界面(HTTP API)来操作
 
使用 CLI API 操作 key/value
 
consul 命令操作 kv 文档:
https://developer.hashicorp.com/consul/commands/kv
 

[*]增
#语法:
consul kv put 
我们想新增一个叫做 webserver 的 key,它的 value 如下:
 
ip=1.1.1.1<br>port=80 
查看发现没有 webserver 这个 key
 

 
 我们添加一下

 
 
 

[*]删
#语法
consul kv delete 
假设我们提供 web 服务的 server 发生故障了,需要在 consul 上面删掉它的配置
 

 
 
 
 

[*]改
 
假设你某一个 key 对应有多个value,如果修改 value 的话是全部修改的,不能说修改 value 中的某一个值
 
举个例子,我想修改 webserver 中的 port,将其改成100
https://img2023.cnblogs.com/blog/2958925/202303/2958925-20230314224026420-613360316.png
 
 
我只能全部修改,不能单独改 port 字段

 
 
有一种比较好的方法,就是使用 import 和 export 参数
第一步:我们先将当前的 kv 导出到本地来做备份
  
 第二步:将新配置文件 import 上去
 
 https://img2023.cnblogs.com/blog/2958925/202303/2958925-20230314224050951-232500310.png
 
 

[*]查
#语法
consul kv get
查看指定 key

 
 
 
 查看指定 key 的详细信息
 
 
 
递归列出所有的 key 以及对应的 value
  
 

递归列出所有的 key

 
 
 
 
使用HTTP API操作key/value
使用浏览器访问 ip:8500 即可进入 consul web 界面
 
然后鼠标点点点就行了,本文不过多介绍
  
 
 
 

来源:https://www.cnblogs.com/edisonfish/p/17216756.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 《consul 简易上手指南》