Consul功能简介

2023-11-02

Consul 是 HashiCorp 公司的一个用于实现分布式系统的服务发现与配置工具。Consul内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案。由于出现得晚些,Consul具有功能完善、部署简单、使用方便等特点。

安装consul:

Consul由Go语言开发,因此也继承了Go语言跨平台,易安装的特点。可以在其官网https://www.consul.io/downloads.html下载,各个平台的安装包都提供了。基本解压就可以使用。

这里以Windows平台为例,我这里下载的是64位版本,解压后就一个exe程序,直接以如下命令启动:

    consul agent -dev

这里有两个参数: agent表面启动了一个服务实例, -dev则是以快速开发的方式启动这个实例。这个参数包含了大多数常用的功能,可以比较方便我们演示后面的功能,但它不对服务进行序列化,因此是不能应用于生产环境的。

启动后,可以看到如下提示信息:

> consul agent dev
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.4.0'
Node ID: 'e59c9885-c8df-608a-f870-dab9078f5c0d'
Node name: 'Develop-PC1'
Datacenter: 'dc1' (Segment: '<all>')
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

 

Web界面:

Consul自带一个界面美观,功能强大的,开箱即用的Web界面。通过该界面我们可以查看所有的服务以及节点,查看所有的健康监测及其当前的状态,以及读取和设置键/值数据。

该界面被映射到/ui上,和HTTP API使用相同的端口。默认就是http://localhost:8500/ui。

如果你要在其它机器上访问该Web界面,可以加上-client参数指定绑定的IP。

consul agent -dev -bind=192.168.2.210 -client 0.0.0.0

 

静态配置服务

consul支持配置文件的方式静态配置服务,首先我们定义一个json格式的配置文件:

{
    "service": {
    
    "name": "web",
    
    "tags": [
    
        "rails"
    
    ],
        "port": 80
    }
}

配置文件主要指定的是服务名称,地址,端口等信息。

然后用-config-dir指定配置文件目录启动consul,consul会自动加载该目录下的所有json文件,每个文件作为一个静态配置服务。

> consul agent -dev -bind=192.168.0.211 -config-dir ./services

==> Starting Consul agent...
==> Consul agent running!
...
2018/12/05 11:43:23 [DEBUG] agent: Node info in sync
2018/12/05 11:43:23 [DEBUG] agent: Service "web" in sync
2018/12/05 11:43:23 [DEBUG] agent: Node info in sync
2018/12/05 11:43:25 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2018/12/05 11:43:25 [DEBUG] agent: Service "web" in sync
2018/12/05 11:43:25 [DEBUG] agent: Node info in sync

从输出信息中可以看到名为"web"的服务已经同步进来。

也可以在web界面上看到该服务:

 

动态注册服务

除了静态配置外,使用的最多的还是服务主动注册的方案。consul提供了一系列rest接口使得我们可以方便的注册自己的服务。

创建服务

{
    "ID": "redis1",
    "Name": "redis",
    "Tags": [
    
    "primary",
    
    "v1"
    ],
    "Address": "127.0.0.1",
    "Port": 8000,
    "EnableTagOverride": false,
    "Check": {
    
    "DeregisterCriticalServiceAfter": "90m",
    
    "Script": "/usr/local/bin/check_redis.py",
    
    "HTTP": "http://localhost:5000/health",
    
    "Interval": "10s"
    }
}

删除服务

  • 接口地址:http://localhost:8500/v1/agent/service/deregister/redis1
  • 操作方式:PUT

查询指服务信息

查看服务的健康状态

  • 接口地址: http://localhost:8500/v1/catalog/service/web?passing
  • 操作方式: GET

更多接口

更多API使用可参考:https://www.consul.io/api/index.html

 

集群搭建

consul的集群拓扑架构如下图所示:

它主要具有如下两种状态的节点:

Server: 有完整功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。

Client:一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。

consul的集群搭建本身涉及的内容比较多,具体可参看文章Consul 集群部署。本文这里就介绍一个最简单的拓扑情况:1server + nclient的场景。

启动Server:

启动Server的指令一般如下:

consul agent -data-dir=./data -node=node0 -bind=192.168.0.211 -datacenter=dc1 -ui -client=0.0.0.0 -server -bootstrap-expect 1

这里用到了不少参数,这里就简单的介绍下:

  • -data-dir=./data 必须,指定数据文件存储路径
  • -node=node0 必须,指定了节点的名称,该名称在整个网络中必须唯一。
  • -bind=192.168.0.211 多Ip地址机器上必须,指定了绑定的Ip地址
  • -datacenter=dc1 可选,指定了所属的数据中心,默认为dc1
  • -ui 可选,是否启用web服务器
  • -client=0.0.0.0 可选,指定了可以访问的客户端范围,默认是127.0.0.1
  • -server 必须,表明了该节点是server节点
  • -bootstrap-expect 1 可选,

有了上述知识后,在最简单的场景下,一般可以简化为如下形式:

consul agent -data-dir ./data -node=node0 -bind=192.168.0.211 -ui -server

启动Client:

启动Client的指令一般如下:

consul agent -data-dir=./data -node=node1 -bind=192.168.0.210 -datacenter=dc1 -ui -client=0.0.0.0 -join 192.168.0.211

同样,基于前面的介绍,我们也可以把启动客户端指令简化如下:

consul agent -data-dir=./data -node=node1 -bind=192.168.0.210 -ui -join 192.168.0.211

相比启动Server的指令,少了一个-server,表明它是一个客户端agent,同是,多了一个-join 192.168.0.211,表明了它需要连接到那个server。这个参数也可以不配置,通过命令行consul join 192.168.0.211手动加入。

启动了client后,就可以通过consul members指令查看成员了:

> consul members
Node Address Status Type Build Protocol DC Segment
node0 192.168.0.211:8301 alive server 1.4.0 2 dc1 <all>
node1 192.168.0.210:8301 alive client 1.4.0 2 dc1 <default>

也可以通过Http接口查看:

http://localhost:8500/v1/catalog/nodes

[
    {
        "ID": "4314607d-629c-24a0-9e6c-d787efebe8c9",
        "Node": "node0",
        "Address": "192.168.0.211",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "192.168.0.211",
            "wan": "192.168.0.211"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 5,
        "ModifyIndex": 6
    },
    {
        "ID": "0a59426a-1723-6389-8681-0a16b54965e4",
        "Node": "node1",
        "Address": "192.168.0.210",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "192.168.0.210",
            "wan": "192.168.0.210"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 456,
        "ModifyIndex": 457
    }
]

同样,也可以在web界面查看:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Consul功能简介 的相关文章

随机推荐

  • SDN NSX-T 配置load balance

    配置负载均衡 创建一个T1网关 选择Edge池分配大小 配置T1服务接口 展开 服务接口 单击 设置 配置服务接口的名称 IP地址 连接的分段 配置完成后点击 保存 在NSX T Manager中 转到 网络 gt 网络服务 gt 负载均衡
  • 满二叉树等长路径

    满二叉树等长路径 给定一个深度为 n 的满二叉树 其 2n 11 个顶点的编号为 1 2n 11 树的根节点为 1 号节点 除根节点外 第 i 号节点的父节点为第 i2 号节点 例如 当 n 3 时 二叉树如下所示 树中每条边的长度已知 由
  • 图的广度优先搜索(bfs)

    图的广度优先搜索 Broad First Search 所谓的深度优先搜索 指的是在搜索时 如果遇到一个结点既有子结点 又有兄弟结点 那么先找兄弟结点 然后找子结点 类似于一个分层搜索的过程 广度优先遍历需要使用一个队列以保持访问过的结点的
  • 在浏览器输入URL后发生了什么?

    在浏览器输入URL并获取响应的过程 其实就是浏览器和该url对应的服务器的网络通信过程 从封装的角度来讲 浏览器和web服务器执行以下动作 简单流程 1 浏览器先分析超链接中的URL 分析域名是否规范 2 浏览器向DNS请求解析请求解析ht
  • 超低功耗摄像头 门锁 猫眼

    超低功耗摄像头 门锁 猫眼 简介 介绍一款超低功耗的CMOS 图像传感器 有着超低的功耗 非常适合用在电池供电的系统中 下面先贴一下具体核心参数 分辨率 324 244 传感器大小 1 11 图像 支持彩色 黑白 数据接口 DVP 输出格式
  • 2021年第十二届蓝桥杯省赛+国三C/C++B组参赛经历分享

    目录 一些流水账 备赛总结 语言选择 一些问题 牢骚 最近蓝桥杯报名又开始了 先预祝家人们能取得好成绩 一些流水账 按照惯例 先简单地自我介绍一下 本人就读于西南某不知名双非院校 计算机弱校 不是凡尔赛 专业为计科 参赛时为大二下学期 大二
  • 自动化点击操作:Python实现简易连点器及HTML测试

    这段Python代码实现了自动鼠标点击功能 通过调用pyautogui库和time库中的函数 实现了鼠标点击时间间隔的控制和延时操作 此外 借助threading库中的多线程技术 实现了点击操作和取消操作的同步执行 同时支持自动取消点击的功
  • 解决FATAL ERROR L250:CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED ,

    按照网上的资料 解决FATAL ERROR L250 CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED 没有成功 先说这个问题的根本是没配置好 思路一 具体当然还是要按照大部分的经验来试 以管理员
  • libevent 源码分析丨libevent组件构成以及编程要领

    1 前言 Libevent是一个轻量级的开源高性能网络库 使用者众多 研究者更甚 相关文章也不少 写这一系列文章的用意在于 一则分享心得 二则对libevent代码和设计思想做系统的 更深层次的分析 写出来 也可供后来者参考 文章较长 建议
  • python写几种base加解密

    源代码 import base64 def b64encode basec PlainText basec encode utf 8 a base64 b64encode PlainText CipherText a decode utf
  • 上面高度自定义,下面表格自适应的flex布局

    问题描述 整体布局为上面有自定义查询 高度变化 下面是封装的表格 分页组件 外布局不滚动 overflow hidden 表格高度固定死了导致分页无法显示 解决方法 用div包裹表格组件 内部表格与分页均设置position absolut
  • 箱线图

    以前对箱线图一直一知半解 这次在网上找到一篇不错的文章 首先 箱形图更多用于多组数据的比较 相对直方图不仅节省了空间 还可以展示出许多直方图不能展示的信息 单组数据则更适合采用直方图 使可视化效果更加直观 文章来源于 镝次元 公众号 在此向
  • vggface2人脸识别

    由于vggface2提供的的训练集和测试集类别完全不重合 说明这个数据集本身不是用来做分类问题的 所以以下的代码仅供参考 from future import print function import keras from keras l
  • logstash数据采集差8小时问题及解决(原创)

    作者 star 软件版本 软件名称 版本号 elasticsearch 2 1 1 logstash 2 3 1 问题解决办法 解决方案1 input jdbc jdbc connection string gt jdbc oracle t
  • 一键批量下载某篇文献的所有引用文献以及被引文献

    你还在为一篇一篇的下载参考文献而费时费力苦恼无比吗 曾经我像你一样 用一下午下载某一篇文献的80多篇参考文献 一篇一篇的下载简直要疯了 然而 现在有了一个简单高效实用的方法 只需两分钟即可批量下载所有的参考文献以及施引文献到mendely
  • 这年头还不来尝试线稿图视频??

    博客首页 knighthood2001 欢迎点赞 评论 热爱python 期待与大家一同进步成长 先看后赞 已成习惯 只截取了一部分 怕截取太多 你们打开卡 目录 前言 1原始视频逐帧提取 py 2原始视频音频提取 py 3 1PIL批量转
  • ubuntu16.04下 Phpstorm发布项目到apache

    在网上找的不靠谱 倒腾了大半天的 终于找到正确姿势QAQ 仅以此备份 顺带一提JetBrains是一个神奇的公司他们的全系列ide都是最好的IDE 强烈推荐学习使用 像Google官方的AndroidStudio也是基于他们的IDE的 我觉
  • .net截取两个字符串中间的内容

    做模拟登录时 需要截取html代码中的名字 返回的字符串内容如下 span class welcome 您好 span style font size 20px span 王霞 span span 欢迎您 span 我后台要怎样截取得到王霞
  • 论文笔记: Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

    2020 TKDE 基于FCN 同时预测时空中的节点和边缘的流量 1 节点流量 边缘流量 2 问题定义 3 模型 4 实验 4 1 数据 TaxiBJ 2013年 2016年四个时间段北京市出租车GPS数据和气象数据 TaxiNYC 201
  • Consul功能简介

    Consul 是 HashiCorp 公司的一个用于实现分布式系统的服务发现与配置工具 Consul内置了服务注册与发现框 架 分布一致性协议实现 健康检查 Key Value存储 多数据中心方案 由于出现得晚些 Consul具有功能完善