Fabio 安装和简单使用

来源:互联网 发布:python 查看环境变量 编辑:程序博客网 时间:2024/06/06 02:36

Fabio(Go 语言):https://github.com/eBay/fabio

Fabio 是一个快速、现代、zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的微服务。

Fabio 由 eBay Classifieds Group 开发,用于处理 marktplaats.nl 和 kijiji.it 的流量。Marktplaats 所有的流量都经过 Fabio ,每秒有 250000 个请求,分发于数个 Fabio 实例,并且没有出现任何延迟。

简单流程图(摘自 http://dockone.io/article/1567):

======    服务注册     =========       =========A服务   <------>      consul集群  ---->  健康的 A/不健康的 A 集群======    健康检查     =========       =========                                     ^                                     | 加入/移出路由表                                     |                                  ========                                   fabio 集群                                  ========                                     |                                     | A服务   如果找到则成功路由否则返回错误                                     V                                    http 请求

Mac OS 安装命令(如果没有安装 Consul,会自动安装):

$ brew install fabioUpdating Homebrew...==> Auto-updated Homebrew!Updated 1 tap (homebrew/core).==> New Formulaecrystal-icr     gcc@4.7         gnome-autoar    libchaos        llvm@3.8        pdftoipe        tomcat@8.0dbt             gcc@5           isl@0.12        libswiftnav     mps-youtube     recipes         ucggcc@4.6         gcc@6           lasso           llvm@3.7        ndenv           servus==> Updated Formulaeafflib                 dnscrypt-proxy         handbrake              mpv                    sasscant                    doxygen                hebcal                 mysql                  sbclantigen                duply                  highlight              mysql-connector-c++    sqldiffantlr                  flex                   hugo                   mysql-sandbox          sqliteapache-spark           fluent-bit             imagemagick            nagios                 sqlite-analyzerarangodb               fobis                  ipv6calc               nagios-plugins         stunnelastyle                 fontforge              jasper                 ncdc                   syncthingats2-postiats          fpp                    jenkins                ncftp                  tarantoolaws-sdk-cpp            freetype               lean-cli               neo4j                  taylorawscli                 ganglia                leptonica              nvm                    tile38bup                    gcc                    libass                 ooniprobe              vimcdiff                  gcc@4.9                libgit2                opentsdb               volatilitycfr-decompiler         geos                   libgit2-glib           osm2pgsql              vowpal-wabbitcheckstyle             git-annex              libpng                 osquery                weechatcloog                  git-lfs                libxml2                pngpaste               winecompcert               gitg                   lmdb                   poco                   winetrickscouchdb                gitless                m-cli                  pure-ftpd              wireguard-toolscppcheck               gmic                   macosvpn               qt5                    x265czmq                   gnome-builder          menhir                 questdb                yazdbhash                 gnutls                 mg                     rclone                 youtube-dldmd                    groonga                mitmproxy              re2==> Deleted Formulaecloog@0.18                            qt                                    tutumError: Could not link:/usr/local/share/man/man1/brew.1Please delete these paths and run `brew update`.==> Installing dependencies for fabio: consul==> Installing fabio dependency: consul==> Downloading https://homebrew.bintray.com/bottles/consul-0.7.2.sierra.bottle.tar.gz######################################################################## 100.0%==> Pouring consul-0.7.2.sierra.bottle.tar.gzError: The `brew link` step did not complete successfullyThe formula built, but is not symlinked into /usr/localCould not symlink bin/consulTarget /usr/local/bin/consulalready exists. You may want to remove it:  rm '/usr/local/bin/consul'To force the link and overwrite all conflicting files:  brew link --overwrite consulTo list all files that would be deleted:  brew link --overwrite --dry-run consulPossible conflicting files are:/usr/local/bin/consul==> CaveatsIf consul was built with --with-web-ui, you can activate the UI by runningconsul with `-ui-dir /usr/local/Cellar/consul/0.7.2/share/consul/web-ui`.zsh completion has been installed to:  /usr/local/share/zsh/site-functionsTo have launchd start consul now and restart at login:  brew services start consulOr, if you don't want/need a background service you can just run:  consul agent -dev -advertise 127.0.0.1 ==> Summary  /usr/local/Cellar/consul/0.7.2: 5 files, 27.6M ==> Installing fabio ==> Downloading https://homebrew.bintray.com/bottles/fabio-1.3.5.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring fabio-1.3.5.sierra.bottle.tar.gz  /usr/local/Cellar/fabio/1.3.5: 6 files, 10.1M

Ubuntu 安装比较麻烦点,具体步骤:

1. 创建fabio目录

$ mkdir /opt/fabio

2. 设置环境变量

$ export PATH=$PATH:/opt/fabio

3. 创建fabio.properties文件(/opt/fabio工作目录下)

$ touch fabio.properties

4. 下载 Fabio 文件(地址:https://github.com/eBay/fabio/releases):

$ wget https://github.com/eBay/fabio/releases/download/v1.3.5/fabio-1.3.5-go1.7.3-linux_amd64

5. 赋予权限

$ chmod a+x fabio-1.3.5-go1.7.3-linux_amd64

6. 设置fabio命令

$ ln -s fabio-1.3.5-go1.7.3-linux_amd64 fabio

安装好之后,直接输入命令(启动 Fabio):

$ fabio2017/01/04 03:04:44 [INFO] Runtime config{    "Proxy": {        "Strategy": "rnd",        "Matcher": "prefix",        "NoRouteStatus": 404,        "MaxConn": 10000,        "ShutdownWait": 0,        "DialTimeout": 30000000000,        "ResponseHeaderTimeout": 0,        "KeepAliveTimeout": 0,        "ReadTimeout": 0,        "WriteTimeout": 0,        "FlushInterval": 1000000000,        "LocalIP": "10.0.2.15",        "ClientIPHeader": "",        "TLSHeader": "",        "TLSHeaderValue": "",        "GZIPContentTypesValue": "",        "GZIPContentTypes": null    },    "Registry": {        "Backend": "consul",        "Static": {            "Routes": ""        },        "File": {            "Path": ""        },        "Consul": {            "Addr": "localhost:8500",            "Scheme": "http",            "Token": "",            "KVPath": "/fabio/config",            "TagPrefix": "urlprefix-",            "Register": true,            "ServiceAddr": ":9998",            "ServiceName": "fabio",            "ServiceTags": null,            "ServiceStatus": [                "passing"            ],            "CheckInterval": 1000000000,            "CheckTimeout": 3000000000        }    },    "Listen": [        {            "Addr": ":9999",            "Proto": "http",            "ReadTimeout": 0,            "WriteTimeout": 0,            "CertSource": {                "Name": "",                "Type": "",                "CertPath": "",                "KeyPath": "",                "ClientCAPath": "",                "CAUpgradeCN": "",                "Refresh": 0,                "Header": null            },            "StrictMatch": false        }    ],    "CertSources": {},    "Metrics": {        "Target": "",        "Prefix": "{{clean .Hostname}}.{{clean .Exec}}",        "Names": "{{clean .Service}}.{{clean .Host}}.{{clean .Path}}.{{clean .TargetURL.Host}}",        "Interval": 30000000000,        "GraphiteAddr": "",        "StatsDAddr": "",        "CirconusAPIKey": "",        "CirconusAPIApp": "fabio",        "CirconusAPIURL": "",        "CirconusCheckID": "",        "CirconusBrokerID": ""    },    "UI": {        "Addr": ":9998",        "Color": "light-green",        "Title": ""    },    "Runtime": {        "GOGC": 800,        "GOMAXPROCS": 1    },    "ListenerValue": [        ":9999"    ],    "CertSourcesValue": null}2017/01/04 03:04:44 [INFO] Version 1.3.5 starting2017/01/04 03:04:44 [INFO] Go runtime is go1.7.32017/01/04 03:04:44 [INFO] Using routing strategy "rnd"2017/01/04 03:04:44 [INFO] Using routing matching "prefix"2017/01/04 03:04:44 [INFO] Setting GOGC=8002017/01/04 03:04:44 [INFO] Setting GOMAXPROCS=12017/01/04 03:04:44 [INFO] Metrics disabled2017/01/04 03:04:44 [INFO] consul: Connecting to "localhost:8500" in datacenter "dc1"2017/01/04 03:04:44 [INFO] Admin server listening on ":9998"2017/01/04 03:04:44 [INFO] HTTP proxy listening on :99992017/01/04 03:04:44 [INFO] consul: Using dynamic routes2017/01/04 03:04:44 [INFO] consul: Using tag prefix "urlprefix-"2017/01/04 03:04:44 [INFO] consul: Watching KV path "/fabio/config"    2017/01/04 03:04:44 [INFO] agent: Synced service 'fabio-vagrant-ubuntu-trusty-9998'2017/01/04 03:04:44 [INFO] consul: Registered fabio with id "fabio-vagrant-ubuntu-trusty-9998"2017/01/04 03:04:44 [INFO] consul: Registered fabio with address "10.0.2.15"2017/01/04 03:04:44 [INFO] consul: Registered fabio with tags ""2017/01/04 03:04:44 [INFO] consul: Registered fabio with health check to "http://[10.0.2.15]:9998/health"2017/01/04 03:04:44 [INFO] consul: Health changed to #58782017/01/04 03:04:44 [INFO] consul: Manual config changed to #12017/01/04 03:04:44 [INFO] Updated config to2017/01/04 03:04:44 [INFO] consul: Health changed to #5879    2017/01/04 03:04:44 [INFO] agent: Synced check 'service:fabio-vagrant-ubuntu-trusty-9998'

Fabio 启动会连接本地的 Consul 服务,Fabio 常用地址(示例):

  • http://10.9.10.173:9998/health:服务可以请求到这个地址,用于服务的健康检查(Fabio 统一健康检查)。

  • http://10.9.10.173:9999/{servicename}:服务的负载均衡地址,所有的服务调用都会请求到这个 Origin,Fabio 会进行服务分发。

  • http://10.9.10.173:9998:Fabio 后台 UI 界面,可以看到服务地址和权重,也可以增加路由规则。

服务注册的时候,需要以 Fabio 的方式进行注册(SDK 进行实现)。

服务的路由需要添加{servicename}(Fabio 识别具体的服务),比如:

[Route("server-test/values")]public class ValuesController : Controller{    public string Get()    {        return "hello world";    }}

服务调用的时候,请求地址也需要添加{servicename}(Fabio 识别具体的服务),比如:

var service = await _serviceRegistry.GetServiceInstanceAsync("server-test");var serverUrl = $"{service.Address}:{service.Port}";if (!serverUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase))    serverUrl = "http://" + serverUrl;var url = $"{serverUrl}/server-test/values";var httpClient = new HttpClient();var response = await httpClient.GetAsync(url);

也可以直接在浏览器中输入服务负载均衡地址(测试 Fabio 是否正常),比如:

http://10.9.10.173:9999/server-test/values200hello world

Fabio 后台 UI 界面,示例(http://10.9.10.173:9998/routes?filter=):

相关文章: 

  • 分布式系统搭建:服务发现揭秘

原文地址:http://www.cnblogs.com/LoveOfPrince/p/6336472.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

原创粉丝点击