Summary
以下所做操作是基于<<consul之集群搭建>>中的环境.
192.168.1.101(consul-client01)是一个consul client节点, 服务与发现操作都在其上进行.
服务注册
- 需要在服务(应用)所在的节点注册服务,该节点角色一般是client.
- 你在那个节点注册服务,那该服务会被自动识别为来自该节点。
- 配置文件做服务定义
在节点consul配置目录下建立一个服务定义文件.
这个服务文件的大意是:注册了一个名称是web,运行在8080端口的服务。并且定义了一个健康检查.
$ vim /opt/consul/conf/web.json
1 | { |
通过consul reload进行热注册
以下命令可以这样理解, consul二进制命令联系本地consul的http api让其加载配置文件.
1 | $ consul reload --http-addr=192.168.1.101:8500 |
用Python启动一个SimpleHTTPServer ,作为健康检查的接口.
1 | $ python -m SimpleHTTPServer 8080 |
此时可在“http://192.168.1.4:8500/ui”看到, ==在节点consul-client01下==出现一个名称是“web”的服务.
- 调用HTTP API进行定义
建立一个服务定义文件,格式是JSON的.
less /tmp/redis.json
1 | { |
通过API接口提交,和“/tmp/redis.json”同目录执行如下命令.
1 | curl --request PUT --data @redis.json http://192.168.1.101:8500/v1/agent/service/register |
此时可在“http://192.168.1.4:8500/ui”看到, ==在节点consul-client01下==出现一个名称是“redis”的服务.
- 注册服务时指定的参数
还有其它参数,请见官网!
a) 例1
1 | { |
服务发现
- 使用DNS API查看
对于DNS API,服务的DNS名称是NAME.service.consul,
默认所有的DNS名称都是在consul名称空间下,当然这个是可配置的,
service子域名告诉Consul我们正在查询服务,并且NAME就是要查询的服务的名称。
a) 使用DNS API的方式查看服务对应的IP
1 | $ dig @192.168.1.101 -p 8600 web.service.consul |
b)使用DNS API来获取完整的地址/端口的SRV记录
1 | $ dig @192.168.1.101 -p 8600 web.service.consul SRV |
c) 使用DNS API结合tag来过滤服务
基于标记的服务查询的格式是TAG.NAME.service.consul。 这里以查询Consul中所有含”master”标记的web服务为例:
1 | dig @192.168.1.101 -p 8600 master.web.service.consul |
- 使用HTTP API查看
a) 查询指定的服务信息
不管服务health check 是否failing,都会返回.
1 | curl http://192.168.1.101:8500/v1/catalog/service/web | python -m json.tool |
b)查看健康的服务, 可能在多个节点都有名叫web的服务,如下返回所有健康的web服务信息。
注意:该URL最后的参数是serviceName
1 | curl http://192.168.1.101:8500/v1/health/service/web?passing | python -m json.tool |
c) 查看服务健康状态
1 | curl http://192.168.1.101:8500/v1/health/service/web | python -m json.tool |
d) 查询所有服务
1 | curl http://192.168.1.101:8500/v1/catalog/services | python -m json.tool |
服务注销
==执行如下语句,则会删除192.168.1.101:8500这个节点先前注册的“web”服务,其它节点注册的“web”服务是不会被删除的.==
注意:URL最后的参数是serviceID, 如你在注册时没有指定serviceID, 则其等于服务名.
1 | curl --request PUT http://192.168.1.101:8500/v1/agent/service/deregister/web |
服务维护
让服务处于维护模式
1 | curl --request PUT http://192.168.1.4:8500/v1/agent/service/maintenance/prod-cloudiya-com?enable=true |
解除服务维护模式
1 | curl --request PUT http://192.168.1.4:8500/v1/agent/service/maintenance/prod-cloudiya-com?enable=false |
注:prod-cloudiya-com是service id.