测试环境运行

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。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2019-12-29 18:12  浮舟z  阅读(506)  评论(0编辑  收藏  举报