zoukankan      html  css  js  c++  java
  • Consul的使用二

    测试环境运行

    consul agent -dev -ui

     

    退出

    Ctrl^c

    或者

    kill -INT consul-pid

    这种情况下, 节点会通知集群自己即将离开集群。

    也可以强制退出

    kill -9 consul-pid

     

    加入集群

    通过join命令或者通过配置文件自动join.

     

    命令行配置

    Consul的配置可以通过配置文件和命令行来指定,配置文件可以有多个,加载配置文件的顺序是字典序的, 后面的会覆盖前面的, 并且命令行的参数会覆盖配置文件里的参数。

    Consul的配置可通过SIGHUP信号或reload命令来重新加载。

    命令行参数:

    下面是我认为的一些比较重要的命令行参数

    -bootstrap: 用来指定agent以"bootstrap" 模式启动, 一个集群里只能有一个服务器以"bootstrap"模式启动 , 因为以bootstrap模式启动的会自动称为集群的leader, 而集群的leader只能有一个。

    -bootstrap-expect: 指定期望启动的以server模式启动的agent。只有当指定的server启动之后集群才开始启动。

    -bind: 指定集群内部通信的地址, 默认是0.0.0.0,如果有多个地址consul会报错。另外Consul中tcp和udp使用同一个端口。

    -client: Consul绑定的客户端接口地址, 包括HTTP服务器和DNS服务器。默认是127.0.0.1

    -config-file: 配置文件地址, 可指定多次, 后面覆盖前面

    -config-dir: 配置文件目录, 会读取里面的所有以.json.hcl结尾的配置文件。此选项可指定多次。

    -data-dir: Consul客户端用来存储数据的目录

    -dev: 启用开发模式。在此模式下, 客户端不会启用持久化, 所有数据都保存在内存中。Connect也是关闭的。

    -domain: 指定域名, 默认是consul.

    -join: 指定需要加入的另一个客户端的地址, 可以多次指定不同的地址。 如果Consul join失败客户端会启动失败。

    -retry-join: 类似于-join, 不过会在第一次失败的时候重试。可以指定IPv4, IPv6和DNS地址。可以指定多次, 如果指定多次, 则Consul按照顺序依次尝试, 直到第一次成功。另外从0.9.1版本开始, consul支持加入各个云服务提供商的集群, 具体见https://www.consul.io/docs/agent/cloud-auto-join.html

     

    配置文件

    配置文件可以用来设置Consul客户端, 提供check和service定义。

    示例配置文件如下:

    {
    "datacenter": "east-aws",
    "data_dir": "/opt/consul",
    "log_level": "INFO",
    "node_name": "foobar",
    "server": true,
    "watches": [
      {
          "type": "checks",
          "handler": "/usr/bin/health-check-handler.sh"
      }
    ],
    "telemetry": {
        "statsite_address": "127.0.0.1:2180"
    }
    }

    Consul默认不会对HTTP API启用TLS, 除非https配置项被指定。

    常用配置项:

    acl: 配置ACL的各种参数。

    bootstrap: 等同于-bootstrap

    bootstrap_expect: 等同于-bootstrap-expect

    bind_addr: 等同于-bind

    verify_incoming: 如果设为true, 要求所有进来的连接都使用TLS。

    verify_outgoing: 如果设为true, 要求所有出去的连接都使用TLS。

    verify_server_hostname: 如果设为true,会验证所有出去的使用TLS的的连接的证书的域名匹配当前客户端的域名。

    connect: Connect的各项配置

    watches: 一个watcher的列表, 当被watch的数据变化的时候, 会自动调用指定的外部应用。

     

    配置项

    配置项用来提供集群里的各种默认配置, 可以通过CLI和API来配置, 也可以内嵌在配置文件中。每个配置项都有两个属性:KindName

    示例:

    Kind = "<supported kind>"
    Name = "<name of entry>"

    支持的Kind类型有这几s种:

    service-router: 基于HTTP层路由请求

    service-splitter: 转发路由到一个服务的示例不同子集中

    service-rosolver: 根据不同规则匹配实例

    service-defaults: 配置一个服务所有服务的默认配置

    proxy-defaults: 配置代理

    另外, 每个配置项中都可以配置ACL访问规则

     

    以下是常见命令:

    列出服务默认配置

    consul config list -kind service-defaults

     

    读取一个服务的配置

    consul config read -kind service-defaults -name web

     

    根据配置文件修改默认配置

    consul config write proxy-defaults.hcl

     

    删除配置

    consul config delete -kind service-defaults -name web

     

    服务注册

    通过Consul客户端可以定义一个service, 可选地也可以定义一个和service关联的健康检查。

    服务可以在配置文件中定义,或者在运行时通过通过HTTP接口注册。

     

    官方文档中一个完整的服务注册配置如下:

    {
    "service": {
      "id": "redis",
      "name": "redis",
      "tags": ["primary"],
      "address": "",
      "meta": {
        "meta": "for my service"
      },
      "tagged_addresses": {
        "lan": {
          "address": "192.168.0.55",
          "port": 8000,
        },
        "wan": {
          "address": "198.18.0.23",
          "port": 80
        }
      },
      "port": 8000,
      "enable_tag_override": false,
      "checks": [
        {
          "args": ["/usr/local/bin/check_redis.py"],
          "interval": "10s"
        }
      ],
      "kind": "connect-proxy",
      "proxy_destination": "redis", // Deprecated
      "proxy": {
        "destination_service_name": "redis",
        "destination_service_id": "redis1",
        "local_service_address": "127.0.0.1",
        "local_service_port": 9090,
        "config": {},
        "upstreams": [],
        "mesh_gateway": {
          "mode": "local"
        },
        "expose": {
          "checks": true,
          "paths": [
            {
              "path": "/healthz",
              "local_path_port": 8080,
              "listener_port": 21500,
              "protocol": "http2"
            }
          ]
        }
      },
      "connect": {
        "native": false,
        "sidecar_service": {}
        "proxy": { // Deprecated
          "command": [],
          "config": {}
        }
      },
      "weights": {
        "passing": 5,
        "warning": 1
      },
      "token": "233b604b-b92e-48c8-a253-5f11514e4b50",
      "namespace": "foo"
    }
    }

     

    一个service必须包含一个name, 以及可选的id, tags, address, meta, port, enable_tag_override以及check。

    id不填的话默认是name的值。

    tags主要是用来区别不同的节点, 不同的服务版本等等。

    meta提供元数据信息。

    checks配置service关联的一个或多个健康检查配置。

    Connect:

    当kind为connect-proxy时, 这个服务被标记为connect代理实例, 此时destination_service_name`是必填的。

    Connect也可以和service共存在一台服务器上,通过设置native为true, 或者native为false, 设置sidecar_serice属性。

    也可以通过services配置多个service。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    asp.net webform 增加 loading
    DataTable 数据筛选
    c# float 类型传入 sql server float 参数导致结果错误
    Delphi Modal窗体(ModalResult、ShowModal)的介绍、使用方法和注意事项
    通用流水线处理器技术参数
    处理器系列技术参数
    云端一体全栈解决方案
    Camera系列规格参数
    分立器件成品参数
    新能源与智能制造
  • 原文地址:https://www.cnblogs.com/helloz/p/12115782.html
Copyright © 2011-2022 走看看