《consul 简易上手指南》

consul,简易,上手,指南 · 浏览次数 : 232

小编点评

**什么是服务发现?** 服务发现是指在应用程序中实现服务间通信的机制。通常,服务间需要通过名称或IP地址来找到彼此。服务发现可以帮助应用程序在运行时动态发现服务,并在需要时进行通信。 **为什么要实现服务发现?** 实现服务发现可以解决以下问题: * **服务间名称或IP地址难以确定:**在运行过程中,服务可能使用非标准的名称或IP地址进行通信。 * **服务数量可能变化:**服务可能出现出现或关闭的情况,因此服务数量可能动态变化。 * **服务配置可能存在误差:**服务配置可能存在误差,例如服务器地址或端口号错误。 **常见的服务发现框架:** * **zookeeper:**是一种分布式分布式键值存储系统,可以用于服务发现。 * **etcd:**是一种分布式分布式键值存储系统,可以用于服务发现。 * **Consul:**是一种开源的分布式服务发现框架,可以用于实现服务发现、配置管理和动态配置。 **Consul 的特性:** * **服务发现:**Consul 提供了通过 DNS 或 HTTP 接口的方式来注册服务和发现服务一些外部服务的健康检查。 * **配置管理:**Consul 提供简单的 HTTP 接口,可以实现动态配置、功能标记、领袖选举等功能。 * **安全:**Consul 支持安全通信,例如 TLS 认证。 * **可扩展性:**Consul 可以通过添加新的服务节点来扩展服务发现的能力。 **使用 Consul 的示例:** ``` # 创建一个服务定义配置文件 consul config write service_name webserver { port: 80 } # 获取服务配置 service_config = consul config get service_name webserver # 从配置文件中获取服务 IP 地址 server_ip = service_config.service_name.port # 连接到 Consul 服务 client = Consul.Client() service = client.get_service_by_name(server_ip, "webserver") ```

正文

consul 是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性

 

什么是服务发现?为什么要实现服务发现?

举个常见的例子:

 

假设有一台 client 想要实现不同的业务,就需要调用接口去访问后端的server

 

那这样 client 就需要知道后端 server 的网络配置,通常是将 server 的网络配置写到 client 配置文件中

 

 

 

这样就会出现几个问题:

  1. 后面如果新增后端 server,就需要将新配置写进 client 本地上,导致后期配置文件越来越多,不便于维护

  2. 一旦后端某一服务的网络配置发生变化,需要修改 client 的配置

  3. 一旦后端某一服务出现故障,需要人工剔除配置项

 

为此,我们需要引入一个中间件来给 client 和 server 之间解耦,client 不需要关心后端 server 的配置,当需要实现某一业务的时候,只需要去服务发现中间件上面去获取到对应 server 的网络配置即可

 

 

 

 

初识 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 服务已经注册上去了

 

自带健康检查功能

 

 

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 的操作有两种方式:

  1. 通过命令行来操作(CLI API)

  2. 通过 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
port=80

 

查看发现没有 webserver 这个 key

 

 

 我们添加一下

 

 

 

#语法
consul kv delete

 

假设我们提供 web 服务的 server 发生故障了,需要在 consul 上面删掉它的配置

 

 

 

 

 

 

假设你某一个 key 对应有多个value,如果修改 value 的话是全部修改的,不能说修改 value 中的某一个值

 

举个例子,我想修改 webserver 中的 port,将其改成100

 

 

我只能全部修改,不能单独改 port 字段

 

 

有一种比较好的方法,就是使用 import 和 export 参数

第一步:我们先将当前的 kv 导出到本地来做备份

 

 

 第二步:将新配置文件 import 上去

 

 

 

 

#语法
consul kv get


查看指定 key

 

 

 

 查看指定 key 的详细信息

 

 

 

递归列出所有的 key 以及对应的 value

 

 

 


递归列出所有的 key

 

 

 

 

使用HTTP API操作key/value

使用浏览器访问 ip:8500 即可进入 consul web 界面

 

然后鼠标点点点就行了,本文不过多介绍

 

 

 

 

 

与《consul 简易上手指南》相似的内容:

《consul 简易上手指南》

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

KAFKA EAGLE 监控MRS kafka之操作实践

本文分享自华为云社区《KAFKA EAGLE 监控MRS kafka之操作实践》,作者: 啊喔YeYe 。 1.Kafka Eagle简介 Kafka eagle 是一款分布式、高可用的kafka监控软件,提供丰富的kafka监控指标,例如:Kafka集群的Broker数、Topic数、Consum

18.基于Consul的服务发现和ConsulManager管理

192.168.10.14 prometheus、consul 192.168.10.100 各类服务 一、基于Consul的服务发现 Consul 是由 HashiCorp 开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,是一个通用的服务发现和注册中心工具,被大量应用于基于微服

[转帖]consul 多节点/单节点集群搭建

https://www.cnblogs.com/valiantjiang/p/15004565.html 三节点配置 下载安装包 mkdir /data/consul mkdir /data/consul/data curl -SLO https://github.com/consul/1.9.5/

一次nginx文件打开数的问题排查处理

现象:nginx域名配置合并之后,发现consul-template无法完成nginx重载,然后发现需要重启nginx,才能让配置生效。 注意:下次哪个服务有报错,就看重启时所有日志输出,各种情况日志输出。不要忽略细节。很多时候其实已经看到了问题,却没有深入查看问题。 查看进程最大打开文件个数 #c

Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用

Dubbo3注册中心的使用 zookeeper注册中心的使用 依赖引入 org.apache.dubbo dubbo-dependencies-zookeeper-curator5

0停机迁移Nacos?Java字节码技术来帮忙

摘要:本文介绍如何将Spring Cloud应用从开源Consul无缝迁移至华为云Nacos。 本文分享自华为云社区《0停机迁移Nacos?Java字节码技术来帮忙》,作者:华为云PaaS服务小智。 1.市场迁移云环境痛点 市场微服务迁移云环境难主要有以下几点场景: • 微服务规模小,使用微服务引擎

[转帖]docker容器跨主机网络overlay

https://www.cnblogs.com/machangwei-8/p/15757120.html 目录 拉取镜像,运行容器 浏览器上访问Consul 修改host1,host2的docker daemon配置文件 创建网络 验证 在overlay中运行容器 运行 查看一下这两个网卡 查看生成

[转帖]k8s-mtu设置不当引发的线上故障

https://www.cnblogs.com/zisefeizhu/p/16611626.html 背景 在部署新的paas平台线上环境时,突发consul和es中间件无法创建。 排查过程 以consul 通过查询k8s集群中pod状态发现原来3pod的consul集群,其中2个pod一直重启。

[转帖]Quick Start Guide

Before we begin be sure to download and install confd. Select a backend confd supports the following backends: etcd consul vault environment variables