consul usage

启动

1
$ consul agent -dev -bind=0.0.0.0 -client=0.0.0.0 -advertise=127.0.0.1

高可用

接口

查询所有服务

1
curl -XGET http://localhost:8500/v1/catalog/services

查询服务所有监控实例

1
curl -XGET http://localhost:8500/v1/health/service/:servicename

列出所有节点

1
curl -XGET http://localhost:8500/v1/catalog/nodes

强制去除节点

1
curl -XPUT http://localhost:8500/v1/agent/force-leave/:node_name	

KV

导入导出

exportimport

1
2
3
4
consul kv export > data.json         # 导出所有
consul kv export online/ > data.json # 导出 online 前缀
# 指定 consul 地址
consul kv export -http-addr=http://10.20.10.3:8500 > data.json
1
2
consul kv import @data.json         # 文件导入, 需要在文件名前加 @
cat data.json | consul kv import - # 通过管道导入

查询

1
2
# 列出所有 key
curl --location --request GET 'http://127.0.0.1:8500/v1/kv/?keys'

注意

Blocking Query / Long Pull

指定参数 index={latest-index},latest-index 是相对于 kv prefix 而言,在 response 的 header 中 X-Consul-Index 返回。

使用 consul kv 做开关

1
2
3
4
5
6
function is_enable() {
consul_key_prefix="path/to/config"
config=$(curl "http://127.0.0.1:8500/v1/kv/${consul_key_prefix}?raw=true" | jq -r ".enable")
[ X"$config" = X"true" ] && return 0
return 1
}