Consul 服务注册

服务注册是使用 Consul 的第一步:把服务的名字、地址、端口登记进服务目录,调用方才能按名字找到它。注册有配置文件与命令/API 两种主流方式,本节先讲最常用的配置文件方式。

配置文件注册

服务注册流向 把服务定义 JSON 放进 agent 的配置目录(-config-dir),一个文件可含一个 service 块,也可放多个:

{
  "service": {
    "name": "web",
    "id": "web-192.168.1.10-80",
    "address": "192.168.1.10",
    "port": 80,
    "tags": ["primary", "nginx"],
    "check": {
      "http": "http://192.168.1.10:80/health",
      "interval": "10s"
    }
  }
}

字段说明:

字段必填说明
name服务名,按此名做服务发现
id实例唯一标识,缺省等于 name;同机多实例时必须手动区分
address / port建议实例地址与端口,缺省时 address 取本机 IP
tags标签,可区分版本、环境,查询时按标签过滤
check健康检查定义,详见第 7 章

加载并验证

文件放进配置目录后启动 agent 即可自动注册;对运行中的 agent 执行 reload 平滑加载新文件:

sudo mkdir -p /etc/consul.d
sudo cp web-service.json /etc/consul.d/
consul reload                        # 平滑重载配置目录
# 输出:Configuration reload triggered
consul catalog services              # 验证注册结果
# 输出:consul  web

一个 web + 一个 api 的注册实例

再注册一个 api 服务,与 web 同放配置目录;两台机器的服务地址、端口不同,靠 id 区分:

{
  "service": {
    "name": "api",
    "id": "api-192.168.1.10-8080",
    "address": "192.168.1.10",
    "port": 8080,
    "tags": ["v1"]
  }
}
consul reload
consul catalog services
# 输出:api  consul  web
consul catalog service web           # 按服务名查看实例详情
# 输出:Node   Address        Service  ID             Tags
# 输出:主机名 192.168.1.10   web      web-192...-80  nginx

命令与 API 注册

程序运行期需要动态上下线时,用命令/API 方式:consul services register 读文件注册,或直接 PUT /v1/agent/service/register 提交同样的 JSON(第 6 章详解)。各语言 SDK 内部调用的就是这套接口。

小结

配置文件注册最省事:把 service 块放进配置目录、consul reload 即完成登记,配好 id 区分多实例。注册后务必用 consul catalog service 查询验证,确认地址端口与标签都符合预期。

笔记加载中…