白日依山尽,黄河入海流。欲穷千里目,更上一层楼。 -- 唐·王之涣

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"service": {
"name": "xxx-php",
"tags": ["php"],
"address": "xxx-php.172.16.27.68.nip.io",
"port": 8080,
"checks": [
{
"http": "http://xxx-php.172.16.27.68.nip.io:8080/actuator/health",
"interval": "10s",
"timeout": "3s"
}
]
}
}

分析上面的配置文件:

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/ |设置本地agent的一个检查项为fail|
|v1/agent/service/register |在本地agent注册一个服务项|
|v1/agent/service/register/ |注销本地agent的服务项|

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/ : Lists the nodes in a given service
/v1/catalog/node/ : Lists the services provided by a node

4、 session

/v1/session/create: Creates a new session
/v1/session/destroy/: Destroys a given session
/v1/session/info/: Queries a given session
/v1/session/node/: Lists sessions belonging to a 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/: Destroys a given token
/v1/acl/info/: Queries the policy of a given token
/v1/acl/clone/: Creates a new token by cloning an existing token
/v1/acl/list: Lists all the active tokens

6、event

/v1/event/fire/: 触发一个新的event,用户event需要name和其他可选的参数,使用PUT方法
/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/

作者

Colin

发布于

2022-05-06

许可协议