本文共 10305 字,大约阅读时间需要 34 分钟。
Fabio(Go 语言):
Fabio 是一个快速、现代、zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的微服务。
Fabio 由 eBay Classifieds Group 开发,用于处理 marktplaats.nl 和 kijiji.it 的流量。Marktplaats 所有的流量都经过 Fabio ,每秒有 250000 个请求,分发于数个 Fabio 实例,并且没有出现任何延迟。
简单流程图(摘自 ):
====== 服务注册 ========= =========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 文件(地址:):
$ 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 常用地址(示例):
服务注册的时候,需要以 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://www.cnblogs.com/xishuai/p/macos-and-ubuntu-install-fabio.html,如需转载请自行联系原作者