20220506 consul restful api汇总
这里不介绍具体的consul安装,可以参考官网安装很简单。在实际的使用中,一般都是结合ansible,把consul server 和 client的安装分别做了不同的角色,后续重复使用。文末提供了具体的ansible角色配置
Java/PHP 配置使用
目前业务场景中,Java的配置使用Apollo作为配置中心,PHP则采用原始的服务器文件结合git仓库统一管理配置。故两种不同的场景下对于Consul的配置是存在差异的
一、 Java 服务注册Consul
Java采用apollo作为配置中心,所有一般情况下开发侧都有实现公共组件来加载Apollo的配置。需要运维协助的点
1.1、利用ansible consul client角色在主机节点初始化的时候自动化安装 consul agent
consul agent 会在本地启动 8500端口
提供 HTTP API接口
,consul的很多操作都是基于该API接口,比如服务的注册和注销等,详细API接口说明详见文件第二趴
1.2、在Apollo中新增项目,并在对应的环境添加 application
namespace,并添加如下配置
依据上图我们知道,核心就是让服务知道往那个地址去注册,然后注册的时候服务ID(名称) 是什么。当然这里有个很重要点就是: 健康检查接口
, 不管是什么服务,要接入consul,比如提供 /actuator/health
这样的标准化健康检查接口
1.3、运维确认各节点监控检查是否通过,然后通过consul自带的 WebUI
(在consul.json配置中有个ui选项,一般在配置 server的时候会开启为true) 界面查看对应的service及其关联的node
二、PHP 服务注册Consul
PHP服务没有采用Apollo作为配置中心,所有在接入的时候是在主机节点/etc/consul.d/
下新增对应的服务的独立配置文件,然后重启consul agent ,就可以实现接入。
当然PHP服务接入之前需要做特殊处理:
1、PHP主机节点上部署nginx服务,通过nginx服务代理PHP对外提供 HTTP 接口 (因为consul的健康检查是通过HTTP协议,而不是PHP的fastcgi协议)
2、当然保证对应的PHP服务提供了 /actuator/health
这样的标准化健康检查接口
然后进行配置接入,配置demo如下:
1 | { |
分析上面的配置文件:
1、上面的配置文件其实确实一个 id(serviceid)
的配置,如果没有该配置,默认是和name保持一致,当然为了可读性建议是明确指定
这里为什么要单独说明这个 serviceid 呢?
前面提到过consul 的很多操作都是通过 RESTful API 接口实现的,其中有一个注销一个本地agent的服务项 /v1/agent/service/deregister/<serviceid>
这里就需要一个 serviceid
2、其中的address这里一般是配置成当前主机节点的IP地址,但是如果服务器上多有个PHP服务的时候,大家都用当前主机节点的IP地址肯定是有问题的。所以这里一般建议配置成可读性的域名。
上面刚提到过在PHP节点主机需要部署nginx,然后会进行相关的nginx server配置。配置server_name是有个可读性域名的时候,有两种方式
2.1、常规配置,维护一套内部DNS服务,然后定义一个内部域名,使用该DNS进行解析,或者在所有主机节点通过ansible维护一套 hosts 对应关系作为内部域名或者主机的解析。当然缺点是维护成本较高
2.2、使用 nip.io 这样的解析,不需要维护DNS或者hosts文件的方式,简单高效。这里就是使用该方案。
3、然后 systemctl restart consul
重启client,通过 WebUI 或者 consul catalog services |grep xxx-php
就可以看到服务注册到了consul
Consul endpoints
这一趴主要是介绍 consul restful api 对于不同的endpoint提供的增删改查的接口说明
1、endpoint 说明
endpoint | 说明 |
---|---|
kv | 对key/value储存的操作 |
agent | 对consul agent client的管理 |
catalog | 管理node和service |
health | 健康检查相关 |
session | Session相关操作 |
status | consul系统状态 |
acl | ACL创建和管理,相对用得少 |
event | 用户events |
2、agent
|接口|说明|
|—|—|
|和本地agent交互,常用作服务注册和检查等|
|v1/agent/checks||
|v1/agent/services||
|v1/agent/members||
|v1/agent/self||
|v1/agent/join/
|v1/agent/force-leave/
|v1/agent/check/register||
|v1/agent/check/deregister/
|v1/agent/check/pass/
|v1/agent/check/warn/
|v1/agent/check/fail/
|v1/agent/service/register |在本地agent注册一个服务项|
|v1/agent/service/register/
3、catalog
/v1/catalog/register : Registers a new node, service, or check
/v1/catalog/deregister : Deregisters a node, service, or check
/v1/catalog/datacenters : Lists known datacenters
/v1/catalog/nodes : Lists nodes in a given DC
/v1/catalog/services : Lists services in a given DC
/v1/catalog/service/
/v1/catalog/node/
4、 session
/v1/session/create: Creates a new session
/v1/session/destroy/
/v1/session/info/
/v1/session/node/
/v1/session/list: Lists all the active sessions
5、acl
/v1/acl/create: Creates a new token with policy
/v1/acl/update: Update the policy of a token
/v1/acl/destroy/
/v1/acl/info/
/v1/acl/clone/
/v1/acl/list: Lists all the active tokens
6、event
/v1/event/fire/
/v1/event/list: 返回agent知道的events
7、status
/v1/status/leader : 返回当前集群的Raft leader
/v1/status/peers : 返回当前集群中同事
1、监控检查
接口 | 说明 |
---|---|
/v1/health/node/ |
返回node所定义的检查,可用参数?dc= |
/v1/health/checks/ |
返回和服务相关联的检查,可用参数?dc= |
/v1/health/service/ |
返回给定datacenter中给定node中service |
/v1/health/state/ |
返回给定datacenter中指定状态的服务,state可以是”any”, “unknown”, “passing”, “warning”, or “critical”,可用参数?dc= |
参考连接:
1、Apollo配置中心官网 https://github.com/ctripcorp/apollo
2、Apollo的介绍和配置 https://www.cnblogs.com/mingyueyy/p/15304212.html
3、consul 官网 https://www.consul.io/docs
4、nip.io 官网 https://nip.io/
20220506 consul restful api汇总
http://blog.colinspace.com/2022/05/06/20220506-consul-restful-api汇总/