《consul 简易上手指南》
consul 是一个用来做服务发现的框架,具有分布式、高可用以及可横向扩展的特性
什么是服务发现?为什么要实现服务发现?
举个常见的例子:
假设有一台 client 想要实现不同的业务,就需要调用接口去访问后端的server
那这样 client 就需要知道后端 server 的网络配置,通常是将 server 的网络配置写到 client 配置文件中
这样就会出现几个问题:
后面如果新增后端 server,就需要将新配置写进 client 本地上,导致后期配置文件越来越多,不便于维护
一旦后端某一服务的网络配置发生变化,需要修改 client 的配置
一旦后端某一服务出现故障,需要人工剔除配置项
为此,我们需要引入一个中间件来给 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 的操作有两种方式:
通过命令行来操作(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
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 简易上手指南》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5
2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵. 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5 ...
- SQL Server 2000 创建角色,登陆用户,安全用户,批量授予权限
前言 我在2011年刚入门学习的时候,是从 SQL Server 2008 开始学的,再加上这些年较少接触 SQL Server 2000,因此对它不是很熟. 之前都是在 SQL Server 200 ...
- Socket.D 网络应用协议,首版发布!
有用户说,"Socket.D 之于 Socket,尤如 Vue 之于 Js.Mvc 之于 Http" 主要特性 基于事件,每个消息都可事件路由 所谓语义,通过元信息进行语义描述 流 ...
- NLP项目实战02:英文文本识别
简介: 欢迎来到本篇文章!今天我们将讨论一个新的自然语言处理任务--英文短文识别.具体而言,即通过分析输入的英文文本来判断其是比较消极的还是比较积极的. 展示: 1.项目界面 如下所示是项目启动后用户 ...
- Ruby 版本升级
一.升级原因 在开发shopify app的时候,提示我当前的Ruby版本不支持(如下图),所以需要升级Ruby. 由于Ruby 中的一些 Gem 依赖于 OpenSSL 库,所以更改 Ruby 版本 ...
- storeToRefs()的作用和使用
store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value,就像 setup 中的 props 一样,如果你写了,我们也不能解构它: <scrip ...
- 【李南江】从零玩转TypeScript
前言 老套路肯定是 需要知道TS是干啥用的啦. 1.什么是TypeScript(TS)? TypeScript简称TS TS和JS之间的关系其实就是Less/Sass和CSS之间的关系 就像Less/ ...
- 【笔记】01 -- Spring-Cloud介绍
第一章节我们主要是介绍微服务 springCloud的架构和分布式的区别 但是后面会主要介绍netflix公司与Alibaba公司的两套架构 系统架构 **概述** 随着互联网的发展,网站应用的规模不 ...
- STM32CubeMX教程5 TIM 定时器概述及基本定时器
1.准备材料 开发板(STM32F407G-DISC1) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) 逻 ...
- 技本功|统计信息对SQL执行效率的影响
在一个风和日丽的下午,奋哥哥突然接到业务方线上业务数据库CPU资源告警信息,立马放下手里的枸杞登录业务方阿里云控制台查看具体问题. 对于数据库当前正在发生中的问题,我们首先从数据库实时会话信息中尝试抓 ...