Skip to content

参考:Consul 四大功能速查与命令清单

基于 Consul 1.18 · 核于 2026-08

速查

  • Consul 定义:HashiCorp 出品的分布式服务发现 + mesh 平台,CP 型(Raft),一个 Go 二进制打包服务发现/健康检查/KV/多 DC/Connect。
  • 四大功能:服务发现(DNS/HTTP)、健康检查(HTTP/TCP/Script/TTL,三态)、KV(CAS/Watch/Session-Lock)、Connect mesh(Sidecar mTLS + Intentions)。
  • 架构:Server(3/5 个,Raft 强一致目录)+ Client Agent(每节点一个,注册/探活/Gossip),LAN/WAN Gossip 互联。
  • 一致性:Raft(目录/KV 强一致)+ Gossip(节点存活最终一致)分工。CP 型——分区时少数派不可写。
  • 健康检查:默认反向探(Agent 探服务),TTL 是主动报。三态 passing/warning/critical,critical 被摘除。
  • DNS 端口:8600。<service>.service.consul 只返回 passing。
  • 与 Nacos 对比:Consul CP/反向探/DNS/国际;Nacos AP/主动报/配置中心原生/中国事实标准。
  • 与 etcd 对比:Consul 业务服务发现开箱即用;etcd 是纯 KV 底座(K8s 用),业务发现要自拼。

一、四大功能速查

功能核心关键 API/机制
服务发现服务名 → 健康实例列表DNS(<svc>.service.consul)/ HTTP(/v1/health/service/:name?passing=true
健康检查周期性探活,摘除故障实例HTTP/TCP/Script/TTL,interval 周期,三态
KV 存储层级化键值,配置/锁/选举/v1/kv/:key,CAS(?cas=)、Watch(?index=&wait=)、Session-Lock
Connect meshSidecar mTLS + 授权consul connect proxy,Intentions(-allow/-deny

二、健康检查类型与状态映射

类型字段passing 条件warning/critical
HTTPhttp + interval2xx429=warning,其他/超时=critical
TCPtcp + interval能建立连接连不上=critical
Scriptargs + interval退出码 01=warning,其他=critical
TTLttl服务周期性 check pass超时未报=critical
Dockerdocker_container_id容器 running非 running=critical
gRPCgrpc + intervalSERVING其他=critical
  • 默认反向探:HTTP/TCP/Script/gRPC/Docker 都是 Agent 主动探;只有 TTL 是服务主动上报。
  • deregister_critical_service_after:critical 超该时长自动摘除(防僵尸实例)。

三、常用命令速查

bash
# —— Agent 启动 ——
consul agent -dev                                  # 开发模式(单节点,本机)
consul agent -server -bootstrap-expect=3 -data-dir=/consul/data \
  -node=server1 -bind=10.0.0.1 -client=0.0.0.0    # 生产 Server
consul agent -data-dir=/consul/data -node=node1 -bind=10.0.0.5  # Client Agent
consul join 10.0.0.1                              # 加入集群

# —— 服务管理 ——
consul catalog list services                       # 列所有服务
consul catalog nodes -service=order-service       # 列某服务的节点
consul services register my-service.json          # 注册(配置文件)
consul services deregister order-1                # 反注册

# —— 健康检查 ——
consul health service order-service               # 列实例及检查状态
consul health service order-service -passing      # 只看健康
consul monitor                                    # 实时日志

# —— KV ——
consul kv put config/db/host 10.0.0.100
consul kv get config/db/host
consul kv get -detailed config/db/host            # 含 ModifyIndex
consul kv delete config/db/host
consul kv export config/                          # 导出前缀
consul kv import @backup.json                     # 导入

# —— Connect mesh ——
consul connect proxy -sidecar-for order-service   # 启 Sidecar
consul intention create -allow web api            # 授权
consul intention check web api                    # 校验(allowed/denied)
consul intention list

# —— 集群管理 ——
consul members                                    # 节点列表(Gossip 视角)
consul members -wan                               # 跨 DC 节点
consul operator raft list-peers                   # Raft 仲裁成员
consul info                                       # 详细状态
consul leave                                      # 优雅离开

四、关键 HTTP API

方法路径用途
PUT/v1/agent/service/register注册服务
PUT/v1/agent/service/deregister/:id反注册
GET/v1/health/service/:name?passing=true查健康实例
GET/v1/kv/:key读 KV
PUT/v1/kv/:key写 KV(?cas= CAS,?acquire=/?release= 锁)
GET/v1/kv/:key?index=&wait=Watch(长轮询)
PUT/v1/session/create创建 Session(锁/选举)
GET/v1/catalog/services列所有服务
GET/v1/status/leader当前 Raft leader

五、易错点清单

  • 「Consul 是 AP」:错。Consul 服务目录走 Raft,是 CP(分区时少数派不可写)。Nacos 默认 AP 才是 AP。
  • 「DNS 查询返回所有实例」:错。DNS 默认只返回 passingcritical/warning 自动排除。要含 warning 需改 ?passing 过滤配置或用 HTTP API。
  • 「健康检查 interval 越短越好」:错。太短(1s)压被探服务,太长(60s)故障发现慢。经验 5-15s。
  • 「TTL 检查能发现所有故障」:错。TTL 靠服务主动上报心跳,业务线程死锁但心跳线程活着时,TTL 探不出来。应配 HTTP 检查双保险。
  • 「注册时 name 和 id 是一回事」:错。name 是服务名(多实例同名),id 是实例唯一标识。多实例必须显式指定不同 id,否则互相覆盖。
  • 「Consul KV 能当配置中心用,和 Nacos 一样」:错。Consul KV 是裸 KV,无 Nacos 的 DataId/Group/命名空间/灰度/回滚原语,要做专业配置管理需团队自约定 key 规范或上专门配置中心。
  • 「Connect mesh 和 Istio 一样强」:错。Connect 是轻量 mesh(mTLS + Intentions),无 Istio 的细粒度流量拆分(金丝雀/AB/镜像)。Connect 适合已用 Consul 的团队顺手开 mesh,重度流量管理仍要 Istio。
  • 「Client Agent 存服务目录」:错。Client Agent 无状态,目录只在 Server(Raft)。Client 只是本地代表,转发给 Server。
  • 「consul agent -dev 能用于生产」:错。-dev 是单节点无持久化,仅本地调试。生产必须 Server 集群(3/5 个)+ Client Agent。

六、进阶方向(链接其他叶)

  • Etcd —— Consul 目录用的 Raft 与 etcd 同源,对比纯 KV 底座
  • Nacos —— Consul 在中国最常被对比的 AP 型注册中心 + 配置中心
  • Istio —— Consul Connect 的重量级 mesh 对手,流量管理更细

权威链接