简介
fabio 是 ebay 团队用 golang 开发的一个快速、简单零配置,能够让 consul 部署的应用快速支持 http(s) 的负载均衡路由器。
因为 consul 支持服务注册与健康检查,所以 fabio 能够零配置提供负载,升级部署从未如此简单。
根据项目的介绍,fabio 能提供每秒15000次请求。
fabio 的工作就很简单了! 就是直接从consul 注册表里面取出健康的服务,根据服务注册时候的 tags 配置自动创建自己的路由表,然后当一个 http 请求过来的时候自动去做负载均衡
资料:
工作原理
====== 服务注册 ========= =========
A服务 <------> consul集群 ----> 健康的 A/不健康的 A 集群
====== 健康检查 ========= =========
^
| 加入/移出路由表
|
========
fabio 集群
========
|
| A服务 如果找到则成功路由,否则返回错误
V
http 请求
部署
创建配置文件 fabio.properties,更多配置文件信息请参考
# 配置 consul 服务地址
registry.consul.addr = 10.10.0.12:8500
registry.consul.register.addr = 10.10.0.12:9998
metrics.target = stdout
docker 部署
$ docker run -d --name fabio -p 9999:9999 -p 9998:9998 -v $PWD/fabio/fabio.properties:/etc/fabio/fabio.properties fabiolb/fabio
docker-compose 部署 docker-compose.yml
version: '3.6'
services:
fabio:
image: "magiconair/fabio"
ports:
- "9998:9998"
- "9999:9999"
volumes:
- ./fabio.properties:/etc/fabio/fabio.properties
部署完成后打开ui管理界面 127.0.0.1:9998
如下,这里将显示所有注册完成的路有列表
客户端配置
nodejs 代码仓库: https://github.com/ddzyan/node-consul.git
核心逻辑:在 client 注册时需要添加上指定 tag 标签,类似于urlprefix-
,如下
consul.agent.service.register({
name: 'cmdWork', // 服务名称可以不唯一,可以通过 name 获取批量服务信息
id: `cmdWork-${number}`, // 服务Id必须唯一
tags: ['urlprefix-a.com'], // 标签信息
meta: {
describe: 'commP',
},
address: '172.16.0.39', // 服务地址
port: 3001, // 服务端口号
check: {
http: 'http://172.16.0.39:3001/health', // 服务地址
interval: '5s', // 健康检测轮询时间
timeout: '10s', // 超时时间
status: 'critical', // 初始化服务状态
},
});
添加后在打开 fabio ui 管理界面,会发现路有已经完成注册,并且会根据服务数量自动进行轮询权限调整,可以通过一下命令测试请求请求转发
$ curl -H "Host:a.com" http://127.0.0.1:9999/health