zoukankan      html  css  js  c++  java
  • Consul功能简介

    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界面查看:

  • 相关阅读:
    总结ASP.NET C#中经常用到的13个JS脚本代码
    C# 处理 JSON 常用的帮助类
    C# 中移动文件到指定位置
    C# 常用时间戳处理方法
    c#批量上传图片到服务器示例分享
    C# 通过URL获取图片并显示在PictureBox上的方法
    QT中Qtableview视图表格中点击表头进行排序
    qt QTableWidget&&QTableView 导出数据到excel
    51nod 1242 斐波那契数列的第N项
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/TianFang/p/10100306.html
Copyright © 2011-2022 走看看