简介

fabio 是 ebay 团队用 golang 开发的一个快速、简单零配置,能够让 consul 部署的应用快速支持 http(s) 的负载均衡路由器。

因为 consul 支持服务注册与健康检查,所以 fabio 能够零配置提供负载,升级部署从未如此简单。

根据项目的介绍,fabio 能提供每秒15000次请求。

fabio 的工作就很简单了! 就是直接从consul 注册表里面取出健康的服务,根据服务注册时候的 tags 配置自动创建自己的路由表,然后当一个 http 请求过来的时候自动去做负载均衡

资料:

工作原理

  1. ====== 服务注册 ========= =========
  2. A服务 <------> consul集群 ----> 健康的 A/不健康的 A 集群
  3. ====== 健康检查 ========= =========
  4. ^
  5. | 加入/移出路由表
  6. |
  7. ========
  8. fabio 集群
  9. ========
  10. |
  11. | A服务 如果找到则成功路由,否则返回错误
  12. V
  13. http 请求

部署

创建配置文件 fabio.properties,更多配置文件信息请参考

  1. # 配置 consul 服务地址
  2. registry.consul.addr = 10.10.0.12:8500
  3. registry.consul.register.addr = 10.10.0.12:9998
  4. metrics.target = stdout

docker 部署

  1. $ 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

  1. version: '3.6'
  2. services:
  3. fabio:
  4. image: "magiconair/fabio"
  5. ports:
  6. - "9998:9998"
  7. - "9999:9999"
  8. volumes:
  9. - ./fabio.properties:/etc/fabio/fabio.properties

部署完成后打开ui管理界面 127.0.0.1:9998 如下,这里将显示所有注册完成的路有列表

fabio - 图1

客户端配置

nodejs 代码仓库: https://github.com/ddzyan/node-consul.git

核心逻辑:在 client 注册时需要添加上指定 tag 标签,类似于urlprefix-,如下

  1. consul.agent.service.register({
  2. name: 'cmdWork', // 服务名称可以不唯一,可以通过 name 获取批量服务信息
  3. id: `cmdWork-${number}`, // 服务Id必须唯一
  4. tags: ['urlprefix-a.com'], // 标签信息
  5. meta: {
  6. describe: 'commP',
  7. },
  8. address: '172.16.0.39', // 服务地址
  9. port: 3001, // 服务端口号
  10. check: {
  11. http: 'http://172.16.0.39:3001/health', // 服务地址
  12. interval: '5s', // 健康检测轮询时间
  13. timeout: '10s', // 超时时间
  14. status: 'critical', // 初始化服务状态
  15. },
  16. });

添加后在打开 fabio ui 管理界面,会发现路有已经完成注册,并且会根据服务数量自动进行轮询权限调整,可以通过一下命令测试请求请求转发

  1. $ curl -H "Host:a.com" http://127.0.0.1:9999/health