zoukankan      html  css  js  c++  java
  • Consul入门

    简介

    为什么要用consul,这里就不详细介绍了,本文重点是Consul的搭建和使用过程。

    Consul搭建

    参考文献:http://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/

    1. 下载consul和consul UI

      官方地址:https://www.consul.io/,就一个consul执行文件

      2.  在consul执行文件的目录下打开命令

      3.  创建server方式

      consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=你的ip -dc=dc1

      

      相关配置信息说明

        a.  –server指定创建服务端

        b. –boostrap-expect 关于服务leader投票等相关的level设定

        c. –data-dir相关信息的文件路径,不指定的话,就在consul目录下生成

        d. –node节点名称

        e. –bind绑定的你服务器的IP

        f. –dc数据中心名称

        更多的配置信息说明,请参考官方内容,地址:https://www.consul.io/docs/agent/options.html

      4.  创建client方式

      如上,只是删掉了-server

      consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1

      5.  以配置文件形式创建

      命令后面加 -config-file=./conf

      consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf

      ./conf目录下包含json格式的配置信息,将配置的设置都存放在该文件下,可以注册服务和healthCheck等等

    {
      "log_level": "TRACE",
      "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==",
      "service": {
        "name": "web3",
        "tags": ["master"],
        "address": "127.0.0.1",
        "port": 58807,
        "checks": [
          {
            "http": "http://127.0.0.1:60143/healthcheck",
            "interval": "10s"
          }
        ]
      }
    }

      6.  搭建服务集群(服务器之间关联)

      Consul join 其中一个服务器的ip,如: consul join 10.5.133.144

      7.  配置web ui的方式

      Web ui是consul提供的可视化的服务web界面,可以对key/value和服务、节点进行操作

        a. 将下载好的web ui文件内容(包含一个html和一个static文件件)拷贝到consul所在目录下dist(自己创建)文件夹下

      

        ps. 在原来创建server或者client的时候,需要设置-ui-dir ./dist

        如: consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf -ui-dir ./dist

        b. 打开127.0.0.1:8500 就可以打开界面了。

      8.  常见的consul 命令

      Consul members 查看服务集群的所有服务器

      Consul info 查看当前服务器的状况

      Consul leave 退出当前服务集群

    服务注册

    1. 通过Consul的服务注册HTTP API,由服务自身在启动后调用API注册自己(可以自定义服务客户端,调用api进行操作)
    2. 通过在配置文件中定义服务的方式进行注册
    {
      "service": {
        "name": "web3",
        "tags": ["master"],
        "address": "127.0.0.1",
        "port": 10000,
        "checks": [
          {
            "http": "http://localhost:10000/health",
            "interval": "10s"
          }
        ]
      }
    }

      以上注册了一个服务名称为web3地址127.0.0.1端口10000,同时还注册了一个healthcheck。

    服务发现

    1. 通过HTTP API查看存在哪些服务(自定义服务发现客户端)
    2. 通过consul agent内置的DNS服务(如果是windows系统可以下载dig工具,发现dns服务,ps. Windows系统不建议作为server)

      可以根据服务check的实时状态动态调整available服务节点列表

      dig @127.0.0.1 -p 8600 web3.service.consul SRV

    服务发现HTTP API

    http://www.codeweblog.com/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E7%B3%BB%E7%BB%9Fconsul-http-api/  

    api 提供增删改查nodes、services、checks、configuration。

    以下consul 的http api,距离,查看所有服务,打开地址如下:127.0.0.1:8500/v1/agent/services,就可以查看所有服务的信息

    如上图,找到了一个名为"web3"的服务。

    1. api包含以下几部分内容

      kv - Key/Value存储

      agent - Agent控制

      catalog - 管理nodes和services

      health - 管理健康监测

      session - Session操作

      acl - ACL创建和管理

      event - 用户Events

      status - Consul系统状态

      2. agent的api

      和本地agent交互,用于服务注册和检查注册

    /v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口)
    /v1/agent/services : 返回本地agent注册的所有 服务
    /v1/agent/members : 返回agent在集群的gossip pool中看到的成员
    /v1/agent/self : 返回本地agent的配置和成员信息
    /v1/agent/join/<address> : 触发本地agent加入node
    /v1/agent/force-leave/<node>>: 强制删除node
    /v1/agent/check/register : 在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据
    /v1/agent/check/deregister/<checkID> : 注销一个本地agent的检查项
    /v1/agent/check/pass/<checkID> : 设置一个本地检查项的状态为passing
    /v1/agent/check/warn/<checkID> : 设置一个本地检查项的状态为warning
    /v1/agent/check/fail/<checkID> : 设置一个本地检查项的状态为critical
    /v1/agent/service/register : 在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据
    /v1/agent/service/deregister/<serviceID> : 注销一个本地agent的服务项

      3. catalog 的api

      注册、注销nodes、services、checks

    /v1/catalog/register : Registers a new node, service, or check
    /v1/catalog/deregister : Deregisters a node, service, or check
    /v1/catalog/datacenters : Lists known datacenters
    /v1/catalog/nodes : Lists nodes in a given DC
    /v1/catalog/services : Lists services in a given DC
    /v1/catalog/service/<service> : Lists the nodes in a given service
    /v1/catalog/node/<node> : Lists the services provided by a node

      4. health

      查询相关的健康信息

    /v1/health/node/<node>: 返回node所定义的检查,可用参数?dc=
    /v1/health/checks/<service>: 返回和服务相关联的检查,可用参数?dc=
    /v1/health/service/<service>: 返回给定datacenter中给定node中service
    /v1/health/state/<state>: 返回给定datacenter中指定状态的服务,state可以是"any", "unknown", "passing", "warning", or "critical",可用参数?dc=
    1. session

    增删改查session信息

    /v1/session/create: Creates a new session
    /v1/session/destroy/<session>: Destroys a given session
    /v1/session/info/<session>: Queries a given session
    /v1/session/node/<node>: Lists sessions belonging to a node
    /v1/session/list: Lists all the active sessions

      5. acl

      增删改查acl信息

    /v1/acl/create: Creates a new token with policy
    /v1/acl/update: Update the policy of a token
    /v1/acl/destroy/<id>: Destroys a given token
    /v1/acl/info/<id>: Queries the policy of a given token
    /v1/acl/clone/<id>: Creates a new token by cloning an existing token
    /v1/acl/list: Lists all the active tokens

      6. event

      触发event和查询已有event

    /v1/event/fire/<name>: 触发一个新的event,用户event需要name和其他可选的参数,使用PUT方法
    /v1/event/list: 返回agent知道的events

      7. status

      consul 集群的信息

    /v1/status/leader : 返回当前集群的Raft leader
    /v1/status/peers : 返回当前集群中同事

    服务发现客户端

    从nuget上下载consul包,里面包含consul的所有操作。

    源码地址:https://github.com/PlayFab/consuldotnet/

    举例通过key获取value

    1. 在UI添加一个key/value的内容(也可以在程序中添加)

    2. 获取value代码如下

    static void Main(string[] args)
            {
                Console.WriteLine(HelloConsul().GetAwaiter().GetResult());
                Console.ReadLine();
            }
            public static async Task<string> HelloConsul()
            {
                using (var client = new ConsulClient())
                {
    
                    var getPair = await client.KV.Get("hello1");
                    return Encoding.UTF8.GetString(getPair.Response.Value, 0,
                        getPair.Response.Value.Length);
                }   
            }

    3. 结果如下:

    更多服务发现客户端的内容,后续补上。

  • 相关阅读:
    家谱树 x
    codevs 1231 最优布线问题 x(find函数要从娃娃抓起系列)
    洛谷 P1546 最短网络 Agri-Net x
    codevs 5969 [AK]刻录光盘x
    家谱(gen)x
    [POJ2594]Treasure Exploration(最小路径覆盖变种,floyd算法,匈牙利算法)
    [HDOJ5855]Less Time, More profit(最大权闭合子图,二分,最大流)
    [HDOJ1054]Strategic Game(最小点覆盖,最大二分匹配,HK算法)
    [HDOJ3829]Cat VS Dog(最大独立集)
    [HDOJ3488]Tour(二分图最小匹配,KM算法)
  • 原文地址:https://www.cnblogs.com/ruanyifeng/p/5550102.html
Copyright © 2011-2022 走看看